From 37718d1d13513748a6dcab279a87e5a284f56b9d Mon Sep 17 00:00:00 2001 From: Steve Date: Fri, 23 Feb 2024 15:32:30 +0100 Subject: [PATCH 01/48] chore: first converstion --- src/js/vanilla/kompleter.js | 189 ++++++++++++++++++++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 src/js/vanilla/kompleter.js diff --git a/src/js/vanilla/kompleter.js b/src/js/vanilla/kompleter.js new file mode 100644 index 0000000..0e9d92e --- /dev/null +++ b/src/js/vanilla/kompleter.js @@ -0,0 +1,189 @@ +((window) => { + if (window.kompleter) { + throw new Error('window.kompleter already exists !'); + } + + window.kompleter = { + HTMLElements: { + focused: null, + input: null, + result: null, + suggestions: [], + }, + props: { + response: {}, + pointer: -1, + previousValue: null, + }, + options: { + id: '', + url: '', + store: false, + animation: '', + animationSpeed: '', + begin: true, + startOnChar: 2, + maxResults: 10, + field: null, + fieldsToDisplay: null, + beforeDisplay: (e, dataset) => {}, + afterDisplay: (e, dataset) => {}, + beforeFocus: (e, dataset) => {}, + afterFocus: (e, dataset) => {}, + beforeComplete: (e, dataset) => {}, + afterComplete: (e, dataset) => {}, + }, + listeners: { + onNavigate: () => { + this.HTMLElements.input.addEventListener('keyup', (e) => { + e = e || windows.event; + const keycode = e.keycode; + // Up / down in results + if(keycode === 38 || keycode === 40) { + kompleter.handlers.navigate(keycode); + } + // Insert suggestion who's have the focus + else if (keycode === 13) { + kompleter.handlers.select(); + } else { + if(kompleter.HTMLElements.input.value !== kompleter.props.previousValue) { + kompleter.handlers.display(); + } + } + }); + }, + onHide: (HTMLElements) => { + const body = document.getElementsByTagName('body').shift(); + body.addEventListener('click', (e) => { + HTMLElements.style.display = 'none'; + }); + }, + onSelect: (className) => { + kompleter.HTMLElements.suggestions = document.getElementsByClassName(className); + if(typeof kompleter.HTMLElements.suggestions !== 'undefined') { + const numberOfSuggestions = kompleter.HTMLElements.suggestions.length; + if(numberOfSuggestions) { + for(let i = 0; i < numberOfSuggestions; i++) { + return function(i) { + kompleter.HTMLElements.suggestions[i].addEventListener('click', (e) => { + kompleter.HTMLElements.focused = kompleter.HTMLElements.suggestions[i]; + kompleter.handlers.select(); + }); + } + } + } + } + } + }, + handlers: { + navigate: (keycode) => { + if(kompleter.props.pointer >= -1 && kompleter.props.pointer <= kompleter.HTMLElements.suggestions.length - 1) { + // Pointeur en dehors du data set, avant le premier résultat + if(kompleter.props.pointer === -1) { + if(keycode === 40) { + kompleter.SetFocus(keycode); + } + } + // Pointeur au dernier résultat du data set + else if (kompleter.props.pointer === kompleter.HTMLElements.suggestions.length - 1) { + if(keycode === 38) { + kompleter.SetFocus(keycode); + } + } + // Pointeur dans le data set + else { + kompleter.SetFocus(keycode); + } + } + }, + suggest: () => { + kompleter.HTMLElements.result.style.display = 'block'; + kompleter.props.pointer = -1; + + const headers = new Headers(); + headers.append('content-type', 'application/x-www-form-urlencoded'); + headers.append('method', 'GET'); + + fetch(`${kompleter.options.url}?'requestExpression=${kompleter.HTMLElements.input.value}`, headers) + .then(result => result.json()) + .then(result => { + let text = ""; + if(result && result.length) { + kompleter.props.response = result; + const properties = kompleter.options.fieldsToDisplay.length; + for(let i = 0; i < result.length ; i++) { + if(typeof response[i] !== 'undefined') { + let cls; + i + 1 === result.length ? cls = 'last' : cls = ''; + text += '
'; + for(let j = 0; j < properties; j++) { + text += '' + response[i][j] + ''; + } + text += '
'; + } + } + } else { + text = '
Not found
'; + } + + // text = '
Error
'; + + kompleter.HTMLElements.result.innerHTML = text; + kompleter.listeners.onSelect('item--result'); + }); + }, + select: () => { + const id = null; + kompleter.HTMLElements.focused !== null ? id = kompleter.HTMLElements.Focused.id : id = 0; + kompleter.HTMLElements.input.value = kompleter.HTMLElements.response[id][0]; + kompleter.props.pointer = -1; + kompleter.HTMLElements.result.style.display = 'none'; + }, + }, + init: (options) => { + this.options = options; + this.HTMLElements.result = this.build('div', [ { id: 'result', className: 'form--lightsearch__result' } ]); + + const searcher = document.getElementById('searcher'); + searcher.appendChild(this.HTMLElements.result); + + this.HTMLElements.input = document.getElementById('autocomplete'); + + this.listeners.onNavigate(); + this.listeners.onHide(); + }, + build: (element, attributes = []) => { + const html = document.createElement(element); + attributes.forEach(attribute => { + html.setAttribute(attribute.key, attribute.value); + }); + }, + setFocus: (keycode) => { + if(keycode === 40) { + if(this.Pointer !== -1) { + kompleter.removeFocus(); + } + kompleter.props.pointer++; + kompleter.getFocus(); + } else if(keycode === 38) { + kompleter.removeFocus(); + kompleter.props.pointer--; + if(kompleter.props.pointer !== -1) { + kompleter.GetFocus(); + } + } + }, + getFocus: () => { + kompleter.HTMLElements.focused = kompleter.HTMLElements.suggestions[kompleter.props.pointer]; + kompleter.HTMLElements.suggestions[kompleter.props.pointer].className += ' focus'; + }, + removeFocus: () => { + kompleter.HTMLElements.focused = null; + kompleter.HTMLElements.suggestions[kompleter.props.pointer].className += ' item--result'; + }, + }; + + window.kompleter.init(); +})(window); + +// Le set properties, il n'est pas nécessaire -> tu peux define ça dans une config js coté client \ No newline at end of file From 4c8790e503bddef7e3fa79af11e9a841358a205d Mon Sep 17 00:00:00 2001 From: Steve Date: Sat, 24 Feb 2024 15:36:45 +0100 Subject: [PATCH 02/48] feat: 1st functional vanilla version --- package.json | 2 +- src/index.html | 25 +++- src/js/vanilla/kompleter.js | 288 +++++++++++++++++++++++------------- webpack.config.js | 14 +- 4 files changed, 220 insertions(+), 109 deletions(-) diff --git a/package.json b/package.json index 0d44676..74e9cd4 100755 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "jQuery auto-complete plugin", "main": "src/js/index.js", "scripts": { - "build": "mkdir -p dist && cp -r src/index.html src/files/ dist/ & npm run js & npm run css & exit", + "build": "mkdir -p dist && cp -r src/index.html src/files/ dist/ & npm run css & npm run js", "css": "node-sass ./src/sass/kompleter.scss ./dist/css/kompleter.min.css --output-style compressed", "js": "webpack", "cypress:open": "cypress open", diff --git a/src/index.html b/src/index.html index 6808e1e..47a8883 100644 --- a/src/index.html +++ b/src/index.html @@ -18,8 +18,9 @@ - - + + + @@ -40,8 +41,24 @@ diff --git a/src/js/vanilla/kompleter.js b/src/js/vanilla/kompleter.js index 0e9d92e..b3e2168 100644 --- a/src/js/vanilla/kompleter.js +++ b/src/js/vanilla/kompleter.js @@ -3,7 +3,7 @@ throw new Error('window.kompleter already exists !'); } - window.kompleter = { + const kompleter = { HTMLElements: { focused: null, input: null, @@ -11,51 +11,46 @@ suggestions: [], }, props: { - response: {}, + response: {}, // Clarify / refactor the usage of response vs suggestions pointer: -1, previousValue: null, }, options: { - id: '', - url: '', - store: false, - animation: '', - animationSpeed: '', + id: 'default-kompleter', // Todo + dataSource: '', + store: false, // Todo + animation: '', // Todo + animationSpeed: '', // Todo begin: true, startOnChar: 2, maxResults: 10, - field: null, + filterOn: null, fieldsToDisplay: null, - beforeDisplay: (e, dataset) => {}, - afterDisplay: (e, dataset) => {}, - beforeFocus: (e, dataset) => {}, - afterFocus: (e, dataset) => {}, - beforeComplete: (e, dataset) => {}, - afterComplete: (e, dataset) => {}, + beforeDisplayResults: (e, dataset) => {}, + afterDisplayResults: (e, dataset) => {}, + beforeFocusOnItem: (e, dataset, current) => {}, + afterFocusOnItem: (e, dataset, current) => {}, + beforeSelectItem: (e, dataset, current) => {}, + afterSelectItem: (e, dataset, current) => {}, }, listeners: { - onNavigate: () => { - this.HTMLElements.input.addEventListener('keyup', (e) => { - e = e || windows.event; - const keycode = e.keycode; - // Up / down in results - if(keycode === 38 || keycode === 40) { - kompleter.handlers.navigate(keycode); - } - // Insert suggestion who's have the focus - else if (keycode === 13) { + onType: () => { + kompleter.HTMLElements.input.addEventListener('keyup', (e) => { + const keyCode = e.keyCode; + + if(keyCode === 38 || keyCode === 40) { // Up / down + kompleter.handlers.navigate(keyCode); + } else if (keyCode === 13) { // Enter kompleter.handlers.select(); - } else { - if(kompleter.HTMLElements.input.value !== kompleter.props.previousValue) { - kompleter.handlers.display(); - } + } else if (kompleter.HTMLElements.input.value !== kompleter.props.previousValue) { + kompleter.handlers.suggest(); } }); }, - onHide: (HTMLElements) => { - const body = document.getElementsByTagName('body').shift(); + onHide: () => { + const body = document.getElementsByTagName('body')[0]; body.addEventListener('click', (e) => { - HTMLElements.style.display = 'none'; + kompleter.HTMLElements.result.style.display = 'none'; }); }, onSelect: (className) => { @@ -64,60 +59,107 @@ const numberOfSuggestions = kompleter.HTMLElements.suggestions.length; if(numberOfSuggestions) { for(let i = 0; i < numberOfSuggestions; i++) { - return function(i) { - kompleter.HTMLElements.suggestions[i].addEventListener('click', (e) => { + ((i) => { + return kompleter.HTMLElements.suggestions[i].addEventListener('click', (e) => { kompleter.HTMLElements.focused = kompleter.HTMLElements.suggestions[i]; kompleter.handlers.select(); }); - } + })(i) } } } } }, handlers: { - navigate: (keycode) => { - if(kompleter.props.pointer >= -1 && kompleter.props.pointer <= kompleter.HTMLElements.suggestions.length - 1) { - // Pointeur en dehors du data set, avant le premier résultat - if(kompleter.props.pointer === -1) { - if(keycode === 40) { - kompleter.SetFocus(keycode); - } - } - // Pointeur au dernier résultat du data set - else if (kompleter.props.pointer === kompleter.HTMLElements.suggestions.length - 1) { - if(keycode === 38) { - kompleter.SetFocus(keycode); - } + build: function (element, attributes = []) { + const htmlElement = document.createElement(element); + attributes.forEach(attribute => { + htmlElement.setAttribute(attribute.key, attribute.value); + }); + return htmlElement; + }, + filter: function(records) { + const value = kompleter.HTMLElements.input.value.toLowerCase(); + return records.filter(record => { + if(isNaN(value)) { + return kompleter.options.begin === true ? record[kompleter.options.filterOn].toLowerCase().lastIndexOf(value, 0) === 0 : record[kompleter.options.filterOn].toLowerCase().lastIndexOf(value) !== -1; + } else { + return parseInt(value) === parseInt(record[kompleter.options.filterOn]); } - // Pointeur dans le data set - else { - kompleter.SetFocus(keycode); + }); + }, + focus: function(action) { + if (!['add', 'remove'].includes(action)) { + throw new Error('action should be one of ["add", "remove]: ' + action + ' given.'); + } + switch (action) { + case 'remove': + kompleter.HTMLElements.focused = null; + Array.from(kompleter.HTMLElements.suggestions).forEach(suggestion => { + ((suggestion) => { + suggestion.className = 'item--result'; + })(suggestion) + }); + break; + case 'add': + kompleter.HTMLElements.focused = kompleter.HTMLElements.suggestions[kompleter.props.pointer]; + kompleter.HTMLElements.suggestions[kompleter.props.pointer].className += ' focus'; + break; + } + }, + navigate: function (keyCode) { + this.point(keyCode); + this.focus('remove'); + this.focus('add'); + }, + point: function(keyCode) { + // The pointer is in the range: after or as the initial position and before the last element in suggestions + if(kompleter.props.pointer >= -1 && kompleter.props.pointer <= kompleter.HTMLElements.suggestions.length - 1) { + // Pointer in initial position, and we switch down -> up index of the pointer + if(kompleter.props.pointer === -1 && keyCode === 40) { + kompleter.props.pointer++; + } else if (kompleter.props.pointer === kompleter.HTMLElements.suggestions.length - 1 && keyCode === 38) { // Pointer in last position, and we switch up -> down index of the pointer + kompleter.props.pointer--; + } else if (keyCode === 38) { // Pointer in range, down index of the pointer + kompleter.props.pointer--; + } else if (keyCode === 40) { // Pointer in range, up index of the pointer + kompleter.props.pointer++; } } }, - suggest: () => { + select: function () { + let id = null; + id = kompleter.HTMLElements.focused.id || 0; + kompleter.HTMLElements.input.value = kompleter.props.response[id][0]; + kompleter.props.pointer = -1; + kompleter.HTMLElements.result.style.display = 'none'; + }, + suggest: function () { kompleter.HTMLElements.result.style.display = 'block'; kompleter.props.pointer = -1; + // TODO requestExpression should be managed somewhere else. This method is just responsible to retrieve the data. To challenge vs the cache/store + const headers = new Headers(); headers.append('content-type', 'application/x-www-form-urlencoded'); headers.append('method', 'GET'); - fetch(`${kompleter.options.url}?'requestExpression=${kompleter.HTMLElements.input.value}`, headers) + fetch(`${kompleter.options.dataSource}?'requestExpression=${kompleter.HTMLElements.input.value}`, headers) .then(result => result.json()) .then(result => { + console.log('result', result) + console.log('result', typeof result) let text = ""; if(result && result.length) { - kompleter.props.response = result; + kompleter.props.response = this.filter(result); const properties = kompleter.options.fieldsToDisplay.length; for(let i = 0; i < result.length ; i++) { - if(typeof response[i] !== 'undefined') { + if(typeof kompleter.props.response[i] !== 'undefined') { let cls; i + 1 === result.length ? cls = 'last' : cls = ''; text += '
'; for(let j = 0; j < properties; j++) { - text += '' + response[i][j] + ''; + text += '' + kompleter.props.response[i][j] + ''; } text += '
'; } @@ -132,58 +174,98 @@ kompleter.listeners.onSelect('item--result'); }); }, - select: () => { - const id = null; - kompleter.HTMLElements.focused !== null ? id = kompleter.HTMLElements.Focused.id : id = 0; - kompleter.HTMLElements.input.value = kompleter.HTMLElements.response[id][0]; - kompleter.props.pointer = -1; - kompleter.HTMLElements.result.style.display = 'none'; - }, + validate: function(options) { + // Ne valider que ce qui est donné ou requis + // Le reste doit fallback sur des valeurs par défaut quand c'est possible + } }, - init: (options) => { - this.options = options; - this.HTMLElements.result = this.build('div', [ { id: 'result', className: 'form--lightsearch__result' } ]); + init: function(options) { + + // Préfixer sur les valeurs + + // ---------- Gérer les callbacks opts + + // ---------- Gérer le store + // Gérer le fetch mutliple en cas de store + // Gérer la durée de validité du store en cas de store + + // ---------- Gérer les animations + + kompleter.options = Object.assign(kompleter.options, options); + + kompleter.HTMLElements.result = kompleter.handlers.build('div', [ { id: 'result', className: 'form--lightsearch__result' } ]); - const searcher = document.getElementById('searcher'); - searcher.appendChild(this.HTMLElements.result); + const searcher = document.getElementById('wrapper'); + searcher.appendChild(kompleter.HTMLElements.result); - this.HTMLElements.input = document.getElementById('autocomplete'); + kompleter.HTMLElements.input = document.getElementById('auto-complete'); - this.listeners.onNavigate(); - this.listeners.onHide(); - }, - build: (element, attributes = []) => { - const html = document.createElement(element); - attributes.forEach(attribute => { - html.setAttribute(attribute.key, attribute.value); - }); - }, - setFocus: (keycode) => { - if(keycode === 40) { - if(this.Pointer !== -1) { - kompleter.removeFocus(); - } - kompleter.props.pointer++; - kompleter.getFocus(); - } else if(keycode === 38) { - kompleter.removeFocus(); - kompleter.props.pointer--; - if(kompleter.props.pointer !== -1) { - kompleter.GetFocus(); - } - } - }, - getFocus: () => { - kompleter.HTMLElements.focused = kompleter.HTMLElements.suggestions[kompleter.props.pointer]; - kompleter.HTMLElements.suggestions[kompleter.props.pointer].className += ' focus'; - }, - removeFocus: () => { - kompleter.HTMLElements.focused = null; - kompleter.HTMLElements.suggestions[kompleter.props.pointer].className += ' item--result'; + // ---------- Gérer les paramètres opts + + // Aller chercher sur data- et options, faire un merge, c'est options qui gagne si conflit + // Valider le résultat + // id unique, obligé + + // L'assigner si c'est ok + + // /!\ Si tu bouges aux options ici, tu vas devoir adapter le jQuery aussi + + // --- Currently managed as data-attributes + + const dataSource = kompleter.HTMLElements.input.dataset['url']; + const filterOn = kompleter.HTMLElements.input.dataset['filter-on']; + const fieldsToDisplay = kompleter.HTMLElements.input.dataset['fields-to-display']; + + console.log('v', dataSource) + console.log('v', filterOn) + console.log('v', fieldsToDisplay) + + // --- Other ones + + /** + id + store: false, // Todo + animation: '', // Todo + animationSpeed: '', // Todo + begin: true, + startOnChar: 2, + maxResults: 10, + beforeDisplayResults: (e, dataset) => {}, + afterDisplayResults: (e, dataset) => {}, + beforeFocusOnItem: (e, dataset, current) => {}, + afterFocusOnItem: (e, dataset, current) => {}, + beforeSelectItem: (e, dataset, current) => {}, + afterSelectItem: (e, dataset, current) => {}, + */ + + // --- Playable as data- + + /** + store: false, // Todo + animation: '', // Todo + animationSpeed: '', // Todo + begin: true, + startOnChar: 2, + maxResults: 10, + */ + + // --- Required as options + + /** + beforeDisplayResults: (e, dataset) => {}, + afterDisplayResults: (e, dataset) => {}, + beforeFocusOnItem: (e, dataset, current) => {}, + afterFocusOnItem: (e, dataset, current) => {}, + beforeSelectItem: (e, dataset, current) => {}, + afterSelectItem: (e, dataset, current) => {}, + */ + + // --- Special case: the id -> ? Pass the input by id reference or HTMLElement ? + + kompleter.listeners.onType(); + kompleter.listeners.onHide(); }, }; - window.kompleter.init(); -})(window); - -// Le set properties, il n'est pas nécessaire -> tu peux define ça dans une config js coté client \ No newline at end of file + window.kompleter = { init: kompleter.init }; +})(window); \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js index 3eba36b..7152dae 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -12,7 +12,7 @@ module.exports = { bundles: [ { src: [ - './src/js/jquery.kompleter.js', + './src/js/jquery/jquery.kompleter.js', ], dest: './dist/js/jquery.kompleter.min.js', transforms: { @@ -22,6 +22,18 @@ module.exports = { }, }, }, + { + src: [ + './src/js/vanilla/kompleter.js', + ], + dest: './dist/js/kompleter.min.js', + transforms: { + after: async (code) => { + const minifiedCode = await terser.minify(code); + return minifiedCode.code; + }, + }, + }, ], }), ], From b2973ef33f1a57429a2b3c602ff2a7121bd052af Mon Sep 17 00:00:00 2001 From: Steve Date: Sat, 24 Feb 2024 21:36:19 +0100 Subject: [PATCH 03/48] chore: start v2 for more features with vanilla elegance --- src/index.html | 7 +- src/js/vanilla/kompleter.js | 307 ++++++++++++++++++++++-------------- 2 files changed, 197 insertions(+), 117 deletions(-) diff --git a/src/index.html b/src/index.html index 47a8883..e9eea30 100644 --- a/src/index.html +++ b/src/index.html @@ -51,13 +51,18 @@ }; ready(() => { kompleter.init({ + id: 'auto-complete', dataSource: 'files/kompleter.json', filterOn: 'Name', fieldsToDisplay: [ 'Name', 'CountryCode', 'Population' - ] + ], + animation: { + type: 'fadeIn', + duration: 500 + } }); }); diff --git a/src/js/vanilla/kompleter.js b/src/js/vanilla/kompleter.js index b3e2168..3709409 100644 --- a/src/js/vanilla/kompleter.js +++ b/src/js/vanilla/kompleter.js @@ -4,82 +4,65 @@ } const kompleter = { - HTMLElements: { - focused: null, - input: null, - result: null, - suggestions: [], - }, - props: { - response: {}, // Clarify / refactor the usage of response vs suggestions - pointer: -1, - previousValue: null, - }, - options: { - id: 'default-kompleter', // Todo - dataSource: '', - store: false, // Todo - animation: '', // Todo - animationSpeed: '', // Todo - begin: true, - startOnChar: 2, - maxResults: 10, - filterOn: null, - fieldsToDisplay: null, - beforeDisplayResults: (e, dataset) => {}, - afterDisplayResults: (e, dataset) => {}, - beforeFocusOnItem: (e, dataset, current) => {}, - afterFocusOnItem: (e, dataset, current) => {}, - beforeSelectItem: (e, dataset, current) => {}, - afterSelectItem: (e, dataset, current) => {}, - }, - listeners: { - onType: () => { - kompleter.HTMLElements.input.addEventListener('keyup', (e) => { - const keyCode = e.keyCode; - - if(keyCode === 38 || keyCode === 40) { // Up / down - kompleter.handlers.navigate(keyCode); - } else if (keyCode === 13) { // Enter - kompleter.handlers.select(); - } else if (kompleter.HTMLElements.input.value !== kompleter.props.previousValue) { - kompleter.handlers.suggest(); + animations: { + fadeIn: function(element, display) { + element.style.opacity = 0; + element.style.display = display || 'block'; + (function fade(){ + let value = parseFloat(element.style.opacity); + if (!((value += .1) > 1)) { + element.style.opacity = value; + requestAnimationFrame(fade); } - }); + })() }, - onHide: () => { - const body = document.getElementsByTagName('body')[0]; - body.addEventListener('click', (e) => { - kompleter.HTMLElements.result.style.display = 'none'; - }); - }, - onSelect: (className) => { - kompleter.HTMLElements.suggestions = document.getElementsByClassName(className); - if(typeof kompleter.HTMLElements.suggestions !== 'undefined') { - const numberOfSuggestions = kompleter.HTMLElements.suggestions.length; - if(numberOfSuggestions) { - for(let i = 0; i < numberOfSuggestions; i++) { - ((i) => { - return kompleter.HTMLElements.suggestions[i].addEventListener('click', (e) => { - kompleter.HTMLElements.focused = kompleter.HTMLElements.suggestions[i]; - kompleter.handlers.select(); - }); - })(i) - } + fadeOut: function(element) { + element.style.opacity = 1; + (function fade() { + if ((element.style.opacity -= .1) < 0) { + element.style.display = 'none'; + } else { + requestAnimationFrame(fade); } - } + })(); + }, + slideUp: function() { + + }, + slideDown: function() { + } }, + events: { + 'kompleter.render.result.done': new CustomEvent('kompleter.render.result.done', { + detail: {}, + bubble: true, + cancelable: false, + composed: false, + }), + 'kompleter.request.done': new CustomEvent('kompleter.request.done', { + detail: {}, + bubble: true, + cancelable: false, + composed: false, + }), + 'kompleter.result.show': new CustomEvent('kompleter.result.show', { + detail: {}, + bubble: true, + cancelable: false, + composed: false, + }) + }, handlers: { build: function (element, attributes = []) { const htmlElement = document.createElement(element); attributes.forEach(attribute => { - htmlElement.setAttribute(attribute.key, attribute.value); + htmlElement.setAttribute(Object.keys(attribute)[0], Object.values(attribute)[0]); }); return htmlElement; }, filter: function(records) { - const value = kompleter.HTMLElements.input.value.toLowerCase(); + const value = kompleter.htmlElements.input.value.toLowerCase(); return records.filter(record => { if(isNaN(value)) { return kompleter.options.begin === true ? record[kompleter.options.filterOn].toLowerCase().lastIndexOf(value, 0) === 0 : record[kompleter.options.filterOn].toLowerCase().lastIndexOf(value) !== -1; @@ -94,31 +77,32 @@ } switch (action) { case 'remove': - kompleter.HTMLElements.focused = null; - Array.from(kompleter.HTMLElements.suggestions).forEach(suggestion => { + kompleter.htmlElements.focused = null; + Array.from(kompleter.htmlElements.suggestions).forEach(suggestion => { ((suggestion) => { suggestion.className = 'item--result'; })(suggestion) }); break; case 'add': - kompleter.HTMLElements.focused = kompleter.HTMLElements.suggestions[kompleter.props.pointer]; - kompleter.HTMLElements.suggestions[kompleter.props.pointer].className += ' focus'; + kompleter.htmlElements.focused = kompleter.htmlElements.suggestions[kompleter.props.pointer]; + kompleter.htmlElements.suggestions[kompleter.props.pointer].className += ' focus'; break; } }, navigate: function (keyCode) { + // TODO fix navigation after last element is broken this.point(keyCode); this.focus('remove'); this.focus('add'); }, point: function(keyCode) { // The pointer is in the range: after or as the initial position and before the last element in suggestions - if(kompleter.props.pointer >= -1 && kompleter.props.pointer <= kompleter.HTMLElements.suggestions.length - 1) { + if(kompleter.props.pointer >= -1 && kompleter.props.pointer <= kompleter.htmlElements.suggestions.length - 1) { // Pointer in initial position, and we switch down -> up index of the pointer if(kompleter.props.pointer === -1 && keyCode === 40) { kompleter.props.pointer++; - } else if (kompleter.props.pointer === kompleter.HTMLElements.suggestions.length - 1 && keyCode === 38) { // Pointer in last position, and we switch up -> down index of the pointer + } else if (kompleter.props.pointer === kompleter.htmlElements.suggestions.length - 1 && keyCode === 38) { // Pointer in last position, and we switch up -> down index of the pointer kompleter.props.pointer--; } else if (keyCode === 38) { // Pointer in range, down index of the pointer kompleter.props.pointer--; @@ -127,58 +111,146 @@ } } }, - select: function () { - let id = null; - id = kompleter.HTMLElements.focused.id || 0; - kompleter.HTMLElements.input.value = kompleter.props.response[id][0]; - kompleter.props.pointer = -1; - kompleter.HTMLElements.result.style.display = 'none'; - }, - suggest: function () { - kompleter.HTMLElements.result.style.display = 'block'; - kompleter.props.pointer = -1; - - // TODO requestExpression should be managed somewhere else. This method is just responsible to retrieve the data. To challenge vs the cache/store - + request: function() { const headers = new Headers(); headers.append('content-type', 'application/x-www-form-urlencoded'); headers.append('method', 'GET'); - fetch(`${kompleter.options.dataSource}?'requestExpression=${kompleter.HTMLElements.input.value}`, headers) + fetch(`${kompleter.options.dataSource}?'r=${kompleter.htmlElements.input.value}`, headers) .then(result => result.json()) .then(result => { - console.log('result', result) - console.log('result', typeof result) - let text = ""; - if(result && result.length) { - kompleter.props.response = this.filter(result); - const properties = kompleter.options.fieldsToDisplay.length; - for(let i = 0; i < result.length ; i++) { - if(typeof kompleter.props.response[i] !== 'undefined') { - let cls; - i + 1 === result.length ? cls = 'last' : cls = ''; - text += '
'; - for(let j = 0; j < properties; j++) { - text += '' + kompleter.props.response[i][j] + ''; - } - text += '
'; - } - } - } else { - text = '
Not found
'; - } - - // text = '
Error
'; - - kompleter.HTMLElements.result.innerHTML = text; - kompleter.listeners.onSelect('item--result'); + kompleter.props.response = this.filter(result); + document.dispatchEvent(kompleter.events['kompleter.request.done']); + }) + .catch(e => { + console.error(e.message); + kompleter.htmlElements.result.innerHTML = '
Error
'; + kompleter.animations.fadeIn(kompleter.htmlElements.result); }); }, + select: function () { + let id = null; + id = kompleter.htmlElements.focused.id || 0; + kompleter.htmlElements.input.value = kompleter.props.response[id][0]; + kompleter.props.pointer = -1; + kompleter.htmlElements.result.style.display = 'none'; + }, validate: function(options) { // Ne valider que ce qui est donné ou requis // Le reste doit fallback sur des valeurs par défaut quand c'est possible } }, + htmlElements: { + focused: null, + input: null, + result: null, + suggestions: [], + }, + listeners: { + onHide: () => { + const body = document.getElementsByTagName('body')[0]; + body.addEventListener('click', (e) => { + kompleter.animations.fadeOut(kompleter.htmlElements.result); + }); + }, + onSelect: (className) => { + kompleter.htmlElements.suggestions = document.getElementsByClassName(className); + if(typeof kompleter.htmlElements.suggestions !== 'undefined') { + const numberOfSuggestions = kompleter.htmlElements.suggestions.length; + if(numberOfSuggestions) { + for(let i = 0; i < numberOfSuggestions; i++) { + ((i) => { + return kompleter.htmlElements.suggestions[i].addEventListener('click', (e) => { + kompleter.htmlElements.focused = kompleter.htmlElements.suggestions[i]; + kompleter.handlers.select(); + }); + })(i) + } + } + } + }, + onRequestDone: () => { + document.addEventListener('kompleter.request.done', (e) => { + kompleter.renders.results(e) + }); + }, + onRenderDone: () => { + document.addEventListener('kompleter.render.result.done', (e) => { + console.log('kompleter.render.result.done', e) + kompleter.animations.fadeIn(kompleter.htmlElements.result); + kompleter.listeners.onSelect('item--result'); + }); + }, + onShow: () => { + document.addEventListener('kompleter.result.show', (e) => { + kompleter.animations.fadeIn(kompleter.htmlElements.result); + kompleter.listeners.onSelect('item--result'); + }); + }, + onType: () => { + kompleter.htmlElements.input.addEventListener('keyup', (e) => { + const keyCode = e.keyCode; + if(keyCode === 38 || keyCode === 40) { // Up / down + kompleter.handlers.navigate(keyCode); + } else if (keyCode === 13) { // Enter + kompleter.handlers.select(); + } else if (kompleter.htmlElements.input.value !== kompleter.props.previousValue) { + kompleter.handlers.request(); + } + }); + }, + }, + options: { + id: null, + dataSource: null, + store: { + type: 'memory', // memory | indexedDB | localStorage + timelife: 50000, + }, + animation: { + type: 'fadeIn', + duration: 500 + }, + begin: true, + startOnChar: 2, + maxResults: 10, + filterOn: null, + fieldsToDisplay: null, + beforeDisplayResults: (e, dataset) => {}, + afterDisplayResults: (e, dataset) => {}, + beforeFocusOnItem: (e, dataset, current) => {}, + afterFocusOnItem: (e, dataset, current) => {}, + beforeSelectItem: (e, dataset, current) => {}, + afterSelectItem: (e, dataset, current) => {}, + }, + props: { + response: {}, // Clarify / refactor the usage of response vs suggestions + pointer: -1, + previousValue: null, + }, + renders: { + results: function(e) { + console.log('render.results', e) + let html = ''; + if(kompleter.props.response && kompleter.props.response.length) { + const properties = kompleter.options.fieldsToDisplay.length; // TODO should be validated as 3 or 4 max + flexbox design + for(let i = 0; i < kompleter.props.response.length ; i++) { + if(typeof kompleter.props.response[i] !== 'undefined') { + html += `
`; + for(let j = 0; j < properties; j++) { + html += '' + kompleter.props.response[i][j] + ''; + } + html += '
'; + } + } + } else { + html = '
Not found
'; + } + kompleter.htmlElements.result.innerHTML = html; + console.log('kompleter.htmlElements.result', kompleter.htmlElements.result) + document.dispatchEvent(kompleter.events['kompleter.render.result.done']) + } + }, init: function(options) { // Préfixer sur les valeurs @@ -193,12 +265,12 @@ kompleter.options = Object.assign(kompleter.options, options); - kompleter.HTMLElements.result = kompleter.handlers.build('div', [ { id: 'result', className: 'form--lightsearch__result' } ]); + kompleter.htmlElements.result = kompleter.handlers.build('div', [ { id: 'result' }, { className: 'form--lightsearch__result' } ]); const searcher = document.getElementById('wrapper'); - searcher.appendChild(kompleter.HTMLElements.result); + searcher.appendChild(kompleter.htmlElements.result); - kompleter.HTMLElements.input = document.getElementById('auto-complete'); + kompleter.htmlElements.input = document.getElementById(kompleter.options.id); // ---------- Gérer les paramètres opts @@ -212,9 +284,9 @@ // --- Currently managed as data-attributes - const dataSource = kompleter.HTMLElements.input.dataset['url']; - const filterOn = kompleter.HTMLElements.input.dataset['filter-on']; - const fieldsToDisplay = kompleter.HTMLElements.input.dataset['fields-to-display']; + const dataSource = kompleter.htmlElements.input.dataset['url']; + const filterOn = kompleter.htmlElements.input.dataset['filter-on']; + const fieldsToDisplay = kompleter.htmlElements.input.dataset['fields-to-display']; console.log('v', dataSource) console.log('v', filterOn) @@ -261,9 +333,12 @@ */ // --- Special case: the id -> ? Pass the input by id reference or HTMLElement ? - - kompleter.listeners.onType(); + kompleter.listeners.onHide(); + kompleter.listeners.onShow(); + kompleter.listeners.onType(); + kompleter.listeners.onRequestDone(); + kompleter.listeners.onRenderDone(); }, }; From 2e338cd6b9ac4e0f4b9e4c0087639b919999e975 Mon Sep 17 00:00:00 2001 From: Steve Date: Sun, 25 Feb 2024 11:48:17 +0100 Subject: [PATCH 04/48] chore: clean up status for next developments --- src/js/vanilla/kompleter.js | 212 +++++++++++++++++++++++------------- 1 file changed, 134 insertions(+), 78 deletions(-) diff --git a/src/js/vanilla/kompleter.js b/src/js/vanilla/kompleter.js index 3709409..adae568 100644 --- a/src/js/vanilla/kompleter.js +++ b/src/js/vanilla/kompleter.js @@ -3,11 +3,19 @@ throw new Error('window.kompleter already exists !'); } + /** + * @summary Kompleter.js is a library providing features dedicated to autocomplete fields. + * @author Steve Lebleu + */ const kompleter = { + + /** + * @descrption Animations functions + */ animations: { - fadeIn: function(element, display) { + fadeIn: function(element, display = 'block', duration = 500) { element.style.opacity = 0; - element.style.display = display || 'block'; + element.style.display = display; (function fade(){ let value = parseFloat(element.style.opacity); if (!((value += .1) > 1)) { @@ -16,7 +24,7 @@ } })() }, - fadeOut: function(element) { + fadeOut: function(element, duration = 500) { element.style.opacity = 1; (function fade() { if ((element.style.opacity -= .1) < 0) { @@ -26,33 +34,87 @@ } })(); }, - slideUp: function() { - + slideUp: function(element, duration = 500) { + element.style.transitionProperty = 'height, margin, padding'; + element.style.transitionDuration = duration + 'ms'; + element.style.boxSizing = 'border-box'; + element.style.height = element.offsetHeight + 'px'; + element.offsetHeight; + element.style.overflow = 'hidden'; + element.style.height = 0; + element.style.paddingTop = 0; + element.style.paddingBottom = 0; + element.style.marginTop = 0; + element.style.marginBottom = 0; + window.setTimeout( () => { + element.style.display = 'none'; + element.style.removeProperty('height'); + element.style.removeProperty('padding-top'); + element.style.removeProperty('padding-bottom'); + element.style.removeProperty('margin-top'); + element.style.removeProperty('margin-bottom'); + element.style.removeProperty('overflow'); + element.style.removeProperty('transition-duration'); + element.style.removeProperty('transition-property'); + }, duration); }, - slideDown: function() { - + slideDown: function(element, duration = 500) { + element.style.removeProperty('display'); + let display = window.getComputedStyle(element).display; + if (display === 'none') display = 'block'; + element.style.display = display; + let height = element.offsetHeight; + element.style.overflow = 'hidden'; + element.style.height = 0; + element.style.paddingTop = 0; + element.style.paddingBottom = 0; + element.style.marginTop = 0; + element.style.marginBottom = 0; + element.offsetHeight; + element.style.boxSizing = 'border-box'; + element.style.transitionProperty = "height, margin, padding"; + element.style.transitionDuration = duration + 'ms'; + element.style.height = height + 'px'; + element.style.removeProperty('padding-top'); + element.style.removeProperty('padding-bottom'); + element.style.removeProperty('margin-top'); + element.style.removeProperty('margin-bottom'); + window.setTimeout( () => { + element.style.removeProperty('height'); + element.style.removeProperty('overflow'); + element.style.removeProperty('transition-duration'); + element.style.removeProperty('transition-property'); + }, duration); } }, + + /** + * @description Custom events + */ events: { - 'kompleter.render.result.done': new CustomEvent('kompleter.render.result.done', { - detail: {}, + error: (detail = {}) => new CustomEvent('kompleter.error', { + detail, bubble: true, cancelable: false, composed: false, }), - 'kompleter.request.done': new CustomEvent('kompleter.request.done', { - detail: {}, + rendrResultDone: (detail = {}) => new CustomEvent('kompleter.render.result.done', { + detail, bubble: true, cancelable: false, composed: false, }), - 'kompleter.result.show': new CustomEvent('kompleter.result.show', { - detail: {}, + requestDone: (detail = {}) => new CustomEvent('kompleter.request.done', { + detail, bubble: true, cancelable: false, composed: false, - }) + }), }, + + /** + * @description Handlers of all religions + */ handlers: { build: function (element, attributes = []) { const htmlElement = document.createElement(element); @@ -120,12 +182,10 @@ .then(result => result.json()) .then(result => { kompleter.props.response = this.filter(result); - document.dispatchEvent(kompleter.events['kompleter.request.done']); + document.dispatchEvent(kompleter.events.requestDone()); }) .catch(e => { - console.error(e.message); - kompleter.htmlElements.result.innerHTML = '
Error
'; - kompleter.animations.fadeIn(kompleter.htmlElements.result); + document.dispatchEvent(kompleter.events.error({ message: e.message, stack: e?.stack, instance: e })); }); }, select: function () { @@ -136,16 +196,24 @@ kompleter.htmlElements.result.style.display = 'none'; }, validate: function(options) { - // Ne valider que ce qui est donné ou requis - // Le reste doit fallback sur des valeurs par défaut quand c'est possible + // Valid only what's required OR provided + // The rest should fallback on default values when it's feasible } }, + + /** + * @description HTMLElements container + */ htmlElements: { focused: null, input: null, result: null, suggestions: [], }, + + /** + * @description Events listeners + */ listeners: { onHide: () => { const body = document.getElementsByTagName('body')[0]; @@ -171,18 +239,11 @@ }, onRequestDone: () => { document.addEventListener('kompleter.request.done', (e) => { - kompleter.renders.results(e) + kompleter.render.results(e) }); }, onRenderDone: () => { document.addEventListener('kompleter.render.result.done', (e) => { - console.log('kompleter.render.result.done', e) - kompleter.animations.fadeIn(kompleter.htmlElements.result); - kompleter.listeners.onSelect('item--result'); - }); - }, - onShow: () => { - document.addEventListener('kompleter.result.show', (e) => { kompleter.animations.fadeIn(kompleter.htmlElements.result); kompleter.listeners.onSelect('item--result'); }); @@ -200,9 +261,13 @@ }); }, }, + + /** + * @description Public options + */ options: { id: null, - dataSource: null, + dataSource: null, // Can be ommited if data is provided directly. In this case we don't fetch. Allow credentials or API key on fetch ? store: { type: 'memory', // memory | indexedDB | localStorage timelife: 50000, @@ -211,6 +276,9 @@ type: 'fadeIn', duration: 500 }, + notification: { + // TODO + }, begin: true, startOnChar: 2, maxResults: 10, @@ -223,14 +291,26 @@ beforeSelectItem: (e, dataset, current) => {}, afterSelectItem: (e, dataset, current) => {}, }, + + /** + * @description Internal properties + */ props: { response: {}, // Clarify / refactor the usage of response vs suggestions pointer: -1, previousValue: null, }, - renders: { + + /** + * @description Rendering methods + */ + render: { + error: function(e) { + // TODO Do better on the error display / logging / notifications + kompleter.htmlElements.result.innerHTML = '
Error
'; + kompleter.animations.fadeIn(kompleter.htmlElements.result); + }, results: function(e) { - console.log('render.results', e) let html = ''; if(kompleter.props.response && kompleter.props.response.length) { const properties = kompleter.options.fieldsToDisplay.length; // TODO should be validated as 3 or 4 max + flexbox design @@ -247,19 +327,16 @@ html = '
Not found
'; } kompleter.htmlElements.result.innerHTML = html; - console.log('kompleter.htmlElements.result', kompleter.htmlElements.result) - document.dispatchEvent(kompleter.events['kompleter.render.result.done']) + document.dispatchEvent(kompleter.events.rendrResultDone()); } }, - init: function(options) { - - // Préfixer sur les valeurs - // ---------- Gérer les callbacks opts - - // ---------- Gérer le store - // Gérer le fetch mutliple en cas de store - // Gérer la durée de validité du store en cas de store + /** + * @description Kompleter entry point + * + * @param {*} options + */ + init: function(options) { // ---------- Gérer les animations @@ -274,34 +351,23 @@ // ---------- Gérer les paramètres opts - // Aller chercher sur data- et options, faire un merge, c'est options qui gagne si conflit - // Valider le résultat - // id unique, obligé - + // Valider le résultat -> pas de lib externe + // id unique, obligé // L'assigner si c'est ok // /!\ Si tu bouges aux options ici, tu vas devoir adapter le jQuery aussi - // --- Currently managed as data-attributes - - const dataSource = kompleter.htmlElements.input.dataset['url']; - const filterOn = kompleter.htmlElements.input.dataset['filter-on']; - const fieldsToDisplay = kompleter.htmlElements.input.dataset['fields-to-display']; - - console.log('v', dataSource) - console.log('v', filterOn) - console.log('v', fieldsToDisplay) - // --- Other ones /** id - store: false, // Todo - animation: '', // Todo - animationSpeed: '', // Todo + store: false, + animation: '', + animationSpeed: '', begin: true, startOnChar: 2, maxResults: 10, + notification: an instance of notifier, console by default beforeDisplayResults: (e, dataset) => {}, afterDisplayResults: (e, dataset) => {}, beforeFocusOnItem: (e, dataset, current) => {}, @@ -310,29 +376,19 @@ afterSelectItem: (e, dataset, current) => {}, */ - // --- Playable as data- + // --- Special case: the id -> ? Pass the input by id reference or HTMLElement ? - /** - store: false, // Todo - animation: '', // Todo - animationSpeed: '', // Todo - begin: true, - startOnChar: 2, - maxResults: 10, - */ - - // --- Required as options + // Préfixer sur les valeurs - /** - beforeDisplayResults: (e, dataset) => {}, - afterDisplayResults: (e, dataset) => {}, - beforeFocusOnItem: (e, dataset, current) => {}, - afterFocusOnItem: (e, dataset, current) => {}, - beforeSelectItem: (e, dataset, current) => {}, - afterSelectItem: (e, dataset, current) => {}, - */ + // ---------- Gérer les callbacks opts - // --- Special case: the id -> ? Pass the input by id reference or HTMLElement ? + // ---------- Gérer le store + // Gérer le fetch mutliple en cas de store + // Gérer la durée de validité du store en cas de store + + // ---------- Errorrs management + // Try catches + // Display kompleter.listeners.onHide(); kompleter.listeners.onShow(); From fdacb4738460564aa8bc7f8517d4bbe7d5cdc13e Mon Sep 17 00:00:00 2001 From: Steve Date: Tue, 27 Feb 2024 11:16:25 +0100 Subject: [PATCH 05/48] chore: draft store integration --- src/index.html | 4 ++ src/js/vanilla/kompleter.js | 138 +++++++++++++++++++++++++----------- 2 files changed, 101 insertions(+), 41 deletions(-) diff --git a/src/index.html b/src/index.html index e9eea30..a634088 100644 --- a/src/index.html +++ b/src/index.html @@ -53,6 +53,10 @@ kompleter.init({ id: 'auto-complete', dataSource: 'files/kompleter.json', + store: { + type: 'localStorage', + duration: 5000 + }, filterOn: 'Name', fieldsToDisplay: [ 'Name', diff --git a/src/js/vanilla/kompleter.js b/src/js/vanilla/kompleter.js index adae568..d9f4632 100644 --- a/src/js/vanilla/kompleter.js +++ b/src/js/vanilla/kompleter.js @@ -4,7 +4,8 @@ } /** - * @summary Kompleter.js is a library providing features dedicated to autocomplete fields. + * @summary Kompleter.js is a library providing features dedicated to autocomplete fields. + * * @author Steve Lebleu */ const kompleter = { @@ -88,6 +89,17 @@ } }, + /** + * @description Local pseudo enumerations + */ + enums: { + storage: { + memory: 'memory', + localStorage: 'localStorage', + indexedDb: 'indexedDb', + } + }, + /** * @description Custom events */ @@ -180,9 +192,8 @@ fetch(`${kompleter.options.dataSource}?'r=${kompleter.htmlElements.input.value}`, headers) .then(result => result.json()) - .then(result => { - kompleter.props.response = this.filter(result); - document.dispatchEvent(kompleter.events.requestDone()); + .then(data => { + document.dispatchEvent(kompleter.events.requestDone({ fromStore: false, data })); }) .catch(e => { document.dispatchEvent(kompleter.events.error({ message: e.message, stack: e?.stack, instance: e })); @@ -239,7 +250,15 @@ }, onRequestDone: () => { document.addEventListener('kompleter.request.done', (e) => { - kompleter.render.results(e) + // TODO: store in cache + // TODO: filter shouldn' be applied systematicaly if the back returns filtered data + // TODO: should we store filtered data or not ? + // TODO probably the following line will be in the store.set for memory cache + kompleter.props.response = kompleter.handlers.filter(e.detail.data); + if (!e.detail.fromStore) { + kompleter.store.set(e.detail.data); + } + kompleter.render.results(e.detail.data); }); }, onRenderDone: () => { @@ -255,8 +274,13 @@ kompleter.handlers.navigate(keyCode); } else if (keyCode === 13) { // Enter kompleter.handlers.select(); - } else if (kompleter.htmlElements.input.value !== kompleter.props.previousValue) { - kompleter.handlers.request(); + } else if ( kompleter.htmlElements.input.value !== kompleter.props.previousValue ) { + + if (kompleter.store.isActive() && kompleter.store.isValid()) { + document.dispatchEvent(kompleter.events.requestDone({ fromStore: true, data: kompleter.store.get() })); + } else { + kompleter.handlers.request(); + } } }); }, @@ -268,8 +292,9 @@ options: { id: null, dataSource: null, // Can be ommited if data is provided directly. In this case we don't fetch. Allow credentials or API key on fetch ? + dataSet: null, // It's dataset with the data, or dataSource without. If data source, you can play with a store, if not consumer play on his side store: { - type: 'memory', // memory | indexedDB | localStorage + type: 'localStorage', timelife: 50000, }, animation: { @@ -331,6 +356,56 @@ } }, + store: { + get: () => { + switch (kompleter.options.store.type) { + case kompleter.enums.storage.memory: + break; + case kompleter.enums.storage.localStorage: + return JSON.parse(window.localStorage.getItem('kompleter.cache.data')); + break; + case kompleter.enums.storage.indexedDB: + break; + }; + if (kompleter.options.store.storage === kompleter.enums.storage.localStorage) { + const createdAt = JSON.parse(window.localStorage.getItem('kompleter.cache.createdAt')); + if (createdAt + kompleter.options.store.duration < Date.now()) { + + } + } + }, + isActive: () => { + return kompleter.options.store; + }, + isValid: () => { + switch (kompleter.options.store.type) { + case kompleter.enums.storage.memory: + break; + case kompleter.enums.storage.localStorage: + const createdAt = JSON.parse(window.localStorage.getItem('kompleter.cache.createdAt')); + if (parseInt(createdAt + kompleter.options.store.duration, 10) >= Date.now()) { + return true; + } + return false; + break; + case kompleter.enums.storage.indexedDB: + break; + }; + }, + set: (data) => { + switch (kompleter.options.store.type) { + case kompleter.enums.storage.memory: + break; + case kompleter.enums.storage.localStorage: + window.localStorage.setItem('kompleter.cache.createdAt', JSON.stringify(Date.now())); + window.localStorage.setItem('kompleter.cache.data', JSON.stringify(data)); + break; + case kompleter.enums.storage.indexedDB: + break; + }; + }, + }, + /** * @description Kompleter entry point * @@ -338,8 +413,6 @@ */ init: function(options) { - // ---------- Gérer les animations - kompleter.options = Object.assign(kompleter.options, options); kompleter.htmlElements.result = kompleter.handlers.build('div', [ { id: 'result' }, { className: 'form--lightsearch__result' } ]); @@ -349,49 +422,32 @@ kompleter.htmlElements.input = document.getElementById(kompleter.options.id); - // ---------- Gérer les paramètres opts - - // Valider le résultat -> pas de lib externe - // id unique, obligé - // L'assigner si c'est ok + // /!\ Adapt jQuery version to be ISO - // /!\ Si tu bouges aux options ici, tu vas devoir adapter le jQuery aussi + // ---------- Manage animations + // ---------- Manage options + // ---------- Manage callback options + // No external lib // --- Other ones - /** - id - store: false, - animation: '', - animationSpeed: '', - begin: true, - startOnChar: 2, - maxResults: 10, - notification: an instance of notifier, console by default - beforeDisplayResults: (e, dataset) => {}, - afterDisplayResults: (e, dataset) => {}, - beforeFocusOnItem: (e, dataset, current) => {}, - afterFocusOnItem: (e, dataset, current) => {}, - beforeSelectItem: (e, dataset, current) => {}, - afterSelectItem: (e, dataset, current) => {}, - */ - // --- Special case: the id -> ? Pass the input by id reference or HTMLElement ? - // Préfixer sur les valeurs - - // ---------- Gérer les callbacks opts - - // ---------- Gérer le store - // Gérer le fetch mutliple en cas de store - // Gérer la durée de validité du store en cas de store + // ---------- Manage store + // KISS + // fetch pagination + // manage memory, localStorage, indexedDB or websql + + // ---------- Manage datasource + // kompleter fetch + // provided by consummer // ---------- Errorrs management // Try catches // Display + // Notifications kompleter.listeners.onHide(); - kompleter.listeners.onShow(); kompleter.listeners.onType(); kompleter.listeners.onRequestDone(); kompleter.listeners.onRenderDone(); From f046f816464d5cf66361204c58d2e2827f8df097 Mon Sep 17 00:00:00 2001 From: Steve Date: Wed, 28 Feb 2024 16:19:34 +0100 Subject: [PATCH 06/48] chore: draft: mostly done vanilla with options, cache and querying --- .gitignore | 4 +- package.json | 2 +- src/index.html | 45 ++- src/js/vanilla/kompleter.js | 559 +++++++++++++++++++++++------------- webpack.config.js | 4 +- 5 files changed, 394 insertions(+), 220 deletions(-) diff --git a/.gitignore b/.gitignore index 015d8d4..a970bb7 100644 --- a/.gitignore +++ b/.gitignore @@ -15,4 +15,6 @@ tests/report src/vendors/* # Do not push dist -dist/ \ No newline at end of file +dist/ + +api/ \ No newline at end of file diff --git a/package.json b/package.json index 74e9cd4..0b22dc3 100755 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "js": "webpack", "cypress:open": "cypress open", "cypress:run": "cypress run --browser chrome ./cypress", - "start": "webpack serve" + "start": "webpack serve --hot" }, "repository": { "type": "git", diff --git a/src/index.html b/src/index.html index a634088..c66c90b 100644 --- a/src/index.html +++ b/src/index.html @@ -41,7 +41,6 @@ diff --git a/src/js/vanilla/kompleter.js b/src/js/vanilla/kompleter.js index d9f4632..4cb0f50 100644 --- a/src/js/vanilla/kompleter.js +++ b/src/js/vanilla/kompleter.js @@ -90,14 +90,63 @@ }, /** - * @description Local pseudo enumerations + * @description Cache related methods */ - enums: { - storage: { - memory: 'memory', - localStorage: 'localStorage', - indexedDb: 'indexedDb', - } + cache: { + emit: (queryString) => { + window.caches.open('kompleter.cache') + .then(cache => { + cache.match(queryString) + .then(async (data) => { + console.log('cache.emit', data) + document.dispatchEvent(kompleter.events.requestDone({ fromCache: true, data: await data.json() })); + }); + }) + .catch(e => { + document.dispatchEvent(kompleter.events.error({ error: e })); + }); + }, + isActive: () => { + return typeof kompleter.options.cache !== 'undefined'; + }, + isValid: async (queryString) => { + const uuid = kompleter.handlers.uuid(queryString); + const cache = await window.caches.open('kompleter.cache'); + const response = await cache.match(uuid); + if (!response) { + return false; + } + + const createdAt = await response.text(); + if (parseInt(createdAt + kompleter.options.cache, 10) <= Date.now()) { + return false; + } + return true; + }, + reset: () => {}, + set: ({ queryString, data }) => { + data = JSON.stringify(data); + window.caches.open('kompleter.cache') + .then(cache => { + const headers = new Headers; + headers.set('content-type', 'application/json'); + const uuid = kompleter.handlers.uuid(queryString); + cache.put(uuid, new Response(Date.now(), { headers })); + cache.put(queryString, new Response(data, { headers })); + }) + .catch(e => { + document.dispatchEvent(kompleter.events.error({ error: e })); + }); + }, + }, + + /** + * @description Client callbacks + */ + callbacks: { + onError: (error) => {}, + onKeyup: (value) => {}, + onSelect: (selected) => {}, }, /** @@ -110,7 +159,13 @@ cancelable: false, composed: false, }), - rendrResultDone: (detail = {}) => new CustomEvent('kompleter.render.result.done', { + navigationEnd: (detail = {}) => new CustomEvent('kompleter.navigation.end', { + detail, + bubble: true, + cancelable: false, + composed: false, + }), + renderResultDone: (detail = {}) => new CustomEvent('kompleter.view.result.done', { detail, bubble: true, cancelable: false, @@ -122,6 +177,18 @@ cancelable: false, composed: false, }), + selectDone: (detail = {}) => new CustomEvent('kompleter.select.done', { + detail, + bubble: true, + cancelable: false, + composed: false, + }), + warning: (detail = {}) => new CustomEvent('kompleter.warning', { + detail, + bubble: true, + cancelable: false, + composed: false, + }), }, /** @@ -135,81 +202,62 @@ }); return htmlElement; }, - filter: function(records) { - const value = kompleter.htmlElements.input.value.toLowerCase(); - return records.filter(record => { - if(isNaN(value)) { - return kompleter.options.begin === true ? record[kompleter.options.filterOn].toLowerCase().lastIndexOf(value, 0) === 0 : record[kompleter.options.filterOn].toLowerCase().lastIndexOf(value) !== -1; - } else { - return parseInt(value) === parseInt(record[kompleter.options.filterOn]); - } - }); - }, - focus: function(action) { - if (!['add', 'remove'].includes(action)) { - throw new Error('action should be one of ["add", "remove]: ' + action + ' given.'); - } - switch (action) { - case 'remove': - kompleter.htmlElements.focused = null; - Array.from(kompleter.htmlElements.suggestions).forEach(suggestion => { - ((suggestion) => { - suggestion.className = 'item--result'; - })(suggestion) - }); - break; - case 'add': - kompleter.htmlElements.focused = kompleter.htmlElements.suggestions[kompleter.props.pointer]; - kompleter.htmlElements.suggestions[kompleter.props.pointer].className += ' focus'; - break; - } - }, navigate: function (keyCode) { - // TODO fix navigation after last element is broken - this.point(keyCode); - this.focus('remove'); - this.focus('add'); + if (this.point(keyCode)) { + kompleter.view.focus('remove').focus('add'); + }; }, point: function(keyCode) { - // The pointer is in the range: after or as the initial position and before the last element in suggestions - if(kompleter.props.pointer >= -1 && kompleter.props.pointer <= kompleter.htmlElements.suggestions.length - 1) { - // Pointer in initial position, and we switch down -> up index of the pointer - if(kompleter.props.pointer === -1 && keyCode === 40) { - kompleter.props.pointer++; - } else if (kompleter.props.pointer === kompleter.htmlElements.suggestions.length - 1 && keyCode === 38) { // Pointer in last position, and we switch up -> down index of the pointer - kompleter.props.pointer--; - } else if (keyCode === 38) { // Pointer in range, down index of the pointer - kompleter.props.pointer--; - } else if (keyCode === 40) { // Pointer in range, up index of the pointer - kompleter.props.pointer++; - } + if (keyCode != 38 && keyCode != 40) { + return false; } + + if(kompleter.props.pointer < -1 || kompleter.props.pointer > kompleter.htmlElements.suggestions.length - 1) { + return false; + } + + if (keyCode === 38 && kompleter.props.pointer >= -1) { + kompleter.props.pointer--; + } else if (keyCode === 40 && kompleter.props.pointer < kompleter.htmlElements.suggestions.length - 1) { + kompleter.props.pointer++; + } + + return true; + }, + qs: function(term = '') { + console.log('qs func') + const qs = new URLSearchParams(); + Object.keys(kompleter.props.dataSource.queryString.keys) + .forEach(param => qs.append(kompleter.props.dataSource.queryString.keys[param], param === 'term' ? term : kompleter.props.dataSource.queryString.values[param])); + return qs.toString(); }, request: function() { const headers = new Headers(); headers.append('content-type', 'application/x-www-form-urlencoded'); headers.append('method', 'GET'); - - fetch(`${kompleter.options.dataSource}?'r=${kompleter.htmlElements.input.value}`, headers) + + console.log('request', request); + fetch(`${kompleter.props.dataSource.url}?${this.qs(kompleter.htmlElements.input.value)}`, headers) .then(result => result.json()) .then(data => { - document.dispatchEvent(kompleter.events.requestDone({ fromStore: false, data })); + document.dispatchEvent(kompleter.events.requestDone({ fromCache: false, queryString: this.qs(kompleter.htmlElements.input.value), data })); }) .catch(e => { - document.dispatchEvent(kompleter.events.error({ message: e.message, stack: e?.stack, instance: e })); + document.dispatchEvent(kompleter.events.error(e)); }); }, select: function () { - let id = null; - id = kompleter.htmlElements.focused.id || 0; - kompleter.htmlElements.input.value = kompleter.props.response[id][0]; - kompleter.props.pointer = -1; - kompleter.htmlElements.result.style.display = 'none'; + const id = kompleter.htmlElements.focused.id || 0; + kompleter.htmlElements.input.value = kompleter.props.dataSource.data[id][0]; + kompleter.callbacks.onSelect(kompleter.props.dataSource.data[id]); + document.dispatchEvent(kompleter.events.selectDone()); + }, + uuid: function(string) { + return string.split('') + .map(v => v.charCodeAt(0)) + .reduce((a, v) => a + ((a<<7) + (a<<3)) ^ v) + .toString(16); }, - validate: function(options) { - // Valid only what's required OR provided - // The rest should fallback on default values when it's feasible - } }, /** @@ -220,16 +268,33 @@ input: null, result: null, suggestions: [], + wrapper: null, }, /** * @description Events listeners */ listeners: { + onError: () => { + document.addEventListener('kompleter.error', (e) => { + console.error(`[kompleter] An error has occured -> ${e?.detail?.stack}`); + kompleter.callbacks.onError(e?.detail); + }); + }, onHide: () => { const body = document.getElementsByTagName('body')[0]; body.addEventListener('click', (e) => { kompleter.animations.fadeOut(kompleter.htmlElements.result); + document.dispatchEvent(kompleter.events.navigationEnd()); + }); + document.addEventListener('kompleter.select.done', (e) => { + kompleter.animations.fadeOut(kompleter.htmlElements.result); + document.dispatchEvent(kompleter.events.navigationEnd()); + }); + }, + onNavigationEnd: () => { + document.addEventListener('kompleter.navigation.end', (e) => { + kompleter.props.pointer = -1; }); }, onSelect: (className) => { @@ -250,100 +315,213 @@ }, onRequestDone: () => { document.addEventListener('kompleter.request.done', (e) => { - // TODO: store in cache - // TODO: filter shouldn' be applied systematicaly if the back returns filtered data - // TODO: should we store filtered data or not ? - // TODO probably the following line will be in the store.set for memory cache - kompleter.props.response = kompleter.handlers.filter(e.detail.data); - if (!e.detail.fromStore) { - kompleter.store.set(e.detail.data); + kompleter.props.dataSource.data = e.detail.data; + // TODO: tu set de la data alors que c'est normalement interdit -> du coup ça plante -> TOFIX + if (!e.detail.fromCache) { + kompleter.cache.set(e.detail); } - kompleter.render.results(e.detail.data); - }); - }, - onRenderDone: () => { - document.addEventListener('kompleter.render.result.done', (e) => { - kompleter.animations.fadeIn(kompleter.htmlElements.result); - kompleter.listeners.onSelect('item--result'); + kompleter.view.results(e.detail.data); }); }, onType: () => { - kompleter.htmlElements.input.addEventListener('keyup', (e) => { + kompleter.htmlElements.input.addEventListener('keyup', async (e) => { + if (kompleter.htmlElements.input.value.length < kompleter.options.startQueriyngFromChar) { + return; + } + const keyCode = e.keyCode; - if(keyCode === 38 || keyCode === 40) { // Up / down - kompleter.handlers.navigate(keyCode); - } else if (keyCode === 13) { // Enter - kompleter.handlers.select(); - } else if ( kompleter.htmlElements.input.value !== kompleter.props.previousValue ) { - - if (kompleter.store.isActive() && kompleter.store.isValid()) { - document.dispatchEvent(kompleter.events.requestDone({ fromStore: true, data: kompleter.store.get() })); - } else { - kompleter.handlers.request(); - } + + switch (keyCode) { + case 13: // Enter + kompleter.handlers.select(); + break; + case 38: // Up + case 40: // Down + kompleter.handlers.navigate(keyCode); + break; + default: + if ( kompleter.htmlElements.input.value !== kompleter.props.previousValue ) { + if (kompleter.props.dataSource.url) { + console.log('Here') + const qs = kompleter.handlers.qs(kompleter.htmlElements.input.value); + console.log('qs', qs); + console.log('cache is active', kompleter.cache.isActive()); + console.log('cache is valid', await kompleter.cache.isValid(qs)) + kompleter.cache.isActive() && await kompleter.cache.isValid(qs) ? kompleter.cache.emit(qs) : kompleter.handlers.request(); + } else if (kompleter.props.dataSource.data) { + console.log('there') + kompleter.callbacks.onKeyup(kompleter.htmlElements.input.value); + } else { + document.dispatchEvent(kompleter.events.error(new Error('None of url or data found on dataSource'))); + } + } + document.dispatchEvent(kompleter.events.navigationEnd()); + break } }); }, + onViewResultDone: () => { + document.addEventListener('kompleter.view.result.done', (e) => { + kompleter.animations.fadeIn(kompleter.htmlElements.result); + kompleter.listeners.onSelect('item--result'); + }); + }, + onWarning: () => { + document.addEventListener('kompleter.warning', (e) => { + console.warn(e.detail.message); + }); + } }, /** * @description Public options */ options: { - id: null, - dataSource: null, // Can be ommited if data is provided directly. In this case we don't fetch. Allow credentials or API key on fetch ? - dataSet: null, // It's dataset with the data, or dataSource without. If data source, you can play with a store, if not consumer play on his side - store: { - type: 'localStorage', - timelife: 50000, - }, animation: { type: 'fadeIn', duration: 500 }, - notification: { - // TODO - }, - begin: true, - startOnChar: 2, + cache: 5000, maxResults: 10, - filterOn: null, - fieldsToDisplay: null, - beforeDisplayResults: (e, dataset) => {}, - afterDisplayResults: (e, dataset) => {}, - beforeFocusOnItem: (e, dataset, current) => {}, - afterFocusOnItem: (e, dataset, current) => {}, - beforeSelectItem: (e, dataset, current) => {}, - afterSelectItem: (e, dataset, current) => {}, + startQueriyngFromChar: 2, }, /** * @description Internal properties */ props: { - response: {}, // Clarify / refactor the usage of response vs suggestions + dataSource: { + url: null, + data: null, + queryString: { + keys: { + term: 'q', + limit: 'limit', + offset: 'offset', + perPage: 'perPage', + }, + values: { + limit: 100, + offset: 0, + perPage: 10, + } + }, + fieldsToDisplay: null, + propertyToValue: null, + }, pointer: -1, previousValue: null, }, + validators: { + input: (input) => { + if (input instanceof HTMLInputElement === false && !document.getElementById(input)) { + throw new Error(`input should be an HTMLInputElement instance or a valid id identifier. None of boths given, ${input} received`); + } + return true; + }, + dataSource: (dataSource) => { + if (!dataSource?.url && !dataSource?.data) { + throw new Error(`None of dataSource.url or dataSource.data found on dataSource. Please provide a valid url or dataset.`); + } + + if (dataSource?.url && /^http|https/i.test(dataSource.url) === false) { + throw new Error(`Valid URL is required as dataSource.url when you delegate querying. Please provide a valid url (${dataSource.url} given)`); + } + + if (dataSource?.data && Array.isArray(dataSource.data)) { + throw new Error(`Valid dataset is required as dataSource.data when you take ownsership on the data hydratation. Please provide a valid data set array (${dataSource.data} given)`); + } + + if (dataSource?.queryString && !Object.keys(dataSource.queryString?.keys || []).length) { + dataSource.queryString.keys = kompleter.props.dataSource.queryString.keys; + document.dispatchEvent(kompleter.events.warning({ message: `dataSource.queryString.keys should be an object with a keys mapping, ${dataSource.queryString.keys.toString()} given. Fallback on default values` })); + } + + if (dataSource?.queryString && !Object.keys(dataSource.queryString?.values || []).length) { + dataSource.queryString.values = kompleter.props.dataSource.queryString.values; + document.dispatchEvent(kompleter.events.warning({ message: `options.dataSource.queryString.values should be an object with a values mapping, ${dataSource.queryString.values.toString()} given. Fallback on default values` })); + } + }, + options: (options) => { + if (options.animation) { + if (!['fadeIn', 'slideDown'].includes(options.animation.type)) { + options.animation.type = kompleter.options.animation.type; + document.dispatchEvent(kompleter.events.warning({ message: `options.animation.type should be one of ['fadeIn', 'slideDown'], ${options.animation.type.toString()} given. Fallback on default value 'fadeIn'.` })); + } + + if (isNaN(parseInt(options.animation.duration))) { + options.animation.duration = kompleter.options.animation.duration; + document.dispatchEvent(kompleter.events.warning({ message: `options.animation.duration should be integer, ${options.animation.duration.toString()} given. Fallback on default value of 5000ms.` })); + } + } + + if (options.cache && isNaN(parseInt(options.cache))) { + options.cache = kompleter.options.cache; + document.dispatchEvent(kompleter.events.warning({ message: `options.cache should be integer, ${options.cache.toString()} given. Fallback on default value of 5000ms.` })); + } + + if (options.maxResults && isNaN(parseInt(options.maxResults))) { + options.maxResults = kompleter.options.maxResults; + document.dispatchEvent(kompleter.events.warning({ message: `options.maxResults should be integer, ${options.maxResults.toString()} given. Fallback on default value of 10` })); + } + + if (options.startQueriyngFromChar && isNaN(parseInt(options.startQueriyngFromChar))) { + options.startQueriyngFromChar = kompleter.options.startQueriyngFromChar; + document.dispatchEvent(kompleter.events.warning({ message: `options.startQueriyngFromChar should be integer, ${options.startQueriyngFromChar.toString()} given. Fallback on default value of 2` })); + } + + return true; + }, + callbacks: (callbacks) => { + Object.keys(callbacks).forEach(key => { + if (!Object.keys(kompleter.callbacks).includes(key)) { + throw new Error(`Unrecognized callback function ${key}. Please use onKeyup, onSelect and onError as valid callbacks functions.`); + } + if (typeof callbacks[key] !== 'function') { + throw new Error(`callback function ${key} should be a function`); + } + }); + } + }, + /** * @description Rendering methods */ - render: { + view: { error: function(e) { - // TODO Do better on the error display / logging / notifications kompleter.htmlElements.result.innerHTML = '
Error
'; kompleter.animations.fadeIn(kompleter.htmlElements.result); }, + focus: function(action) { + if (!['add', 'remove'].includes(action)) { + throw new Error('action should be one of ["add", "remove]: ' + action + ' given.'); + } + switch (action) { + case 'add': + kompleter.htmlElements.focused = kompleter.htmlElements.suggestions[kompleter.props.pointer]; + kompleter.htmlElements.suggestions[kompleter.props.pointer].className += ' focus'; + break; + case 'remove': + kompleter.htmlElements.focused = null; + Array.from(kompleter.htmlElements.suggestions).forEach(suggestion => { + ((suggestion) => { + suggestion.className = 'item--result'; + })(suggestion) + }); + break; + } + return this; + }, results: function(e) { let html = ''; - if(kompleter.props.response && kompleter.props.response.length) { - const properties = kompleter.options.fieldsToDisplay.length; // TODO should be validated as 3 or 4 max + flexbox design - for(let i = 0; i < kompleter.props.response.length ; i++) { - if(typeof kompleter.props.response[i] !== 'undefined') { - html += `
`; + if(kompleter.props.dataSource.data && kompleter.props.dataSource.data.length) { + const properties = kompleter.props.dataSource.fieldsToDisplay.length; // TODO should be validated as 3 or 4 max + flexbox design + for(let i = 0; i < kompleter.props.dataSource.data.length && i <= kompleter.options.maxResults || true ; i++) { + if(typeof kompleter.props.dataSource.data[i] !== 'undefined') { + html += `
`; for(let j = 0; j < properties; j++) { - html += '' + kompleter.props.response[i][j] + ''; + html += '' + kompleter.props.dataSource.data[i][j] + ''; } html += '
'; } @@ -352,107 +530,76 @@ html = '
Not found
'; } kompleter.htmlElements.result.innerHTML = html; - document.dispatchEvent(kompleter.events.rendrResultDone()); + document.dispatchEvent(kompleter.events.renderResultDone()); } }, - store: { - get: () => { - switch (kompleter.options.store.type) { - case kompleter.enums.storage.memory: - break; - case kompleter.enums.storage.localStorage: - return JSON.parse(window.localStorage.getItem('kompleter.cache.data')); - break; - case kompleter.enums.storage.indexedDB: - break; - }; - if (kompleter.options.store.storage === kompleter.enums.storage.localStorage) { - const createdAt = JSON.parse(window.localStorage.getItem('kompleter.cache.createdAt')); - if (createdAt + kompleter.options.store.duration < Date.now()) { - - } - } - }, - isActive: () => { - return kompleter.options.store; - }, - isValid: () => { - switch (kompleter.options.store.type) { - case kompleter.enums.storage.memory: - break; - case kompleter.enums.storage.localStorage: - const createdAt = JSON.parse(window.localStorage.getItem('kompleter.cache.createdAt')); - if (parseInt(createdAt + kompleter.options.store.duration, 10) >= Date.now()) { - return true; - } - return false; - break; - case kompleter.enums.storage.indexedDB: - break; - }; - }, - set: (data) => { - switch (kompleter.options.store.type) { - case kompleter.enums.storage.memory: - break; - case kompleter.enums.storage.localStorage: - window.localStorage.setItem('kompleter.cache.createdAt', JSON.stringify(Date.now())); - window.localStorage.setItem('kompleter.cache.data', JSON.stringify(data)); - break; - case kompleter.enums.storage.indexedDB: - break; - }; - }, - }, - /** * @description Kompleter entry point * - * @param {*} options + * @param {String|HTMLInputElement} input + * @param {Object} dataSource + * @param {Object} options + * @param {Object} callbacks { onKeyup, onSelect, onError } */ - init: function(options) { + init: function(input, dataSource, options, callbacks) { - kompleter.options = Object.assign(kompleter.options, options); - - kompleter.htmlElements.result = kompleter.handlers.build('div', [ { id: 'result' }, { className: 'form--lightsearch__result' } ]); - - const searcher = document.getElementById('wrapper'); - searcher.appendChild(kompleter.htmlElements.result); + // ---------- Manage datasource + // provided by consummer - kompleter.htmlElements.input = document.getElementById(kompleter.options.id); + // TODO: next feature, with input hidden - Manage result as [string] or [object] with a mapPropertyValue - // /!\ Adapt jQuery version to be ISO + try { - // ---------- Manage animations - // ---------- Manage options - // ---------- Manage callback options - // No external lib + // 1. Validate + + kompleter.validators.input(input); + kompleter.validators.dataSource(dataSource); + options && kompleter.validators.options(options); + dataSource.data && kompleter.validators.callbacks(callbacks); - // --- Other ones - - // --- Special case: the id -> ? Pass the input by id reference or HTMLElement ? + // 2. Assign - // ---------- Manage store - // KISS - // fetch pagination - // manage memory, localStorage, indexedDB or websql - - // ---------- Manage datasource - // kompleter fetch - // provided by consummer + kompleter.props.dataSource = dataSource; + + if(options) { + kompleter.options = Object.assign(kompleter.options, options); + } - // ---------- Errorrs management - // Try catches - // Display - // Notifications + if (dataSource.data) { + kompleter.callbacks = Object.assign(kompleter.callbacks, callbacks); + } + + // 3. Build HTML + + kompleter.htmlElements.wrapper = input.parentElement; + + kompleter.htmlElements.input = input instanceof HTMLInputElement ? input : document.getElementById(input); + + kompleter.htmlElements.result = kompleter.handlers.build('div', [ { id: 'result' }, { className: 'form--lightsearch__result' } ]); + + kompleter.htmlElements.wrapper.appendChild(kompleter.htmlElements.result); - kompleter.listeners.onHide(); - kompleter.listeners.onType(); - kompleter.listeners.onRequestDone(); - kompleter.listeners.onRenderDone(); + // 4. Listeners + + kompleter.listeners.onError(); + kompleter.listeners.onHide(); + kompleter.listeners.onNavigationEnd(); + kompleter.listeners.onType(); + kompleter.listeners.onRequestDone(); + kompleter.listeners.onViewResultDone(); + kompleter.listeners.onWarning(); + + } catch(e) { + console.error(e); + } }, }; - window.kompleter = { init: kompleter.init }; + window.kompleter = kompleter.init; + + window.HTMLInputElement.prototype.kompleter = function(options) { + window.kompleter(this, options); + } + })(window); \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js index 7152dae..5a61065 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -6,7 +6,6 @@ const WebpackConcatPlugin = require('webpack-concat-files-plugin'); module.exports = { entry: './src/js/index.js', mode: 'development', - plugins: [ new WebpackConcatPlugin({ bundles: [ @@ -56,6 +55,7 @@ module.exports = { compress: true, port: 9000, historyApiFallback: true, - liveReload: true + liveReload: true, + watchFiles: path.join(__dirname, './dist') }, }; From c909488424b0978c67081f144f124d65e5dfd158 Mon Sep 17 00:00:00 2001 From: Steve Date: Wed, 28 Feb 2024 17:16:37 +0100 Subject: [PATCH 07/48] chore: working draft version with data from dataset and datasource. Enjoy the 05:00 PM --- src/index.html | 129 ++++++++++++++++++++++++++++++++++-- src/js/vanilla/kompleter.js | 42 +++++------- 2 files changed, 140 insertions(+), 31 deletions(-) diff --git a/src/index.html b/src/index.html index c66c90b..37ee08c 100644 --- a/src/index.html +++ b/src/index.html @@ -67,11 +67,6 @@ perPage: 10, } }, - fieldsToDisplay: [ - 'Name', - 'CountryCode', - 'Population' - ], propertyToValue: null, }; @@ -80,12 +75,132 @@ type: 'fadeIn', duration: 500 }, - cache: 5000 + cache: 5000, + fieldsToDisplay: [ + 'Name', + 'CountryCode', + 'Population' + ], }; + const d = { + data: [ + { + "0": "Breda", + "1": "NLD", + "2": "160398", + "Name": "Breda", + "CountryCode": "NLD", + "Population": "160398" + }, + { + "0": "Tres de Febrero", + "1": "ARG", + "2": "352311", + "Name": "Tres de Febrero", + "CountryCode": "ARG", + "Population": "352311" + }, + { + "0": "L´Hospitalet de Llobregat", + "1": "ESP", + "2": "247986", + "Name": "L´Hospitalet de Llobregat", + "CountryCode": "ESP", + "Population": "247986" + }, + { + "0": "Libreville", + "1": "GAB", + "2": "419000", + "Name": "Libreville", + "CountryCode": "GAB", + "Population": "419000" + }, + { + "0": "Brescia", + "1": "ITA", + "2": "191317", + "Name": "Brescia", + "CountryCode": "ITA", + "Population": "191317" + }, + { + "0": "Cape Breton", + "1": "CAN", + "2": "114733", + "Name": "Cape Breton", + "CountryCode": "CAN", + "Population": "114733" + }, + { + "0": "Brest", + "1": "FRA", + "2": "149634", + "Name": "Brest", + "CountryCode": "FRA", + "Population": "149634" + }, + { + "0": "Bremen", + "1": "DEU", + "2": "540330", + "Name": "Bremen", + "CountryCode": "DEU", + "Population": "540330" + }, + { + "0": "Freiburg im Breisgau", + "1": "DEU", + "2": "202455", + "Name": "Freiburg im Breisgau", + "CountryCode": "DEU", + "Population": "202455" + }, + { + "0": "Bremerhaven", + "1": "DEU", + "2": "122735", + "Name": "Bremerhaven", + "CountryCode": "DEU", + "Population": "122735" + }, + { + "0": "Debrecen", + "1": "HUN", + "2": "203648", + "Name": "Debrecen", + "CountryCode": "HUN", + "Population": "203648" + }, + { + "0": "Brest", + "1": "BLR", + "2": "286000", + "Name": "Brest", + "CountryCode": "BLR", + "Population": "286000" + } + ] + } + + const cbs = { + onKeyup: (value, cb) => { + console.log('cb.onKeyup ', value); + console.log('I\'m doing scrappy stuffs with the data!'); + console.log('You want the data? There is!'); + cb(dataSet); + }, + onSelect: (value) => { + console.log('cb.onSelect', value); + }, + onError: (value) => { + console.log('cb.onError ', value); + } + }; // Way 1 - input.kompleter(dataSource, options, { onKeyup: (value) => { console.log('cb.onKeyup ', value); }, onSelect: (value) => { console.log('cb.onSelect', value); }, onError: (value) => { console.log('cb.onError ', value); } }) + input.kompleter(d, options, cbs) // Way 2 // kompleter(input, options); diff --git a/src/js/vanilla/kompleter.js b/src/js/vanilla/kompleter.js index 4cb0f50..1210840 100644 --- a/src/js/vanilla/kompleter.js +++ b/src/js/vanilla/kompleter.js @@ -98,7 +98,6 @@ .then(cache => { cache.match(queryString) .then(async (data) => { - console.log('cache.emit', data) document.dispatchEvent(kompleter.events.requestDone({ fromCache: true, data: await data.json() })); }); }) @@ -145,7 +144,7 @@ */ callbacks: { onError: (error) => {}, - onKeyup: (value) => {}, + onKeyup: (value, cb) => {}, onSelect: (selected) => {}, }, @@ -225,7 +224,6 @@ return true; }, qs: function(term = '') { - console.log('qs func') const qs = new URLSearchParams(); Object.keys(kompleter.props.dataSource.queryString.keys) .forEach(param => qs.append(kompleter.props.dataSource.queryString.keys[param], param === 'term' ? term : kompleter.props.dataSource.queryString.values[param])); @@ -236,7 +234,6 @@ headers.append('content-type', 'application/x-www-form-urlencoded'); headers.append('method', 'GET'); - console.log('request', request); fetch(`${kompleter.props.dataSource.url}?${this.qs(kompleter.htmlElements.input.value)}`, headers) .then(result => result.json()) .then(data => { @@ -316,7 +313,6 @@ onRequestDone: () => { document.addEventListener('kompleter.request.done', (e) => { kompleter.props.dataSource.data = e.detail.data; - // TODO: tu set de la data alors que c'est normalement interdit -> du coup ça plante -> TOFIX if (!e.detail.fromCache) { kompleter.cache.set(e.detail); } @@ -342,15 +338,12 @@ default: if ( kompleter.htmlElements.input.value !== kompleter.props.previousValue ) { if (kompleter.props.dataSource.url) { - console.log('Here') const qs = kompleter.handlers.qs(kompleter.htmlElements.input.value); - console.log('qs', qs); - console.log('cache is active', kompleter.cache.isActive()); - console.log('cache is valid', await kompleter.cache.isValid(qs)) kompleter.cache.isActive() && await kompleter.cache.isValid(qs) ? kompleter.cache.emit(qs) : kompleter.handlers.request(); } else if (kompleter.props.dataSource.data) { - console.log('there') - kompleter.callbacks.onKeyup(kompleter.htmlElements.input.value); + kompleter.callbacks.onKeyup(kompleter.htmlElements.input.value, (data) => { + document.dispatchEvent(kompleter.events.requestDone({ fromCache: false, queryString: 'test', data })); // TODO: change fromCache by from: cache|local|request + }); } else { document.dispatchEvent(kompleter.events.error(new Error('None of url or data found on dataSource'))); } @@ -382,6 +375,7 @@ duration: 500 }, cache: 5000, + fieldsToDisplay: null, maxResults: 10, startQueriyngFromChar: 2, }, @@ -406,7 +400,6 @@ perPage: 10, } }, - fieldsToDisplay: null, propertyToValue: null, }, pointer: -1, @@ -429,7 +422,7 @@ throw new Error(`Valid URL is required as dataSource.url when you delegate querying. Please provide a valid url (${dataSource.url} given)`); } - if (dataSource?.data && Array.isArray(dataSource.data)) { + if (dataSource?.data && !Array.isArray(dataSource.data)) { throw new Error(`Valid dataset is required as dataSource.data when you take ownsership on the data hydratation. Please provide a valid data set array (${dataSource.data} given)`); } @@ -461,6 +454,11 @@ document.dispatchEvent(kompleter.events.warning({ message: `options.cache should be integer, ${options.cache.toString()} given. Fallback on default value of 5000ms.` })); } + if (options.fieldsToDisplay && (!Array.isArray(options.fieldsToDisplay) || !options.fieldsToDisplay.length)) { + options.fieldsToDisplay = kompleter.options.fieldsToDisplay; + document.dispatchEvent(kompleter.events.warning({ message: `options.fieldsToDisplay should be array, ${options.fieldsToDisplay.toString()} given. Fallback on default value of 10` })); + } + if (options.maxResults && isNaN(parseInt(options.maxResults))) { options.maxResults = kompleter.options.maxResults; document.dispatchEvent(kompleter.events.warning({ message: `options.maxResults should be integer, ${options.maxResults.toString()} given. Fallback on default value of 10` })); @@ -516,8 +514,8 @@ results: function(e) { let html = ''; if(kompleter.props.dataSource.data && kompleter.props.dataSource.data.length) { - const properties = kompleter.props.dataSource.fieldsToDisplay.length; // TODO should be validated as 3 or 4 max + flexbox design - for(let i = 0; i < kompleter.props.dataSource.data.length && i <= kompleter.options.maxResults || true ; i++) { + const properties = kompleter.options.fieldsToDisplay.length; // TODO should be validated as 3 or 4 max + flexbox design + this works only on current dataSet ? + for(let i = 0; i < kompleter.props.dataSource.data.length && i <= kompleter.options.maxResults; i++) { if(typeof kompleter.props.dataSource.data[i] !== 'undefined') { html += `
`; for(let j = 0; j < properties; j++) { @@ -544,15 +542,10 @@ */ init: function(input, dataSource, options, callbacks) { - // ---------- Manage datasource - // provided by consummer - - // TODO: next feature, with input hidden - Manage result as [string] or [object] with a mapPropertyValue - try { // 1. Validate - + kompleter.validators.input(input); kompleter.validators.dataSource(dataSource); options && kompleter.validators.options(options); @@ -560,7 +553,7 @@ // 2. Assign - kompleter.props.dataSource = dataSource; + kompleter.props.dataSource = Object.assign(kompleter.props.dataSource, dataSource); if(options) { kompleter.options = Object.assign(kompleter.options, options); @@ -590,6 +583,7 @@ kompleter.listeners.onViewResultDone(); kompleter.listeners.onWarning(); + console.log('Kompleter', kompleter); } catch(e) { console.error(e); } @@ -598,8 +592,8 @@ window.kompleter = kompleter.init; - window.HTMLInputElement.prototype.kompleter = function(options) { - window.kompleter(this, options); + window.HTMLInputElement.prototype.kompleter = function(dataSource, options, callbacks) { + window.kompleter(this, dataSource, options, callbacks); } })(window); \ No newline at end of file From 3877a41abee71cb6f0a9fa4180dd6a905a568a7a Mon Sep 17 00:00:00 2001 From: Steve Date: Thu, 29 Feb 2024 18:13:19 +0100 Subject: [PATCH 08/48] chore: beta candidate --- src/files/kompleter.json | 1 - src/index.html | 25 +- src/js/{ => jquery}/jquery.kompleter.js | 0 src/js/vanilla/kompleter.js | 923 +++++++++++++++++++----- src/sass/kompleter.scss | 171 ++--- 5 files changed, 834 insertions(+), 286 deletions(-) delete mode 100644 src/files/kompleter.json rename src/js/{ => jquery}/jquery.kompleter.js (100%) diff --git a/src/files/kompleter.json b/src/files/kompleter.json deleted file mode 100644 index d06d2d5..0000000 --- a/src/files/kompleter.json +++ /dev/null @@ -1 +0,0 @@ -[{"Name":"Kabul","0":"Kabul","CountryCode":"AFG","1":"AFG","Population":"1780000","2":"1780000"},{"Name":"Qandahar","0":"Qandahar","CountryCode":"AFG","1":"AFG","Population":"237500","2":"237500"},{"Name":"Herat","0":"Herat","CountryCode":"AFG","1":"AFG","Population":"186800","2":"186800"},{"Name":"Mazar-e-Sharif","0":"Mazar-e-Sharif","CountryCode":"AFG","1":"AFG","Population":"127800","2":"127800"},{"Name":"Amsterdam","0":"Amsterdam","CountryCode":"NLD","1":"NLD","Population":"731200","2":"731200"},{"Name":"Rotterdam","0":"Rotterdam","CountryCode":"NLD","1":"NLD","Population":"593321","2":"593321"},{"Name":"Haag","0":"Haag","CountryCode":"NLD","1":"NLD","Population":"440900","2":"440900"},{"Name":"Utrecht","0":"Utrecht","CountryCode":"NLD","1":"NLD","Population":"234323","2":"234323"},{"Name":"Eindhoven","0":"Eindhoven","CountryCode":"NLD","1":"NLD","Population":"201843","2":"201843"},{"Name":"Tilburg","0":"Tilburg","CountryCode":"NLD","1":"NLD","Population":"193238","2":"193238"},{"Name":"Groningen","0":"Groningen","CountryCode":"NLD","1":"NLD","Population":"172701","2":"172701"},{"Name":"Breda","0":"Breda","CountryCode":"NLD","1":"NLD","Population":"160398","2":"160398"},{"Name":"Apeldoorn","0":"Apeldoorn","CountryCode":"NLD","1":"NLD","Population":"153491","2":"153491"},{"Name":"Nijmegen","0":"Nijmegen","CountryCode":"NLD","1":"NLD","Population":"152463","2":"152463"},{"Name":"Enschede","0":"Enschede","CountryCode":"NLD","1":"NLD","Population":"149544","2":"149544"},{"Name":"Haarlem","0":"Haarlem","CountryCode":"NLD","1":"NLD","Population":"148772","2":"148772"},{"Name":"Almere","0":"Almere","CountryCode":"NLD","1":"NLD","Population":"142465","2":"142465"},{"Name":"Arnhem","0":"Arnhem","CountryCode":"NLD","1":"NLD","Population":"138020","2":"138020"},{"Name":"Zaanstad","0":"Zaanstad","CountryCode":"NLD","1":"NLD","Population":"135621","2":"135621"},{"Name":"\u00b4s-Hertogenbosch","0":"\u00b4s-Hertogenbosch","CountryCode":"NLD","1":"NLD","Population":"129170","2":"129170"},{"Name":"Amersfoort","0":"Amersfoort","CountryCode":"NLD","1":"NLD","Population":"126270","2":"126270"},{"Name":"Maastricht","0":"Maastricht","CountryCode":"NLD","1":"NLD","Population":"122087","2":"122087"},{"Name":"Dordrecht","0":"Dordrecht","CountryCode":"NLD","1":"NLD","Population":"119811","2":"119811"},{"Name":"Leiden","0":"Leiden","CountryCode":"NLD","1":"NLD","Population":"117196","2":"117196"},{"Name":"Haarlemmermeer","0":"Haarlemmermeer","CountryCode":"NLD","1":"NLD","Population":"110722","2":"110722"},{"Name":"Zoetermeer","0":"Zoetermeer","CountryCode":"NLD","1":"NLD","Population":"110214","2":"110214"},{"Name":"Emmen","0":"Emmen","CountryCode":"NLD","1":"NLD","Population":"105853","2":"105853"},{"Name":"Zwolle","0":"Zwolle","CountryCode":"NLD","1":"NLD","Population":"105819","2":"105819"},{"Name":"Ede","0":"Ede","CountryCode":"NLD","1":"NLD","Population":"101574","2":"101574"},{"Name":"Delft","0":"Delft","CountryCode":"NLD","1":"NLD","Population":"95268","2":"95268"},{"Name":"Heerlen","0":"Heerlen","CountryCode":"NLD","1":"NLD","Population":"95052","2":"95052"},{"Name":"Alkmaar","0":"Alkmaar","CountryCode":"NLD","1":"NLD","Population":"92713","2":"92713"},{"Name":"Willemstad","0":"Willemstad","CountryCode":"ANT","1":"ANT","Population":"2345","2":"2345"},{"Name":"Tirana","0":"Tirana","CountryCode":"ALB","1":"ALB","Population":"270000","2":"270000"},{"Name":"Alger","0":"Alger","CountryCode":"DZA","1":"DZA","Population":"2168000","2":"2168000"},{"Name":"Oran","0":"Oran","CountryCode":"DZA","1":"DZA","Population":"609823","2":"609823"},{"Name":"Constantine","0":"Constantine","CountryCode":"DZA","1":"DZA","Population":"443727","2":"443727"},{"Name":"Annaba","0":"Annaba","CountryCode":"DZA","1":"DZA","Population":"222518","2":"222518"},{"Name":"Batna","0":"Batna","CountryCode":"DZA","1":"DZA","Population":"183377","2":"183377"},{"Name":"S\u00e9tif","0":"S\u00e9tif","CountryCode":"DZA","1":"DZA","Population":"179055","2":"179055"},{"Name":"Sidi Bel Abb\u00e8s","0":"Sidi Bel Abb\u00e8s","CountryCode":"DZA","1":"DZA","Population":"153106","2":"153106"},{"Name":"Skikda","0":"Skikda","CountryCode":"DZA","1":"DZA","Population":"128747","2":"128747"},{"Name":"Biskra","0":"Biskra","CountryCode":"DZA","1":"DZA","Population":"128281","2":"128281"},{"Name":"Blida (el-Boulaida)","0":"Blida (el-Boulaida)","CountryCode":"DZA","1":"DZA","Population":"127284","2":"127284"},{"Name":"B\u00e9ja\u00efa","0":"B\u00e9ja\u00efa","CountryCode":"DZA","1":"DZA","Population":"117162","2":"117162"},{"Name":"Mostaganem","0":"Mostaganem","CountryCode":"DZA","1":"DZA","Population":"115212","2":"115212"},{"Name":"T\u00e9bessa","0":"T\u00e9bessa","CountryCode":"DZA","1":"DZA","Population":"112007","2":"112007"},{"Name":"Tlemcen (Tilimsen)","0":"Tlemcen (Tilimsen)","CountryCode":"DZA","1":"DZA","Population":"110242","2":"110242"},{"Name":"B\u00e9char","0":"B\u00e9char","CountryCode":"DZA","1":"DZA","Population":"107311","2":"107311"},{"Name":"Tiaret","0":"Tiaret","CountryCode":"DZA","1":"DZA","Population":"100118","2":"100118"},{"Name":"Ech-Chleff (el-Asnam)","0":"Ech-Chleff (el-Asnam)","CountryCode":"DZA","1":"DZA","Population":"96794","2":"96794"},{"Name":"Gharda\u00efa","0":"Gharda\u00efa","CountryCode":"DZA","1":"DZA","Population":"89415","2":"89415"},{"Name":"Tafuna","0":"Tafuna","CountryCode":"ASM","1":"ASM","Population":"5200","2":"5200"},{"Name":"Fagatogo","0":"Fagatogo","CountryCode":"ASM","1":"ASM","Population":"2323","2":"2323"},{"Name":"Andorra la Vella","0":"Andorra la Vella","CountryCode":"AND","1":"AND","Population":"21189","2":"21189"},{"Name":"Luanda","0":"Luanda","CountryCode":"AGO","1":"AGO","Population":"2022000","2":"2022000"},{"Name":"Huambo","0":"Huambo","CountryCode":"AGO","1":"AGO","Population":"163100","2":"163100"},{"Name":"Lobito","0":"Lobito","CountryCode":"AGO","1":"AGO","Population":"130000","2":"130000"},{"Name":"Benguela","0":"Benguela","CountryCode":"AGO","1":"AGO","Population":"128300","2":"128300"},{"Name":"Namibe","0":"Namibe","CountryCode":"AGO","1":"AGO","Population":"118200","2":"118200"},{"Name":"South Hill","0":"South Hill","CountryCode":"AIA","1":"AIA","Population":"961","2":"961"},{"Name":"The Valley","0":"The Valley","CountryCode":"AIA","1":"AIA","Population":"595","2":"595"},{"Name":"Saint John\u00b4s","0":"Saint John\u00b4s","CountryCode":"ATG","1":"ATG","Population":"24000","2":"24000"},{"Name":"Dubai","0":"Dubai","CountryCode":"ARE","1":"ARE","Population":"669181","2":"669181"},{"Name":"Abu Dhabi","0":"Abu Dhabi","CountryCode":"ARE","1":"ARE","Population":"398695","2":"398695"},{"Name":"Sharja","0":"Sharja","CountryCode":"ARE","1":"ARE","Population":"320095","2":"320095"},{"Name":"al-Ayn","0":"al-Ayn","CountryCode":"ARE","1":"ARE","Population":"225970","2":"225970"},{"Name":"Ajman","0":"Ajman","CountryCode":"ARE","1":"ARE","Population":"114395","2":"114395"},{"Name":"Buenos Aires","0":"Buenos Aires","CountryCode":"ARG","1":"ARG","Population":"2982146","2":"2982146"},{"Name":"La Matanza","0":"La Matanza","CountryCode":"ARG","1":"ARG","Population":"1266461","2":"1266461"},{"Name":"C\u00f3rdoba","0":"C\u00f3rdoba","CountryCode":"ARG","1":"ARG","Population":"1157507","2":"1157507"},{"Name":"Rosario","0":"Rosario","CountryCode":"ARG","1":"ARG","Population":"907718","2":"907718"},{"Name":"Lomas de Zamora","0":"Lomas de Zamora","CountryCode":"ARG","1":"ARG","Population":"622013","2":"622013"},{"Name":"Quilmes","0":"Quilmes","CountryCode":"ARG","1":"ARG","Population":"559249","2":"559249"},{"Name":"Almirante Brown","0":"Almirante Brown","CountryCode":"ARG","1":"ARG","Population":"538918","2":"538918"},{"Name":"La Plata","0":"La Plata","CountryCode":"ARG","1":"ARG","Population":"521936","2":"521936"},{"Name":"Mar del Plata","0":"Mar del Plata","CountryCode":"ARG","1":"ARG","Population":"512880","2":"512880"},{"Name":"San Miguel de Tucum\u00e1n","0":"San Miguel de Tucum\u00e1n","CountryCode":"ARG","1":"ARG","Population":"470809","2":"470809"},{"Name":"Lan\u00fas","0":"Lan\u00fas","CountryCode":"ARG","1":"ARG","Population":"469735","2":"469735"},{"Name":"Merlo","0":"Merlo","CountryCode":"ARG","1":"ARG","Population":"463846","2":"463846"},{"Name":"General San Mart\u00edn","0":"General San Mart\u00edn","CountryCode":"ARG","1":"ARG","Population":"422542","2":"422542"},{"Name":"Salta","0":"Salta","CountryCode":"ARG","1":"ARG","Population":"367550","2":"367550"},{"Name":"Moreno","0":"Moreno","CountryCode":"ARG","1":"ARG","Population":"356993","2":"356993"},{"Name":"Santa F\u00e9","0":"Santa F\u00e9","CountryCode":"ARG","1":"ARG","Population":"353063","2":"353063"},{"Name":"Avellaneda","0":"Avellaneda","CountryCode":"ARG","1":"ARG","Population":"353046","2":"353046"},{"Name":"Tres de Febrero","0":"Tres de Febrero","CountryCode":"ARG","1":"ARG","Population":"352311","2":"352311"},{"Name":"Mor\u00f3n","0":"Mor\u00f3n","CountryCode":"ARG","1":"ARG","Population":"349246","2":"349246"},{"Name":"Florencio Varela","0":"Florencio Varela","CountryCode":"ARG","1":"ARG","Population":"315432","2":"315432"},{"Name":"San Isidro","0":"San Isidro","CountryCode":"ARG","1":"ARG","Population":"306341","2":"306341"},{"Name":"Tigre","0":"Tigre","CountryCode":"ARG","1":"ARG","Population":"296226","2":"296226"},{"Name":"Malvinas Argentinas","0":"Malvinas Argentinas","CountryCode":"ARG","1":"ARG","Population":"290335","2":"290335"},{"Name":"Vicente L\u00f3pez","0":"Vicente L\u00f3pez","CountryCode":"ARG","1":"ARG","Population":"288341","2":"288341"},{"Name":"Berazategui","0":"Berazategui","CountryCode":"ARG","1":"ARG","Population":"276916","2":"276916"},{"Name":"Corrientes","0":"Corrientes","CountryCode":"ARG","1":"ARG","Population":"258103","2":"258103"},{"Name":"San Miguel","0":"San Miguel","CountryCode":"ARG","1":"ARG","Population":"248700","2":"248700"},{"Name":"Bah\u00eda Blanca","0":"Bah\u00eda Blanca","CountryCode":"ARG","1":"ARG","Population":"239810","2":"239810"},{"Name":"Esteban Echeverr\u00eda","0":"Esteban Echeverr\u00eda","CountryCode":"ARG","1":"ARG","Population":"235760","2":"235760"},{"Name":"Resistencia","0":"Resistencia","CountryCode":"ARG","1":"ARG","Population":"229212","2":"229212"},{"Name":"Jos\u00e9 C. Paz","0":"Jos\u00e9 C. Paz","CountryCode":"ARG","1":"ARG","Population":"221754","2":"221754"},{"Name":"Paran\u00e1","0":"Paran\u00e1","CountryCode":"ARG","1":"ARG","Population":"207041","2":"207041"},{"Name":"Godoy Cruz","0":"Godoy Cruz","CountryCode":"ARG","1":"ARG","Population":"206998","2":"206998"},{"Name":"Posadas","0":"Posadas","CountryCode":"ARG","1":"ARG","Population":"201273","2":"201273"},{"Name":"Guaymall\u00e9n","0":"Guaymall\u00e9n","CountryCode":"ARG","1":"ARG","Population":"200595","2":"200595"},{"Name":"Santiago del Estero","0":"Santiago del Estero","CountryCode":"ARG","1":"ARG","Population":"189947","2":"189947"},{"Name":"San Salvador de Jujuy","0":"San Salvador de Jujuy","CountryCode":"ARG","1":"ARG","Population":"178748","2":"178748"},{"Name":"Hurlingham","0":"Hurlingham","CountryCode":"ARG","1":"ARG","Population":"170028","2":"170028"},{"Name":"Neuqu\u00e9n","0":"Neuqu\u00e9n","CountryCode":"ARG","1":"ARG","Population":"167296","2":"167296"},{"Name":"Ituzaing\u00f3","0":"Ituzaing\u00f3","CountryCode":"ARG","1":"ARG","Population":"158197","2":"158197"},{"Name":"San Fernando","0":"San Fernando","CountryCode":"ARG","1":"ARG","Population":"153036","2":"153036"},{"Name":"Formosa","0":"Formosa","CountryCode":"ARG","1":"ARG","Population":"147636","2":"147636"},{"Name":"Las Heras","0":"Las Heras","CountryCode":"ARG","1":"ARG","Population":"145823","2":"145823"},{"Name":"La Rioja","0":"La Rioja","CountryCode":"ARG","1":"ARG","Population":"138117","2":"138117"},{"Name":"San Fernando del Valle de Cata","0":"San Fernando del Valle de Cata","CountryCode":"ARG","1":"ARG","Population":"134935","2":"134935"},{"Name":"R\u00edo Cuarto","0":"R\u00edo Cuarto","CountryCode":"ARG","1":"ARG","Population":"134355","2":"134355"},{"Name":"Comodoro Rivadavia","0":"Comodoro Rivadavia","CountryCode":"ARG","1":"ARG","Population":"124104","2":"124104"},{"Name":"Mendoza","0":"Mendoza","CountryCode":"ARG","1":"ARG","Population":"123027","2":"123027"},{"Name":"San Nicol\u00e1s de los Arroyos","0":"San Nicol\u00e1s de los Arroyos","CountryCode":"ARG","1":"ARG","Population":"119302","2":"119302"},{"Name":"San Juan","0":"San Juan","CountryCode":"ARG","1":"ARG","Population":"119152","2":"119152"},{"Name":"Escobar","0":"Escobar","CountryCode":"ARG","1":"ARG","Population":"116675","2":"116675"},{"Name":"Concordia","0":"Concordia","CountryCode":"ARG","1":"ARG","Population":"116485","2":"116485"},{"Name":"Pilar","0":"Pilar","CountryCode":"ARG","1":"ARG","Population":"113428","2":"113428"},{"Name":"San Luis","0":"San Luis","CountryCode":"ARG","1":"ARG","Population":"110136","2":"110136"},{"Name":"Ezeiza","0":"Ezeiza","CountryCode":"ARG","1":"ARG","Population":"99578","2":"99578"},{"Name":"San Rafael","0":"San Rafael","CountryCode":"ARG","1":"ARG","Population":"94651","2":"94651"},{"Name":"Tandil","0":"Tandil","CountryCode":"ARG","1":"ARG","Population":"91101","2":"91101"},{"Name":"Yerevan","0":"Yerevan","CountryCode":"ARM","1":"ARM","Population":"1248700","2":"1248700"},{"Name":"Gjumri","0":"Gjumri","CountryCode":"ARM","1":"ARM","Population":"211700","2":"211700"},{"Name":"Vanadzor","0":"Vanadzor","CountryCode":"ARM","1":"ARM","Population":"172700","2":"172700"},{"Name":"Oranjestad","0":"Oranjestad","CountryCode":"ABW","1":"ABW","Population":"29034","2":"29034"},{"Name":"Sydney","0":"Sydney","CountryCode":"AUS","1":"AUS","Population":"3276207","2":"3276207"},{"Name":"Melbourne","0":"Melbourne","CountryCode":"AUS","1":"AUS","Population":"2865329","2":"2865329"},{"Name":"Brisbane","0":"Brisbane","CountryCode":"AUS","1":"AUS","Population":"1291117","2":"1291117"},{"Name":"Perth","0":"Perth","CountryCode":"AUS","1":"AUS","Population":"1096829","2":"1096829"},{"Name":"Adelaide","0":"Adelaide","CountryCode":"AUS","1":"AUS","Population":"978100","2":"978100"},{"Name":"Canberra","0":"Canberra","CountryCode":"AUS","1":"AUS","Population":"322723","2":"322723"},{"Name":"Gold Coast","0":"Gold Coast","CountryCode":"AUS","1":"AUS","Population":"311932","2":"311932"},{"Name":"Newcastle","0":"Newcastle","CountryCode":"AUS","1":"AUS","Population":"270324","2":"270324"},{"Name":"Central Coast","0":"Central Coast","CountryCode":"AUS","1":"AUS","Population":"227657","2":"227657"},{"Name":"Wollongong","0":"Wollongong","CountryCode":"AUS","1":"AUS","Population":"219761","2":"219761"},{"Name":"Hobart","0":"Hobart","CountryCode":"AUS","1":"AUS","Population":"126118","2":"126118"},{"Name":"Geelong","0":"Geelong","CountryCode":"AUS","1":"AUS","Population":"125382","2":"125382"},{"Name":"Townsville","0":"Townsville","CountryCode":"AUS","1":"AUS","Population":"109914","2":"109914"},{"Name":"Cairns","0":"Cairns","CountryCode":"AUS","1":"AUS","Population":"92273","2":"92273"},{"Name":"Baku","0":"Baku","CountryCode":"AZE","1":"AZE","Population":"1787800","2":"1787800"},{"Name":"G\u00e4nc\u00e4","0":"G\u00e4nc\u00e4","CountryCode":"AZE","1":"AZE","Population":"299300","2":"299300"},{"Name":"Sumqayit","0":"Sumqayit","CountryCode":"AZE","1":"AZE","Population":"283000","2":"283000"},{"Name":"Ming\u00e4\u00e7evir","0":"Ming\u00e4\u00e7evir","CountryCode":"AZE","1":"AZE","Population":"93900","2":"93900"},{"Name":"Nassau","0":"Nassau","CountryCode":"BHS","1":"BHS","Population":"172000","2":"172000"},{"Name":"al-Manama","0":"al-Manama","CountryCode":"BHR","1":"BHR","Population":"148000","2":"148000"},{"Name":"Dhaka","0":"Dhaka","CountryCode":"BGD","1":"BGD","Population":"3612850","2":"3612850"},{"Name":"Chittagong","0":"Chittagong","CountryCode":"BGD","1":"BGD","Population":"1392860","2":"1392860"},{"Name":"Khulna","0":"Khulna","CountryCode":"BGD","1":"BGD","Population":"663340","2":"663340"},{"Name":"Rajshahi","0":"Rajshahi","CountryCode":"BGD","1":"BGD","Population":"294056","2":"294056"},{"Name":"Narayanganj","0":"Narayanganj","CountryCode":"BGD","1":"BGD","Population":"202134","2":"202134"},{"Name":"Rangpur","0":"Rangpur","CountryCode":"BGD","1":"BGD","Population":"191398","2":"191398"},{"Name":"Mymensingh","0":"Mymensingh","CountryCode":"BGD","1":"BGD","Population":"188713","2":"188713"},{"Name":"Barisal","0":"Barisal","CountryCode":"BGD","1":"BGD","Population":"170232","2":"170232"},{"Name":"Tungi","0":"Tungi","CountryCode":"BGD","1":"BGD","Population":"168702","2":"168702"},{"Name":"Jessore","0":"Jessore","CountryCode":"BGD","1":"BGD","Population":"139710","2":"139710"},{"Name":"Comilla","0":"Comilla","CountryCode":"BGD","1":"BGD","Population":"135313","2":"135313"},{"Name":"Nawabganj","0":"Nawabganj","CountryCode":"BGD","1":"BGD","Population":"130577","2":"130577"},{"Name":"Dinajpur","0":"Dinajpur","CountryCode":"BGD","1":"BGD","Population":"127815","2":"127815"},{"Name":"Bogra","0":"Bogra","CountryCode":"BGD","1":"BGD","Population":"120170","2":"120170"},{"Name":"Sylhet","0":"Sylhet","CountryCode":"BGD","1":"BGD","Population":"117396","2":"117396"},{"Name":"Brahmanbaria","0":"Brahmanbaria","CountryCode":"BGD","1":"BGD","Population":"109032","2":"109032"},{"Name":"Tangail","0":"Tangail","CountryCode":"BGD","1":"BGD","Population":"106004","2":"106004"},{"Name":"Jamalpur","0":"Jamalpur","CountryCode":"BGD","1":"BGD","Population":"103556","2":"103556"},{"Name":"Pabna","0":"Pabna","CountryCode":"BGD","1":"BGD","Population":"103277","2":"103277"},{"Name":"Naogaon","0":"Naogaon","CountryCode":"BGD","1":"BGD","Population":"101266","2":"101266"},{"Name":"Sirajganj","0":"Sirajganj","CountryCode":"BGD","1":"BGD","Population":"99669","2":"99669"},{"Name":"Narsinghdi","0":"Narsinghdi","CountryCode":"BGD","1":"BGD","Population":"98342","2":"98342"},{"Name":"Saidpur","0":"Saidpur","CountryCode":"BGD","1":"BGD","Population":"96777","2":"96777"},{"Name":"Gazipur","0":"Gazipur","CountryCode":"BGD","1":"BGD","Population":"96717","2":"96717"},{"Name":"Bridgetown","0":"Bridgetown","CountryCode":"BRB","1":"BRB","Population":"6070","2":"6070"},{"Name":"Antwerpen","0":"Antwerpen","CountryCode":"BEL","1":"BEL","Population":"446525","2":"446525"},{"Name":"Gent","0":"Gent","CountryCode":"BEL","1":"BEL","Population":"224180","2":"224180"},{"Name":"Charleroi","0":"Charleroi","CountryCode":"BEL","1":"BEL","Population":"200827","2":"200827"},{"Name":"Li\u00e8ge","0":"Li\u00e8ge","CountryCode":"BEL","1":"BEL","Population":"185639","2":"185639"},{"Name":"Bruxelles [Brussel]","0":"Bruxelles [Brussel]","CountryCode":"BEL","1":"BEL","Population":"133859","2":"133859"},{"Name":"Brugge","0":"Brugge","CountryCode":"BEL","1":"BEL","Population":"116246","2":"116246"},{"Name":"Schaerbeek","0":"Schaerbeek","CountryCode":"BEL","1":"BEL","Population":"105692","2":"105692"},{"Name":"Namur","0":"Namur","CountryCode":"BEL","1":"BEL","Population":"105419","2":"105419"},{"Name":"Mons","0":"Mons","CountryCode":"BEL","1":"BEL","Population":"90935","2":"90935"},{"Name":"Belize City","0":"Belize City","CountryCode":"BLZ","1":"BLZ","Population":"55810","2":"55810"},{"Name":"Belmopan","0":"Belmopan","CountryCode":"BLZ","1":"BLZ","Population":"7105","2":"7105"},{"Name":"Cotonou","0":"Cotonou","CountryCode":"BEN","1":"BEN","Population":"536827","2":"536827"},{"Name":"Porto-Novo","0":"Porto-Novo","CountryCode":"BEN","1":"BEN","Population":"194000","2":"194000"},{"Name":"Djougou","0":"Djougou","CountryCode":"BEN","1":"BEN","Population":"134099","2":"134099"},{"Name":"Parakou","0":"Parakou","CountryCode":"BEN","1":"BEN","Population":"103577","2":"103577"},{"Name":"Saint George","0":"Saint George","CountryCode":"BMU","1":"BMU","Population":"1800","2":"1800"},{"Name":"Hamilton","0":"Hamilton","CountryCode":"BMU","1":"BMU","Population":"1200","2":"1200"},{"Name":"Thimphu","0":"Thimphu","CountryCode":"BTN","1":"BTN","Population":"22000","2":"22000"},{"Name":"Santa Cruz de la Sierra","0":"Santa Cruz de la Sierra","CountryCode":"BOL","1":"BOL","Population":"935361","2":"935361"},{"Name":"La Paz","0":"La Paz","CountryCode":"BOL","1":"BOL","Population":"758141","2":"758141"},{"Name":"El Alto","0":"El Alto","CountryCode":"BOL","1":"BOL","Population":"534466","2":"534466"},{"Name":"Cochabamba","0":"Cochabamba","CountryCode":"BOL","1":"BOL","Population":"482800","2":"482800"},{"Name":"Oruro","0":"Oruro","CountryCode":"BOL","1":"BOL","Population":"223553","2":"223553"},{"Name":"Sucre","0":"Sucre","CountryCode":"BOL","1":"BOL","Population":"178426","2":"178426"},{"Name":"Potos\u00ed","0":"Potos\u00ed","CountryCode":"BOL","1":"BOL","Population":"140642","2":"140642"},{"Name":"Tarija","0":"Tarija","CountryCode":"BOL","1":"BOL","Population":"125255","2":"125255"},{"Name":"Sarajevo","0":"Sarajevo","CountryCode":"BIH","1":"BIH","Population":"360000","2":"360000"},{"Name":"Banja Luka","0":"Banja Luka","CountryCode":"BIH","1":"BIH","Population":"143079","2":"143079"},{"Name":"Zenica","0":"Zenica","CountryCode":"BIH","1":"BIH","Population":"96027","2":"96027"},{"Name":"Gaborone","0":"Gaborone","CountryCode":"BWA","1":"BWA","Population":"213017","2":"213017"},{"Name":"Francistown","0":"Francistown","CountryCode":"BWA","1":"BWA","Population":"101805","2":"101805"},{"Name":"S\u00e3o Paulo","0":"S\u00e3o Paulo","CountryCode":"BRA","1":"BRA","Population":"9968485","2":"9968485"},{"Name":"Rio de Janeiro","0":"Rio de Janeiro","CountryCode":"BRA","1":"BRA","Population":"5598953","2":"5598953"},{"Name":"Salvador","0":"Salvador","CountryCode":"BRA","1":"BRA","Population":"2302832","2":"2302832"},{"Name":"Belo Horizonte","0":"Belo Horizonte","CountryCode":"BRA","1":"BRA","Population":"2139125","2":"2139125"},{"Name":"Fortaleza","0":"Fortaleza","CountryCode":"BRA","1":"BRA","Population":"2097757","2":"2097757"},{"Name":"Bras\u00edlia","0":"Bras\u00edlia","CountryCode":"BRA","1":"BRA","Population":"1969868","2":"1969868"},{"Name":"Curitiba","0":"Curitiba","CountryCode":"BRA","1":"BRA","Population":"1584232","2":"1584232"},{"Name":"Recife","0":"Recife","CountryCode":"BRA","1":"BRA","Population":"1378087","2":"1378087"},{"Name":"Porto Alegre","0":"Porto Alegre","CountryCode":"BRA","1":"BRA","Population":"1314032","2":"1314032"},{"Name":"Manaus","0":"Manaus","CountryCode":"BRA","1":"BRA","Population":"1255049","2":"1255049"},{"Name":"Bel\u00e9m","0":"Bel\u00e9m","CountryCode":"BRA","1":"BRA","Population":"1186926","2":"1186926"},{"Name":"Guarulhos","0":"Guarulhos","CountryCode":"BRA","1":"BRA","Population":"1095874","2":"1095874"},{"Name":"Goi\u00e2nia","0":"Goi\u00e2nia","CountryCode":"BRA","1":"BRA","Population":"1056330","2":"1056330"},{"Name":"Campinas","0":"Campinas","CountryCode":"BRA","1":"BRA","Population":"950043","2":"950043"},{"Name":"S\u00e3o Gon\u00e7alo","0":"S\u00e3o Gon\u00e7alo","CountryCode":"BRA","1":"BRA","Population":"869254","2":"869254"},{"Name":"Nova Igua\u00e7u","0":"Nova Igua\u00e7u","CountryCode":"BRA","1":"BRA","Population":"862225","2":"862225"},{"Name":"S\u00e3o Lu\u00eds","0":"S\u00e3o Lu\u00eds","CountryCode":"BRA","1":"BRA","Population":"837588","2":"837588"},{"Name":"Macei\u00f3","0":"Macei\u00f3","CountryCode":"BRA","1":"BRA","Population":"786288","2":"786288"},{"Name":"Duque de Caxias","0":"Duque de Caxias","CountryCode":"BRA","1":"BRA","Population":"746758","2":"746758"},{"Name":"S\u00e3o Bernardo do Campo","0":"S\u00e3o Bernardo do Campo","CountryCode":"BRA","1":"BRA","Population":"723132","2":"723132"},{"Name":"Teresina","0":"Teresina","CountryCode":"BRA","1":"BRA","Population":"691942","2":"691942"},{"Name":"Natal","0":"Natal","CountryCode":"BRA","1":"BRA","Population":"688955","2":"688955"},{"Name":"Osasco","0":"Osasco","CountryCode":"BRA","1":"BRA","Population":"659604","2":"659604"},{"Name":"Campo Grande","0":"Campo Grande","CountryCode":"BRA","1":"BRA","Population":"649593","2":"649593"},{"Name":"Santo Andr\u00e9","0":"Santo Andr\u00e9","CountryCode":"BRA","1":"BRA","Population":"630073","2":"630073"},{"Name":"Jo\u00e3o Pessoa","0":"Jo\u00e3o Pessoa","CountryCode":"BRA","1":"BRA","Population":"584029","2":"584029"},{"Name":"Jaboat\u00e3o dos Guararapes","0":"Jaboat\u00e3o dos Guararapes","CountryCode":"BRA","1":"BRA","Population":"558680","2":"558680"},{"Name":"Contagem","0":"Contagem","CountryCode":"BRA","1":"BRA","Population":"520801","2":"520801"},{"Name":"S\u00e3o Jos\u00e9 dos Campos","0":"S\u00e3o Jos\u00e9 dos Campos","CountryCode":"BRA","1":"BRA","Population":"515553","2":"515553"},{"Name":"Uberl\u00e2ndia","0":"Uberl\u00e2ndia","CountryCode":"BRA","1":"BRA","Population":"487222","2":"487222"},{"Name":"Feira de Santana","0":"Feira de Santana","CountryCode":"BRA","1":"BRA","Population":"479992","2":"479992"},{"Name":"Ribeir\u00e3o Preto","0":"Ribeir\u00e3o Preto","CountryCode":"BRA","1":"BRA","Population":"473276","2":"473276"},{"Name":"Sorocaba","0":"Sorocaba","CountryCode":"BRA","1":"BRA","Population":"466823","2":"466823"},{"Name":"Niter\u00f3i","0":"Niter\u00f3i","CountryCode":"BRA","1":"BRA","Population":"459884","2":"459884"},{"Name":"Cuiab\u00e1","0":"Cuiab\u00e1","CountryCode":"BRA","1":"BRA","Population":"453813","2":"453813"},{"Name":"Juiz de Fora","0":"Juiz de Fora","CountryCode":"BRA","1":"BRA","Population":"450288","2":"450288"},{"Name":"Aracaju","0":"Aracaju","CountryCode":"BRA","1":"BRA","Population":"445555","2":"445555"},{"Name":"S\u00e3o Jo\u00e3o de Meriti","0":"S\u00e3o Jo\u00e3o de Meriti","CountryCode":"BRA","1":"BRA","Population":"440052","2":"440052"},{"Name":"Londrina","0":"Londrina","CountryCode":"BRA","1":"BRA","Population":"432257","2":"432257"},{"Name":"Joinville","0":"Joinville","CountryCode":"BRA","1":"BRA","Population":"428011","2":"428011"},{"Name":"Belford Roxo","0":"Belford Roxo","CountryCode":"BRA","1":"BRA","Population":"425194","2":"425194"},{"Name":"Santos","0":"Santos","CountryCode":"BRA","1":"BRA","Population":"408748","2":"408748"},{"Name":"Ananindeua","0":"Ananindeua","CountryCode":"BRA","1":"BRA","Population":"400940","2":"400940"},{"Name":"Campos dos Goytacazes","0":"Campos dos Goytacazes","CountryCode":"BRA","1":"BRA","Population":"398418","2":"398418"},{"Name":"Mau\u00e1","0":"Mau\u00e1","CountryCode":"BRA","1":"BRA","Population":"375055","2":"375055"},{"Name":"Carapicu\u00edba","0":"Carapicu\u00edba","CountryCode":"BRA","1":"BRA","Population":"357552","2":"357552"},{"Name":"Olinda","0":"Olinda","CountryCode":"BRA","1":"BRA","Population":"354732","2":"354732"},{"Name":"Campina Grande","0":"Campina Grande","CountryCode":"BRA","1":"BRA","Population":"352497","2":"352497"},{"Name":"S\u00e3o Jos\u00e9 do Rio Preto","0":"S\u00e3o Jos\u00e9 do Rio Preto","CountryCode":"BRA","1":"BRA","Population":"351944","2":"351944"},{"Name":"Caxias do Sul","0":"Caxias do Sul","CountryCode":"BRA","1":"BRA","Population":"349581","2":"349581"},{"Name":"Moji das Cruzes","0":"Moji das Cruzes","CountryCode":"BRA","1":"BRA","Population":"339194","2":"339194"},{"Name":"Diadema","0":"Diadema","CountryCode":"BRA","1":"BRA","Population":"335078","2":"335078"},{"Name":"Aparecida de Goi\u00e2nia","0":"Aparecida de Goi\u00e2nia","CountryCode":"BRA","1":"BRA","Population":"324662","2":"324662"},{"Name":"Piracicaba","0":"Piracicaba","CountryCode":"BRA","1":"BRA","Population":"319104","2":"319104"},{"Name":"Cariacica","0":"Cariacica","CountryCode":"BRA","1":"BRA","Population":"319033","2":"319033"},{"Name":"Vila Velha","0":"Vila Velha","CountryCode":"BRA","1":"BRA","Population":"318758","2":"318758"},{"Name":"Pelotas","0":"Pelotas","CountryCode":"BRA","1":"BRA","Population":"315415","2":"315415"},{"Name":"Bauru","0":"Bauru","CountryCode":"BRA","1":"BRA","Population":"313670","2":"313670"},{"Name":"Porto Velho","0":"Porto Velho","CountryCode":"BRA","1":"BRA","Population":"309750","2":"309750"},{"Name":"Serra","0":"Serra","CountryCode":"BRA","1":"BRA","Population":"302666","2":"302666"},{"Name":"Betim","0":"Betim","CountryCode":"BRA","1":"BRA","Population":"302108","2":"302108"},{"Name":"Jund\u00eda\u00ed","0":"Jund\u00eda\u00ed","CountryCode":"BRA","1":"BRA","Population":"296127","2":"296127"},{"Name":"Canoas","0":"Canoas","CountryCode":"BRA","1":"BRA","Population":"294125","2":"294125"},{"Name":"Franca","0":"Franca","CountryCode":"BRA","1":"BRA","Population":"290139","2":"290139"},{"Name":"S\u00e3o Vicente","0":"S\u00e3o Vicente","CountryCode":"BRA","1":"BRA","Population":"286848","2":"286848"},{"Name":"Maring\u00e1","0":"Maring\u00e1","CountryCode":"BRA","1":"BRA","Population":"286461","2":"286461"},{"Name":"Montes Claros","0":"Montes Claros","CountryCode":"BRA","1":"BRA","Population":"286058","2":"286058"},{"Name":"An\u00e1polis","0":"An\u00e1polis","CountryCode":"BRA","1":"BRA","Population":"282197","2":"282197"},{"Name":"Florian\u00f3polis","0":"Florian\u00f3polis","CountryCode":"BRA","1":"BRA","Population":"281928","2":"281928"},{"Name":"Petr\u00f3polis","0":"Petr\u00f3polis","CountryCode":"BRA","1":"BRA","Population":"279183","2":"279183"},{"Name":"Itaquaquecetuba","0":"Itaquaquecetuba","CountryCode":"BRA","1":"BRA","Population":"270874","2":"270874"},{"Name":"Vit\u00f3ria","0":"Vit\u00f3ria","CountryCode":"BRA","1":"BRA","Population":"270626","2":"270626"},{"Name":"Ponta Grossa","0":"Ponta Grossa","CountryCode":"BRA","1":"BRA","Population":"268013","2":"268013"},{"Name":"Rio Branco","0":"Rio Branco","CountryCode":"BRA","1":"BRA","Population":"259537","2":"259537"},{"Name":"Foz do Igua\u00e7u","0":"Foz do Igua\u00e7u","CountryCode":"BRA","1":"BRA","Population":"259425","2":"259425"},{"Name":"Macap\u00e1","0":"Macap\u00e1","CountryCode":"BRA","1":"BRA","Population":"256033","2":"256033"},{"Name":"Ilh\u00e9us","0":"Ilh\u00e9us","CountryCode":"BRA","1":"BRA","Population":"254970","2":"254970"},{"Name":"Vit\u00f3ria da Conquista","0":"Vit\u00f3ria da Conquista","CountryCode":"BRA","1":"BRA","Population":"253587","2":"253587"},{"Name":"Uberaba","0":"Uberaba","CountryCode":"BRA","1":"BRA","Population":"249225","2":"249225"},{"Name":"Paulista","0":"Paulista","CountryCode":"BRA","1":"BRA","Population":"248473","2":"248473"},{"Name":"Limeira","0":"Limeira","CountryCode":"BRA","1":"BRA","Population":"245497","2":"245497"},{"Name":"Blumenau","0":"Blumenau","CountryCode":"BRA","1":"BRA","Population":"244379","2":"244379"},{"Name":"Caruaru","0":"Caruaru","CountryCode":"BRA","1":"BRA","Population":"244247","2":"244247"},{"Name":"Santar\u00e9m","0":"Santar\u00e9m","CountryCode":"BRA","1":"BRA","Population":"241771","2":"241771"},{"Name":"Volta Redonda","0":"Volta Redonda","CountryCode":"BRA","1":"BRA","Population":"240315","2":"240315"},{"Name":"Novo Hamburgo","0":"Novo Hamburgo","CountryCode":"BRA","1":"BRA","Population":"239940","2":"239940"},{"Name":"Caucaia","0":"Caucaia","CountryCode":"BRA","1":"BRA","Population":"238738","2":"238738"},{"Name":"Santa Maria","0":"Santa Maria","CountryCode":"BRA","1":"BRA","Population":"238473","2":"238473"},{"Name":"Cascavel","0":"Cascavel","CountryCode":"BRA","1":"BRA","Population":"237510","2":"237510"},{"Name":"Guaruj\u00e1","0":"Guaruj\u00e1","CountryCode":"BRA","1":"BRA","Population":"237206","2":"237206"},{"Name":"Ribeir\u00e3o das Neves","0":"Ribeir\u00e3o das Neves","CountryCode":"BRA","1":"BRA","Population":"232685","2":"232685"},{"Name":"Governador Valadares","0":"Governador Valadares","CountryCode":"BRA","1":"BRA","Population":"231724","2":"231724"},{"Name":"Taubat\u00e9","0":"Taubat\u00e9","CountryCode":"BRA","1":"BRA","Population":"229130","2":"229130"},{"Name":"Imperatriz","0":"Imperatriz","CountryCode":"BRA","1":"BRA","Population":"224564","2":"224564"},{"Name":"Gravata\u00ed","0":"Gravata\u00ed","CountryCode":"BRA","1":"BRA","Population":"223011","2":"223011"},{"Name":"Embu","0":"Embu","CountryCode":"BRA","1":"BRA","Population":"222223","2":"222223"},{"Name":"Mossor\u00f3","0":"Mossor\u00f3","CountryCode":"BRA","1":"BRA","Population":"214901","2":"214901"},{"Name":"V\u00e1rzea Grande","0":"V\u00e1rzea Grande","CountryCode":"BRA","1":"BRA","Population":"214435","2":"214435"},{"Name":"Petrolina","0":"Petrolina","CountryCode":"BRA","1":"BRA","Population":"210540","2":"210540"},{"Name":"Barueri","0":"Barueri","CountryCode":"BRA","1":"BRA","Population":"208426","2":"208426"},{"Name":"Viam\u00e3o","0":"Viam\u00e3o","CountryCode":"BRA","1":"BRA","Population":"207557","2":"207557"},{"Name":"Ipatinga","0":"Ipatinga","CountryCode":"BRA","1":"BRA","Population":"206338","2":"206338"},{"Name":"Juazeiro","0":"Juazeiro","CountryCode":"BRA","1":"BRA","Population":"201073","2":"201073"},{"Name":"Juazeiro do Norte","0":"Juazeiro do Norte","CountryCode":"BRA","1":"BRA","Population":"199636","2":"199636"},{"Name":"Tabo\u00e3o da Serra","0":"Tabo\u00e3o da Serra","CountryCode":"BRA","1":"BRA","Population":"197550","2":"197550"},{"Name":"S\u00e3o Jos\u00e9 dos Pinhais","0":"S\u00e3o Jos\u00e9 dos Pinhais","CountryCode":"BRA","1":"BRA","Population":"196884","2":"196884"},{"Name":"Mag\u00e9","0":"Mag\u00e9","CountryCode":"BRA","1":"BRA","Population":"196147","2":"196147"},{"Name":"Suzano","0":"Suzano","CountryCode":"BRA","1":"BRA","Population":"195434","2":"195434"},{"Name":"S\u00e3o Leopoldo","0":"S\u00e3o Leopoldo","CountryCode":"BRA","1":"BRA","Population":"189258","2":"189258"},{"Name":"Mar\u00edlia","0":"Mar\u00edlia","CountryCode":"BRA","1":"BRA","Population":"188691","2":"188691"},{"Name":"S\u00e3o Carlos","0":"S\u00e3o Carlos","CountryCode":"BRA","1":"BRA","Population":"187122","2":"187122"},{"Name":"Sumar\u00e9","0":"Sumar\u00e9","CountryCode":"BRA","1":"BRA","Population":"186205","2":"186205"},{"Name":"Presidente Prudente","0":"Presidente Prudente","CountryCode":"BRA","1":"BRA","Population":"185340","2":"185340"},{"Name":"Divin\u00f3polis","0":"Divin\u00f3polis","CountryCode":"BRA","1":"BRA","Population":"185047","2":"185047"},{"Name":"Sete Lagoas","0":"Sete Lagoas","CountryCode":"BRA","1":"BRA","Population":"182984","2":"182984"},{"Name":"Rio Grande","0":"Rio Grande","CountryCode":"BRA","1":"BRA","Population":"182222","2":"182222"},{"Name":"Itabuna","0":"Itabuna","CountryCode":"BRA","1":"BRA","Population":"182148","2":"182148"},{"Name":"Jequi\u00e9","0":"Jequi\u00e9","CountryCode":"BRA","1":"BRA","Population":"179128","2":"179128"},{"Name":"Arapiraca","0":"Arapiraca","CountryCode":"BRA","1":"BRA","Population":"178988","2":"178988"},{"Name":"Colombo","0":"Colombo","CountryCode":"BRA","1":"BRA","Population":"177764","2":"177764"},{"Name":"Americana","0":"Americana","CountryCode":"BRA","1":"BRA","Population":"177409","2":"177409"},{"Name":"Alvorada","0":"Alvorada","CountryCode":"BRA","1":"BRA","Population":"175574","2":"175574"},{"Name":"Araraquara","0":"Araraquara","CountryCode":"BRA","1":"BRA","Population":"174381","2":"174381"},{"Name":"Itabora\u00ed","0":"Itabora\u00ed","CountryCode":"BRA","1":"BRA","Population":"173977","2":"173977"},{"Name":"Santa B\u00e1rbara d\u00b4Oeste","0":"Santa B\u00e1rbara d\u00b4Oeste","CountryCode":"BRA","1":"BRA","Population":"171657","2":"171657"},{"Name":"Nova Friburgo","0":"Nova Friburgo","CountryCode":"BRA","1":"BRA","Population":"170697","2":"170697"},{"Name":"Jacare\u00ed","0":"Jacare\u00ed","CountryCode":"BRA","1":"BRA","Population":"170356","2":"170356"},{"Name":"Ara\u00e7atuba","0":"Ara\u00e7atuba","CountryCode":"BRA","1":"BRA","Population":"169303","2":"169303"},{"Name":"Barra Mansa","0":"Barra Mansa","CountryCode":"BRA","1":"BRA","Population":"168953","2":"168953"},{"Name":"Praia Grande","0":"Praia Grande","CountryCode":"BRA","1":"BRA","Population":"168434","2":"168434"},{"Name":"Marab\u00e1","0":"Marab\u00e1","CountryCode":"BRA","1":"BRA","Population":"167795","2":"167795"},{"Name":"Crici\u00fama","0":"Crici\u00fama","CountryCode":"BRA","1":"BRA","Population":"167661","2":"167661"},{"Name":"Boa Vista","0":"Boa Vista","CountryCode":"BRA","1":"BRA","Population":"167185","2":"167185"},{"Name":"Passo Fundo","0":"Passo Fundo","CountryCode":"BRA","1":"BRA","Population":"166343","2":"166343"},{"Name":"Dourados","0":"Dourados","CountryCode":"BRA","1":"BRA","Population":"164716","2":"164716"},{"Name":"Santa Luzia","0":"Santa Luzia","CountryCode":"BRA","1":"BRA","Population":"164704","2":"164704"},{"Name":"Rio Claro","0":"Rio Claro","CountryCode":"BRA","1":"BRA","Population":"163551","2":"163551"},{"Name":"Maracana\u00fa","0":"Maracana\u00fa","CountryCode":"BRA","1":"BRA","Population":"162022","2":"162022"},{"Name":"Guarapuava","0":"Guarapuava","CountryCode":"BRA","1":"BRA","Population":"160510","2":"160510"},{"Name":"Rondon\u00f3polis","0":"Rondon\u00f3polis","CountryCode":"BRA","1":"BRA","Population":"155115","2":"155115"},{"Name":"S\u00e3o Jos\u00e9","0":"S\u00e3o Jos\u00e9","CountryCode":"BRA","1":"BRA","Population":"155105","2":"155105"},{"Name":"Cachoeiro de Itapemirim","0":"Cachoeiro de Itapemirim","CountryCode":"BRA","1":"BRA","Population":"155024","2":"155024"},{"Name":"Nil\u00f3polis","0":"Nil\u00f3polis","CountryCode":"BRA","1":"BRA","Population":"153383","2":"153383"},{"Name":"Itapevi","0":"Itapevi","CountryCode":"BRA","1":"BRA","Population":"150664","2":"150664"},{"Name":"Cabo de Santo Agostinho","0":"Cabo de Santo Agostinho","CountryCode":"BRA","1":"BRA","Population":"149964","2":"149964"},{"Name":"Cama\u00e7ari","0":"Cama\u00e7ari","CountryCode":"BRA","1":"BRA","Population":"149146","2":"149146"},{"Name":"Sobral","0":"Sobral","CountryCode":"BRA","1":"BRA","Population":"146005","2":"146005"},{"Name":"Itaja\u00ed","0":"Itaja\u00ed","CountryCode":"BRA","1":"BRA","Population":"145197","2":"145197"},{"Name":"Chapec\u00f3","0":"Chapec\u00f3","CountryCode":"BRA","1":"BRA","Population":"144158","2":"144158"},{"Name":"Cotia","0":"Cotia","CountryCode":"BRA","1":"BRA","Population":"140042","2":"140042"},{"Name":"Lages","0":"Lages","CountryCode":"BRA","1":"BRA","Population":"139570","2":"139570"},{"Name":"Ferraz de Vasconcelos","0":"Ferraz de Vasconcelos","CountryCode":"BRA","1":"BRA","Population":"139283","2":"139283"},{"Name":"Indaiatuba","0":"Indaiatuba","CountryCode":"BRA","1":"BRA","Population":"135968","2":"135968"},{"Name":"Hortol\u00e2ndia","0":"Hortol\u00e2ndia","CountryCode":"BRA","1":"BRA","Population":"135755","2":"135755"},{"Name":"Caxias","0":"Caxias","CountryCode":"BRA","1":"BRA","Population":"133980","2":"133980"},{"Name":"S\u00e3o Caetano do Sul","0":"S\u00e3o Caetano do Sul","CountryCode":"BRA","1":"BRA","Population":"133321","2":"133321"},{"Name":"Itu","0":"Itu","CountryCode":"BRA","1":"BRA","Population":"132736","2":"132736"},{"Name":"Nossa Senhora do Socorro","0":"Nossa Senhora do Socorro","CountryCode":"BRA","1":"BRA","Population":"131351","2":"131351"},{"Name":"Parna\u00edba","0":"Parna\u00edba","CountryCode":"BRA","1":"BRA","Population":"129756","2":"129756"},{"Name":"Po\u00e7os de Caldas","0":"Po\u00e7os de Caldas","CountryCode":"BRA","1":"BRA","Population":"129683","2":"129683"},{"Name":"Teres\u00f3polis","0":"Teres\u00f3polis","CountryCode":"BRA","1":"BRA","Population":"128079","2":"128079"},{"Name":"Barreiras","0":"Barreiras","CountryCode":"BRA","1":"BRA","Population":"127801","2":"127801"},{"Name":"Castanhal","0":"Castanhal","CountryCode":"BRA","1":"BRA","Population":"127634","2":"127634"},{"Name":"Alagoinhas","0":"Alagoinhas","CountryCode":"BRA","1":"BRA","Population":"126820","2":"126820"},{"Name":"Itapecerica da Serra","0":"Itapecerica da Serra","CountryCode":"BRA","1":"BRA","Population":"126672","2":"126672"},{"Name":"Uruguaiana","0":"Uruguaiana","CountryCode":"BRA","1":"BRA","Population":"126305","2":"126305"},{"Name":"Paranagu\u00e1","0":"Paranagu\u00e1","CountryCode":"BRA","1":"BRA","Population":"126076","2":"126076"},{"Name":"Ibirit\u00e9","0":"Ibirit\u00e9","CountryCode":"BRA","1":"BRA","Population":"125982","2":"125982"},{"Name":"Timon","0":"Timon","CountryCode":"BRA","1":"BRA","Population":"125812","2":"125812"},{"Name":"Luzi\u00e2nia","0":"Luzi\u00e2nia","CountryCode":"BRA","1":"BRA","Population":"125597","2":"125597"},{"Name":"Maca\u00e9","0":"Maca\u00e9","CountryCode":"BRA","1":"BRA","Population":"125597","2":"125597"},{"Name":"Te\u00f3filo Otoni","0":"Te\u00f3filo Otoni","CountryCode":"BRA","1":"BRA","Population":"124489","2":"124489"},{"Name":"Moji-Gua\u00e7u","0":"Moji-Gua\u00e7u","CountryCode":"BRA","1":"BRA","Population":"123782","2":"123782"},{"Name":"Palmas","0":"Palmas","CountryCode":"BRA","1":"BRA","Population":"121919","2":"121919"},{"Name":"Pindamonhangaba","0":"Pindamonhangaba","CountryCode":"BRA","1":"BRA","Population":"121904","2":"121904"},{"Name":"Francisco Morato","0":"Francisco Morato","CountryCode":"BRA","1":"BRA","Population":"121197","2":"121197"},{"Name":"Bag\u00e9","0":"Bag\u00e9","CountryCode":"BRA","1":"BRA","Population":"120793","2":"120793"},{"Name":"Sapucaia do Sul","0":"Sapucaia do Sul","CountryCode":"BRA","1":"BRA","Population":"120217","2":"120217"},{"Name":"Cabo Frio","0":"Cabo Frio","CountryCode":"BRA","1":"BRA","Population":"119503","2":"119503"},{"Name":"Itapetininga","0":"Itapetininga","CountryCode":"BRA","1":"BRA","Population":"119391","2":"119391"},{"Name":"Patos de Minas","0":"Patos de Minas","CountryCode":"BRA","1":"BRA","Population":"119262","2":"119262"},{"Name":"Camaragibe","0":"Camaragibe","CountryCode":"BRA","1":"BRA","Population":"118968","2":"118968"},{"Name":"Bragan\u00e7a Paulista","0":"Bragan\u00e7a Paulista","CountryCode":"BRA","1":"BRA","Population":"116929","2":"116929"},{"Name":"Queimados","0":"Queimados","CountryCode":"BRA","1":"BRA","Population":"115020","2":"115020"},{"Name":"Aragua\u00edna","0":"Aragua\u00edna","CountryCode":"BRA","1":"BRA","Population":"114948","2":"114948"},{"Name":"Garanhuns","0":"Garanhuns","CountryCode":"BRA","1":"BRA","Population":"114603","2":"114603"},{"Name":"Vit\u00f3ria de Santo Ant\u00e3o","0":"Vit\u00f3ria de Santo Ant\u00e3o","CountryCode":"BRA","1":"BRA","Population":"113595","2":"113595"},{"Name":"Santa Rita","0":"Santa Rita","CountryCode":"BRA","1":"BRA","Population":"113135","2":"113135"},{"Name":"Barbacena","0":"Barbacena","CountryCode":"BRA","1":"BRA","Population":"113079","2":"113079"},{"Name":"Abaetetuba","0":"Abaetetuba","CountryCode":"BRA","1":"BRA","Population":"111258","2":"111258"},{"Name":"Ja\u00fa","0":"Ja\u00fa","CountryCode":"BRA","1":"BRA","Population":"109965","2":"109965"},{"Name":"Lauro de Freitas","0":"Lauro de Freitas","CountryCode":"BRA","1":"BRA","Population":"109236","2":"109236"},{"Name":"Franco da Rocha","0":"Franco da Rocha","CountryCode":"BRA","1":"BRA","Population":"108964","2":"108964"},{"Name":"Teixeira de Freitas","0":"Teixeira de Freitas","CountryCode":"BRA","1":"BRA","Population":"108441","2":"108441"},{"Name":"Varginha","0":"Varginha","CountryCode":"BRA","1":"BRA","Population":"108314","2":"108314"},{"Name":"Ribeir\u00e3o Pires","0":"Ribeir\u00e3o Pires","CountryCode":"BRA","1":"BRA","Population":"108121","2":"108121"},{"Name":"Sabar\u00e1","0":"Sabar\u00e1","CountryCode":"BRA","1":"BRA","Population":"107781","2":"107781"},{"Name":"Catanduva","0":"Catanduva","CountryCode":"BRA","1":"BRA","Population":"107761","2":"107761"},{"Name":"Rio Verde","0":"Rio Verde","CountryCode":"BRA","1":"BRA","Population":"107755","2":"107755"},{"Name":"Botucatu","0":"Botucatu","CountryCode":"BRA","1":"BRA","Population":"107663","2":"107663"},{"Name":"Colatina","0":"Colatina","CountryCode":"BRA","1":"BRA","Population":"107354","2":"107354"},{"Name":"Santa Cruz do Sul","0":"Santa Cruz do Sul","CountryCode":"BRA","1":"BRA","Population":"106734","2":"106734"},{"Name":"Linhares","0":"Linhares","CountryCode":"BRA","1":"BRA","Population":"106278","2":"106278"},{"Name":"Apucarana","0":"Apucarana","CountryCode":"BRA","1":"BRA","Population":"105114","2":"105114"},{"Name":"Barretos","0":"Barretos","CountryCode":"BRA","1":"BRA","Population":"104156","2":"104156"},{"Name":"Guaratinguet\u00e1","0":"Guaratinguet\u00e1","CountryCode":"BRA","1":"BRA","Population":"103433","2":"103433"},{"Name":"Cachoeirinha","0":"Cachoeirinha","CountryCode":"BRA","1":"BRA","Population":"103240","2":"103240"},{"Name":"Cod\u00f3","0":"Cod\u00f3","CountryCode":"BRA","1":"BRA","Population":"103153","2":"103153"},{"Name":"Jaragu\u00e1 do Sul","0":"Jaragu\u00e1 do Sul","CountryCode":"BRA","1":"BRA","Population":"102580","2":"102580"},{"Name":"Cubat\u00e3o","0":"Cubat\u00e3o","CountryCode":"BRA","1":"BRA","Population":"102372","2":"102372"},{"Name":"Itabira","0":"Itabira","CountryCode":"BRA","1":"BRA","Population":"102217","2":"102217"},{"Name":"Itaituba","0":"Itaituba","CountryCode":"BRA","1":"BRA","Population":"101320","2":"101320"},{"Name":"Araras","0":"Araras","CountryCode":"BRA","1":"BRA","Population":"101046","2":"101046"},{"Name":"Resende","0":"Resende","CountryCode":"BRA","1":"BRA","Population":"100627","2":"100627"},{"Name":"Atibaia","0":"Atibaia","CountryCode":"BRA","1":"BRA","Population":"100356","2":"100356"},{"Name":"Pouso Alegre","0":"Pouso Alegre","CountryCode":"BRA","1":"BRA","Population":"100028","2":"100028"},{"Name":"Toledo","0":"Toledo","CountryCode":"BRA","1":"BRA","Population":"99387","2":"99387"},{"Name":"Crato","0":"Crato","CountryCode":"BRA","1":"BRA","Population":"98965","2":"98965"},{"Name":"Passos","0":"Passos","CountryCode":"BRA","1":"BRA","Population":"98570","2":"98570"},{"Name":"Araguari","0":"Araguari","CountryCode":"BRA","1":"BRA","Population":"98399","2":"98399"},{"Name":"S\u00e3o Jos\u00e9 de Ribamar","0":"S\u00e3o Jos\u00e9 de Ribamar","CountryCode":"BRA","1":"BRA","Population":"98318","2":"98318"},{"Name":"Pinhais","0":"Pinhais","CountryCode":"BRA","1":"BRA","Population":"98198","2":"98198"},{"Name":"Sert\u00e3ozinho","0":"Sert\u00e3ozinho","CountryCode":"BRA","1":"BRA","Population":"98140","2":"98140"},{"Name":"Conselheiro Lafaiete","0":"Conselheiro Lafaiete","CountryCode":"BRA","1":"BRA","Population":"97507","2":"97507"},{"Name":"Paulo Afonso","0":"Paulo Afonso","CountryCode":"BRA","1":"BRA","Population":"97291","2":"97291"},{"Name":"Angra dos Reis","0":"Angra dos Reis","CountryCode":"BRA","1":"BRA","Population":"96864","2":"96864"},{"Name":"Eun\u00e1polis","0":"Eun\u00e1polis","CountryCode":"BRA","1":"BRA","Population":"96610","2":"96610"},{"Name":"Salto","0":"Salto","CountryCode":"BRA","1":"BRA","Population":"96348","2":"96348"},{"Name":"Ourinhos","0":"Ourinhos","CountryCode":"BRA","1":"BRA","Population":"96291","2":"96291"},{"Name":"Parnamirim","0":"Parnamirim","CountryCode":"BRA","1":"BRA","Population":"96210","2":"96210"},{"Name":"Jacobina","0":"Jacobina","CountryCode":"BRA","1":"BRA","Population":"96131","2":"96131"},{"Name":"Coronel Fabriciano","0":"Coronel Fabriciano","CountryCode":"BRA","1":"BRA","Population":"95933","2":"95933"},{"Name":"Birigui","0":"Birigui","CountryCode":"BRA","1":"BRA","Population":"94685","2":"94685"},{"Name":"Tatu\u00ed","0":"Tatu\u00ed","CountryCode":"BRA","1":"BRA","Population":"93897","2":"93897"},{"Name":"Ji-Paran\u00e1","0":"Ji-Paran\u00e1","CountryCode":"BRA","1":"BRA","Population":"93346","2":"93346"},{"Name":"Bacabal","0":"Bacabal","CountryCode":"BRA","1":"BRA","Population":"93121","2":"93121"},{"Name":"Camet\u00e1","0":"Camet\u00e1","CountryCode":"BRA","1":"BRA","Population":"92779","2":"92779"},{"Name":"Gua\u00edba","0":"Gua\u00edba","CountryCode":"BRA","1":"BRA","Population":"92224","2":"92224"},{"Name":"S\u00e3o Louren\u00e7o da Mata","0":"S\u00e3o Louren\u00e7o da Mata","CountryCode":"BRA","1":"BRA","Population":"91999","2":"91999"},{"Name":"Santana do Livramento","0":"Santana do Livramento","CountryCode":"BRA","1":"BRA","Population":"91779","2":"91779"},{"Name":"Votorantim","0":"Votorantim","CountryCode":"BRA","1":"BRA","Population":"91777","2":"91777"},{"Name":"Campo Largo","0":"Campo Largo","CountryCode":"BRA","1":"BRA","Population":"91203","2":"91203"},{"Name":"Patos","0":"Patos","CountryCode":"BRA","1":"BRA","Population":"90519","2":"90519"},{"Name":"Ituiutaba","0":"Ituiutaba","CountryCode":"BRA","1":"BRA","Population":"90507","2":"90507"},{"Name":"Corumb\u00e1","0":"Corumb\u00e1","CountryCode":"BRA","1":"BRA","Population":"90111","2":"90111"},{"Name":"Palho\u00e7a","0":"Palho\u00e7a","CountryCode":"BRA","1":"BRA","Population":"89465","2":"89465"},{"Name":"Barra do Pira\u00ed","0":"Barra do Pira\u00ed","CountryCode":"BRA","1":"BRA","Population":"89388","2":"89388"},{"Name":"Bento Gon\u00e7alves","0":"Bento Gon\u00e7alves","CountryCode":"BRA","1":"BRA","Population":"89254","2":"89254"},{"Name":"Po\u00e1","0":"Po\u00e1","CountryCode":"BRA","1":"BRA","Population":"89236","2":"89236"},{"Name":"\u00c1guas Lindas de Goi\u00e1s","0":"\u00c1guas Lindas de Goi\u00e1s","CountryCode":"BRA","1":"BRA","Population":"89200","2":"89200"},{"Name":"London","0":"London","CountryCode":"GBR","1":"GBR","Population":"7285000","2":"7285000"},{"Name":"Birmingham","0":"Birmingham","CountryCode":"GBR","1":"GBR","Population":"1013000","2":"1013000"},{"Name":"Glasgow","0":"Glasgow","CountryCode":"GBR","1":"GBR","Population":"619680","2":"619680"},{"Name":"Liverpool","0":"Liverpool","CountryCode":"GBR","1":"GBR","Population":"461000","2":"461000"},{"Name":"Edinburgh","0":"Edinburgh","CountryCode":"GBR","1":"GBR","Population":"450180","2":"450180"},{"Name":"Sheffield","0":"Sheffield","CountryCode":"GBR","1":"GBR","Population":"431607","2":"431607"},{"Name":"Manchester","0":"Manchester","CountryCode":"GBR","1":"GBR","Population":"430000","2":"430000"},{"Name":"Leeds","0":"Leeds","CountryCode":"GBR","1":"GBR","Population":"424194","2":"424194"},{"Name":"Bristol","0":"Bristol","CountryCode":"GBR","1":"GBR","Population":"402000","2":"402000"},{"Name":"Cardiff","0":"Cardiff","CountryCode":"GBR","1":"GBR","Population":"321000","2":"321000"},{"Name":"Coventry","0":"Coventry","CountryCode":"GBR","1":"GBR","Population":"304000","2":"304000"},{"Name":"Leicester","0":"Leicester","CountryCode":"GBR","1":"GBR","Population":"294000","2":"294000"},{"Name":"Bradford","0":"Bradford","CountryCode":"GBR","1":"GBR","Population":"289376","2":"289376"},{"Name":"Belfast","0":"Belfast","CountryCode":"GBR","1":"GBR","Population":"287500","2":"287500"},{"Name":"Nottingham","0":"Nottingham","CountryCode":"GBR","1":"GBR","Population":"287000","2":"287000"},{"Name":"Kingston upon Hull","0":"Kingston upon Hull","CountryCode":"GBR","1":"GBR","Population":"262000","2":"262000"},{"Name":"Plymouth","0":"Plymouth","CountryCode":"GBR","1":"GBR","Population":"253000","2":"253000"},{"Name":"Stoke-on-Trent","0":"Stoke-on-Trent","CountryCode":"GBR","1":"GBR","Population":"252000","2":"252000"},{"Name":"Wolverhampton","0":"Wolverhampton","CountryCode":"GBR","1":"GBR","Population":"242000","2":"242000"},{"Name":"Derby","0":"Derby","CountryCode":"GBR","1":"GBR","Population":"236000","2":"236000"},{"Name":"Swansea","0":"Swansea","CountryCode":"GBR","1":"GBR","Population":"230000","2":"230000"},{"Name":"Southampton","0":"Southampton","CountryCode":"GBR","1":"GBR","Population":"216000","2":"216000"},{"Name":"Aberdeen","0":"Aberdeen","CountryCode":"GBR","1":"GBR","Population":"213070","2":"213070"},{"Name":"Northampton","0":"Northampton","CountryCode":"GBR","1":"GBR","Population":"196000","2":"196000"},{"Name":"Dudley","0":"Dudley","CountryCode":"GBR","1":"GBR","Population":"192171","2":"192171"},{"Name":"Portsmouth","0":"Portsmouth","CountryCode":"GBR","1":"GBR","Population":"190000","2":"190000"},{"Name":"Newcastle upon Tyne","0":"Newcastle upon Tyne","CountryCode":"GBR","1":"GBR","Population":"189150","2":"189150"},{"Name":"Sunderland","0":"Sunderland","CountryCode":"GBR","1":"GBR","Population":"183310","2":"183310"},{"Name":"Luton","0":"Luton","CountryCode":"GBR","1":"GBR","Population":"183000","2":"183000"},{"Name":"Swindon","0":"Swindon","CountryCode":"GBR","1":"GBR","Population":"180000","2":"180000"},{"Name":"Southend-on-Sea","0":"Southend-on-Sea","CountryCode":"GBR","1":"GBR","Population":"176000","2":"176000"},{"Name":"Walsall","0":"Walsall","CountryCode":"GBR","1":"GBR","Population":"174739","2":"174739"},{"Name":"Bournemouth","0":"Bournemouth","CountryCode":"GBR","1":"GBR","Population":"162000","2":"162000"},{"Name":"Peterborough","0":"Peterborough","CountryCode":"GBR","1":"GBR","Population":"156000","2":"156000"},{"Name":"Brighton","0":"Brighton","CountryCode":"GBR","1":"GBR","Population":"156124","2":"156124"},{"Name":"Blackpool","0":"Blackpool","CountryCode":"GBR","1":"GBR","Population":"151000","2":"151000"},{"Name":"Dundee","0":"Dundee","CountryCode":"GBR","1":"GBR","Population":"146690","2":"146690"},{"Name":"West Bromwich","0":"West Bromwich","CountryCode":"GBR","1":"GBR","Population":"146386","2":"146386"},{"Name":"Reading","0":"Reading","CountryCode":"GBR","1":"GBR","Population":"148000","2":"148000"},{"Name":"Oldbury\/Smethwick (Warley)","0":"Oldbury\/Smethwick (Warley)","CountryCode":"GBR","1":"GBR","Population":"145542","2":"145542"},{"Name":"Middlesbrough","0":"Middlesbrough","CountryCode":"GBR","1":"GBR","Population":"145000","2":"145000"},{"Name":"Huddersfield","0":"Huddersfield","CountryCode":"GBR","1":"GBR","Population":"143726","2":"143726"},{"Name":"Oxford","0":"Oxford","CountryCode":"GBR","1":"GBR","Population":"144000","2":"144000"},{"Name":"Poole","0":"Poole","CountryCode":"GBR","1":"GBR","Population":"141000","2":"141000"},{"Name":"Bolton","0":"Bolton","CountryCode":"GBR","1":"GBR","Population":"139020","2":"139020"},{"Name":"Blackburn","0":"Blackburn","CountryCode":"GBR","1":"GBR","Population":"140000","2":"140000"},{"Name":"Newport","0":"Newport","CountryCode":"GBR","1":"GBR","Population":"139000","2":"139000"},{"Name":"Preston","0":"Preston","CountryCode":"GBR","1":"GBR","Population":"135000","2":"135000"},{"Name":"Stockport","0":"Stockport","CountryCode":"GBR","1":"GBR","Population":"132813","2":"132813"},{"Name":"Norwich","0":"Norwich","CountryCode":"GBR","1":"GBR","Population":"124000","2":"124000"},{"Name":"Rotherham","0":"Rotherham","CountryCode":"GBR","1":"GBR","Population":"121380","2":"121380"},{"Name":"Cambridge","0":"Cambridge","CountryCode":"GBR","1":"GBR","Population":"121000","2":"121000"},{"Name":"Watford","0":"Watford","CountryCode":"GBR","1":"GBR","Population":"113080","2":"113080"},{"Name":"Ipswich","0":"Ipswich","CountryCode":"GBR","1":"GBR","Population":"114000","2":"114000"},{"Name":"Slough","0":"Slough","CountryCode":"GBR","1":"GBR","Population":"112000","2":"112000"},{"Name":"Exeter","0":"Exeter","CountryCode":"GBR","1":"GBR","Population":"111000","2":"111000"},{"Name":"Cheltenham","0":"Cheltenham","CountryCode":"GBR","1":"GBR","Population":"106000","2":"106000"},{"Name":"Gloucester","0":"Gloucester","CountryCode":"GBR","1":"GBR","Population":"107000","2":"107000"},{"Name":"Saint Helens","0":"Saint Helens","CountryCode":"GBR","1":"GBR","Population":"106293","2":"106293"},{"Name":"Sutton Coldfield","0":"Sutton Coldfield","CountryCode":"GBR","1":"GBR","Population":"106001","2":"106001"},{"Name":"York","0":"York","CountryCode":"GBR","1":"GBR","Population":"104425","2":"104425"},{"Name":"Oldham","0":"Oldham","CountryCode":"GBR","1":"GBR","Population":"103931","2":"103931"},{"Name":"Basildon","0":"Basildon","CountryCode":"GBR","1":"GBR","Population":"100924","2":"100924"},{"Name":"Worthing","0":"Worthing","CountryCode":"GBR","1":"GBR","Population":"100000","2":"100000"},{"Name":"Chelmsford","0":"Chelmsford","CountryCode":"GBR","1":"GBR","Population":"97451","2":"97451"},{"Name":"Colchester","0":"Colchester","CountryCode":"GBR","1":"GBR","Population":"96063","2":"96063"},{"Name":"Crawley","0":"Crawley","CountryCode":"GBR","1":"GBR","Population":"97000","2":"97000"},{"Name":"Gillingham","0":"Gillingham","CountryCode":"GBR","1":"GBR","Population":"92000","2":"92000"},{"Name":"Solihull","0":"Solihull","CountryCode":"GBR","1":"GBR","Population":"94531","2":"94531"},{"Name":"Rochdale","0":"Rochdale","CountryCode":"GBR","1":"GBR","Population":"94313","2":"94313"},{"Name":"Birkenhead","0":"Birkenhead","CountryCode":"GBR","1":"GBR","Population":"93087","2":"93087"},{"Name":"Worcester","0":"Worcester","CountryCode":"GBR","1":"GBR","Population":"95000","2":"95000"},{"Name":"Hartlepool","0":"Hartlepool","CountryCode":"GBR","1":"GBR","Population":"92000","2":"92000"},{"Name":"Halifax","0":"Halifax","CountryCode":"GBR","1":"GBR","Population":"91069","2":"91069"},{"Name":"Woking\/Byfleet","0":"Woking\/Byfleet","CountryCode":"GBR","1":"GBR","Population":"92000","2":"92000"},{"Name":"Southport","0":"Southport","CountryCode":"GBR","1":"GBR","Population":"90959","2":"90959"},{"Name":"Maidstone","0":"Maidstone","CountryCode":"GBR","1":"GBR","Population":"90878","2":"90878"},{"Name":"Eastbourne","0":"Eastbourne","CountryCode":"GBR","1":"GBR","Population":"90000","2":"90000"},{"Name":"Grimsby","0":"Grimsby","CountryCode":"GBR","1":"GBR","Population":"89000","2":"89000"},{"Name":"Saint Helier","0":"Saint Helier","CountryCode":"GBR","1":"GBR","Population":"27523","2":"27523"},{"Name":"Douglas","0":"Douglas","CountryCode":"GBR","1":"GBR","Population":"23487","2":"23487"},{"Name":"Road Town","0":"Road Town","CountryCode":"VGB","1":"VGB","Population":"8000","2":"8000"},{"Name":"Bandar Seri Begawan","0":"Bandar Seri Begawan","CountryCode":"BRN","1":"BRN","Population":"21484","2":"21484"},{"Name":"Sofija","0":"Sofija","CountryCode":"BGR","1":"BGR","Population":"1122302","2":"1122302"},{"Name":"Plovdiv","0":"Plovdiv","CountryCode":"BGR","1":"BGR","Population":"342584","2":"342584"},{"Name":"Varna","0":"Varna","CountryCode":"BGR","1":"BGR","Population":"299801","2":"299801"},{"Name":"Burgas","0":"Burgas","CountryCode":"BGR","1":"BGR","Population":"195255","2":"195255"},{"Name":"Ruse","0":"Ruse","CountryCode":"BGR","1":"BGR","Population":"166467","2":"166467"},{"Name":"Stara Zagora","0":"Stara Zagora","CountryCode":"BGR","1":"BGR","Population":"147939","2":"147939"},{"Name":"Pleven","0":"Pleven","CountryCode":"BGR","1":"BGR","Population":"121952","2":"121952"},{"Name":"Sliven","0":"Sliven","CountryCode":"BGR","1":"BGR","Population":"105530","2":"105530"},{"Name":"Dobric","0":"Dobric","CountryCode":"BGR","1":"BGR","Population":"100399","2":"100399"},{"Name":"\u0160umen","0":"\u0160umen","CountryCode":"BGR","1":"BGR","Population":"94686","2":"94686"},{"Name":"Ouagadougou","0":"Ouagadougou","CountryCode":"BFA","1":"BFA","Population":"824000","2":"824000"},{"Name":"Bobo-Dioulasso","0":"Bobo-Dioulasso","CountryCode":"BFA","1":"BFA","Population":"300000","2":"300000"},{"Name":"Koudougou","0":"Koudougou","CountryCode":"BFA","1":"BFA","Population":"105000","2":"105000"},{"Name":"Bujumbura","0":"Bujumbura","CountryCode":"BDI","1":"BDI","Population":"300000","2":"300000"},{"Name":"George Town","0":"George Town","CountryCode":"CYM","1":"CYM","Population":"19600","2":"19600"},{"Name":"Santiago de Chile","0":"Santiago de Chile","CountryCode":"CHL","1":"CHL","Population":"4703954","2":"4703954"},{"Name":"Puente Alto","0":"Puente Alto","CountryCode":"CHL","1":"CHL","Population":"386236","2":"386236"},{"Name":"Vi\u00f1a del Mar","0":"Vi\u00f1a del Mar","CountryCode":"CHL","1":"CHL","Population":"312493","2":"312493"},{"Name":"Valpara\u00edso","0":"Valpara\u00edso","CountryCode":"CHL","1":"CHL","Population":"293800","2":"293800"},{"Name":"Talcahuano","0":"Talcahuano","CountryCode":"CHL","1":"CHL","Population":"277752","2":"277752"},{"Name":"Antofagasta","0":"Antofagasta","CountryCode":"CHL","1":"CHL","Population":"251429","2":"251429"},{"Name":"San Bernardo","0":"San Bernardo","CountryCode":"CHL","1":"CHL","Population":"241910","2":"241910"},{"Name":"Temuco","0":"Temuco","CountryCode":"CHL","1":"CHL","Population":"233041","2":"233041"},{"Name":"Concepci\u00f3n","0":"Concepci\u00f3n","CountryCode":"CHL","1":"CHL","Population":"217664","2":"217664"},{"Name":"Rancagua","0":"Rancagua","CountryCode":"CHL","1":"CHL","Population":"212977","2":"212977"},{"Name":"Arica","0":"Arica","CountryCode":"CHL","1":"CHL","Population":"189036","2":"189036"},{"Name":"Talca","0":"Talca","CountryCode":"CHL","1":"CHL","Population":"187557","2":"187557"},{"Name":"Chill\u00e1n","0":"Chill\u00e1n","CountryCode":"CHL","1":"CHL","Population":"178182","2":"178182"},{"Name":"Iquique","0":"Iquique","CountryCode":"CHL","1":"CHL","Population":"177892","2":"177892"},{"Name":"Los Angeles","0":"Los Angeles","CountryCode":"CHL","1":"CHL","Population":"158215","2":"158215"},{"Name":"Puerto Montt","0":"Puerto Montt","CountryCode":"CHL","1":"CHL","Population":"152194","2":"152194"},{"Name":"Coquimbo","0":"Coquimbo","CountryCode":"CHL","1":"CHL","Population":"143353","2":"143353"},{"Name":"Osorno","0":"Osorno","CountryCode":"CHL","1":"CHL","Population":"141468","2":"141468"},{"Name":"La Serena","0":"La Serena","CountryCode":"CHL","1":"CHL","Population":"137409","2":"137409"},{"Name":"Calama","0":"Calama","CountryCode":"CHL","1":"CHL","Population":"137265","2":"137265"},{"Name":"Valdivia","0":"Valdivia","CountryCode":"CHL","1":"CHL","Population":"133106","2":"133106"},{"Name":"Punta Arenas","0":"Punta Arenas","CountryCode":"CHL","1":"CHL","Population":"125631","2":"125631"},{"Name":"Copiap\u00f3","0":"Copiap\u00f3","CountryCode":"CHL","1":"CHL","Population":"120128","2":"120128"},{"Name":"Quilpu\u00e9","0":"Quilpu\u00e9","CountryCode":"CHL","1":"CHL","Population":"118857","2":"118857"},{"Name":"Curic\u00f3","0":"Curic\u00f3","CountryCode":"CHL","1":"CHL","Population":"115766","2":"115766"},{"Name":"Ovalle","0":"Ovalle","CountryCode":"CHL","1":"CHL","Population":"94854","2":"94854"},{"Name":"Coronel","0":"Coronel","CountryCode":"CHL","1":"CHL","Population":"93061","2":"93061"},{"Name":"San Pedro de la Paz","0":"San Pedro de la Paz","CountryCode":"CHL","1":"CHL","Population":"91684","2":"91684"},{"Name":"Melipilla","0":"Melipilla","CountryCode":"CHL","1":"CHL","Population":"91056","2":"91056"},{"Name":"Avarua","0":"Avarua","CountryCode":"COK","1":"COK","Population":"11900","2":"11900"},{"Name":"San Jos\u00e9","0":"San Jos\u00e9","CountryCode":"CRI","1":"CRI","Population":"339131","2":"339131"},{"Name":"Djibouti","0":"Djibouti","CountryCode":"DJI","1":"DJI","Population":"383000","2":"383000"},{"Name":"Roseau","0":"Roseau","CountryCode":"DMA","1":"DMA","Population":"16243","2":"16243"},{"Name":"Santo Domingo de Guzm\u00e1n","0":"Santo Domingo de Guzm\u00e1n","CountryCode":"DOM","1":"DOM","Population":"1609966","2":"1609966"},{"Name":"Santiago de los Caballeros","0":"Santiago de los Caballeros","CountryCode":"DOM","1":"DOM","Population":"365463","2":"365463"},{"Name":"La Romana","0":"La Romana","CountryCode":"DOM","1":"DOM","Population":"140204","2":"140204"},{"Name":"San Pedro de Macor\u00eds","0":"San Pedro de Macor\u00eds","CountryCode":"DOM","1":"DOM","Population":"124735","2":"124735"},{"Name":"San Francisco de Macor\u00eds","0":"San Francisco de Macor\u00eds","CountryCode":"DOM","1":"DOM","Population":"108485","2":"108485"},{"Name":"San Felipe de Puerto Plata","0":"San Felipe de Puerto Plata","CountryCode":"DOM","1":"DOM","Population":"89423","2":"89423"},{"Name":"Guayaquil","0":"Guayaquil","CountryCode":"ECU","1":"ECU","Population":"2070040","2":"2070040"},{"Name":"Quito","0":"Quito","CountryCode":"ECU","1":"ECU","Population":"1573458","2":"1573458"},{"Name":"Cuenca","0":"Cuenca","CountryCode":"ECU","1":"ECU","Population":"270353","2":"270353"},{"Name":"Machala","0":"Machala","CountryCode":"ECU","1":"ECU","Population":"210368","2":"210368"},{"Name":"Santo Domingo de los Colorados","0":"Santo Domingo de los Colorados","CountryCode":"ECU","1":"ECU","Population":"202111","2":"202111"},{"Name":"Portoviejo","0":"Portoviejo","CountryCode":"ECU","1":"ECU","Population":"176413","2":"176413"},{"Name":"Ambato","0":"Ambato","CountryCode":"ECU","1":"ECU","Population":"169612","2":"169612"},{"Name":"Manta","0":"Manta","CountryCode":"ECU","1":"ECU","Population":"164739","2":"164739"},{"Name":"Duran [Eloy Alfaro]","0":"Duran [Eloy Alfaro]","CountryCode":"ECU","1":"ECU","Population":"152514","2":"152514"},{"Name":"Ibarra","0":"Ibarra","CountryCode":"ECU","1":"ECU","Population":"130643","2":"130643"},{"Name":"Quevedo","0":"Quevedo","CountryCode":"ECU","1":"ECU","Population":"129631","2":"129631"},{"Name":"Milagro","0":"Milagro","CountryCode":"ECU","1":"ECU","Population":"124177","2":"124177"},{"Name":"Loja","0":"Loja","CountryCode":"ECU","1":"ECU","Population":"123875","2":"123875"},{"Name":"R\u00edobamba","0":"R\u00edobamba","CountryCode":"ECU","1":"ECU","Population":"123163","2":"123163"},{"Name":"Esmeraldas","0":"Esmeraldas","CountryCode":"ECU","1":"ECU","Population":"123045","2":"123045"},{"Name":"Cairo","0":"Cairo","CountryCode":"EGY","1":"EGY","Population":"6789479","2":"6789479"},{"Name":"Alexandria","0":"Alexandria","CountryCode":"EGY","1":"EGY","Population":"3328196","2":"3328196"},{"Name":"Giza","0":"Giza","CountryCode":"EGY","1":"EGY","Population":"2221868","2":"2221868"},{"Name":"Shubra al-Khayma","0":"Shubra al-Khayma","CountryCode":"EGY","1":"EGY","Population":"870716","2":"870716"},{"Name":"Port Said","0":"Port Said","CountryCode":"EGY","1":"EGY","Population":"469533","2":"469533"},{"Name":"Suez","0":"Suez","CountryCode":"EGY","1":"EGY","Population":"417610","2":"417610"},{"Name":"al-Mahallat al-Kubra","0":"al-Mahallat al-Kubra","CountryCode":"EGY","1":"EGY","Population":"395402","2":"395402"},{"Name":"Tanta","0":"Tanta","CountryCode":"EGY","1":"EGY","Population":"371010","2":"371010"},{"Name":"al-Mansura","0":"al-Mansura","CountryCode":"EGY","1":"EGY","Population":"369621","2":"369621"},{"Name":"Luxor","0":"Luxor","CountryCode":"EGY","1":"EGY","Population":"360503","2":"360503"},{"Name":"Asyut","0":"Asyut","CountryCode":"EGY","1":"EGY","Population":"343498","2":"343498"},{"Name":"Bahtim","0":"Bahtim","CountryCode":"EGY","1":"EGY","Population":"275807","2":"275807"},{"Name":"Zagazig","0":"Zagazig","CountryCode":"EGY","1":"EGY","Population":"267351","2":"267351"},{"Name":"al-Faiyum","0":"al-Faiyum","CountryCode":"EGY","1":"EGY","Population":"260964","2":"260964"},{"Name":"Ismailia","0":"Ismailia","CountryCode":"EGY","1":"EGY","Population":"254477","2":"254477"},{"Name":"Kafr al-Dawwar","0":"Kafr al-Dawwar","CountryCode":"EGY","1":"EGY","Population":"231978","2":"231978"},{"Name":"Assuan","0":"Assuan","CountryCode":"EGY","1":"EGY","Population":"219017","2":"219017"},{"Name":"Damanhur","0":"Damanhur","CountryCode":"EGY","1":"EGY","Population":"212203","2":"212203"},{"Name":"al-Minya","0":"al-Minya","CountryCode":"EGY","1":"EGY","Population":"201360","2":"201360"},{"Name":"Bani Suwayf","0":"Bani Suwayf","CountryCode":"EGY","1":"EGY","Population":"172032","2":"172032"},{"Name":"Qina","0":"Qina","CountryCode":"EGY","1":"EGY","Population":"171275","2":"171275"},{"Name":"Sawhaj","0":"Sawhaj","CountryCode":"EGY","1":"EGY","Population":"170125","2":"170125"},{"Name":"Shibin al-Kawm","0":"Shibin al-Kawm","CountryCode":"EGY","1":"EGY","Population":"159909","2":"159909"},{"Name":"Bulaq al-Dakrur","0":"Bulaq al-Dakrur","CountryCode":"EGY","1":"EGY","Population":"148787","2":"148787"},{"Name":"Banha","0":"Banha","CountryCode":"EGY","1":"EGY","Population":"145792","2":"145792"},{"Name":"Warraq al-Arab","0":"Warraq al-Arab","CountryCode":"EGY","1":"EGY","Population":"127108","2":"127108"},{"Name":"Kafr al-Shaykh","0":"Kafr al-Shaykh","CountryCode":"EGY","1":"EGY","Population":"124819","2":"124819"},{"Name":"Mallawi","0":"Mallawi","CountryCode":"EGY","1":"EGY","Population":"119283","2":"119283"},{"Name":"Bilbays","0":"Bilbays","CountryCode":"EGY","1":"EGY","Population":"113608","2":"113608"},{"Name":"Mit Ghamr","0":"Mit Ghamr","CountryCode":"EGY","1":"EGY","Population":"101801","2":"101801"},{"Name":"al-Arish","0":"al-Arish","CountryCode":"EGY","1":"EGY","Population":"100447","2":"100447"},{"Name":"Talkha","0":"Talkha","CountryCode":"EGY","1":"EGY","Population":"97700","2":"97700"},{"Name":"Qalyub","0":"Qalyub","CountryCode":"EGY","1":"EGY","Population":"97200","2":"97200"},{"Name":"Jirja","0":"Jirja","CountryCode":"EGY","1":"EGY","Population":"95400","2":"95400"},{"Name":"Idfu","0":"Idfu","CountryCode":"EGY","1":"EGY","Population":"94200","2":"94200"},{"Name":"al-Hawamidiya","0":"al-Hawamidiya","CountryCode":"EGY","1":"EGY","Population":"91700","2":"91700"},{"Name":"Disuq","0":"Disuq","CountryCode":"EGY","1":"EGY","Population":"91300","2":"91300"},{"Name":"San Salvador","0":"San Salvador","CountryCode":"SLV","1":"SLV","Population":"415346","2":"415346"},{"Name":"Santa Ana","0":"Santa Ana","CountryCode":"SLV","1":"SLV","Population":"139389","2":"139389"},{"Name":"Mejicanos","0":"Mejicanos","CountryCode":"SLV","1":"SLV","Population":"138800","2":"138800"},{"Name":"Soyapango","0":"Soyapango","CountryCode":"SLV","1":"SLV","Population":"129800","2":"129800"},{"Name":"San Miguel","0":"San Miguel","CountryCode":"SLV","1":"SLV","Population":"127696","2":"127696"},{"Name":"Nueva San Salvador","0":"Nueva San Salvador","CountryCode":"SLV","1":"SLV","Population":"98400","2":"98400"},{"Name":"Apopa","0":"Apopa","CountryCode":"SLV","1":"SLV","Population":"88800","2":"88800"},{"Name":"Asmara","0":"Asmara","CountryCode":"ERI","1":"ERI","Population":"431000","2":"431000"},{"Name":"Madrid","0":"Madrid","CountryCode":"ESP","1":"ESP","Population":"2879052","2":"2879052"},{"Name":"Barcelona","0":"Barcelona","CountryCode":"ESP","1":"ESP","Population":"1503451","2":"1503451"},{"Name":"Valencia","0":"Valencia","CountryCode":"ESP","1":"ESP","Population":"739412","2":"739412"},{"Name":"Sevilla","0":"Sevilla","CountryCode":"ESP","1":"ESP","Population":"701927","2":"701927"},{"Name":"Zaragoza","0":"Zaragoza","CountryCode":"ESP","1":"ESP","Population":"603367","2":"603367"},{"Name":"M\u00e1laga","0":"M\u00e1laga","CountryCode":"ESP","1":"ESP","Population":"530553","2":"530553"},{"Name":"Bilbao","0":"Bilbao","CountryCode":"ESP","1":"ESP","Population":"357589","2":"357589"},{"Name":"Las Palmas de Gran Canaria","0":"Las Palmas de Gran Canaria","CountryCode":"ESP","1":"ESP","Population":"354757","2":"354757"},{"Name":"Murcia","0":"Murcia","CountryCode":"ESP","1":"ESP","Population":"353504","2":"353504"},{"Name":"Palma de Mallorca","0":"Palma de Mallorca","CountryCode":"ESP","1":"ESP","Population":"326993","2":"326993"},{"Name":"Valladolid","0":"Valladolid","CountryCode":"ESP","1":"ESP","Population":"319998","2":"319998"},{"Name":"C\u00f3rdoba","0":"C\u00f3rdoba","CountryCode":"ESP","1":"ESP","Population":"311708","2":"311708"},{"Name":"Vigo","0":"Vigo","CountryCode":"ESP","1":"ESP","Population":"283670","2":"283670"},{"Name":"Alicante [Alacant]","0":"Alicante [Alacant]","CountryCode":"ESP","1":"ESP","Population":"272432","2":"272432"},{"Name":"Gij\u00f3n","0":"Gij\u00f3n","CountryCode":"ESP","1":"ESP","Population":"267980","2":"267980"},{"Name":"L\u00b4Hospitalet de Llobregat","0":"L\u00b4Hospitalet de Llobregat","CountryCode":"ESP","1":"ESP","Population":"247986","2":"247986"},{"Name":"Granada","0":"Granada","CountryCode":"ESP","1":"ESP","Population":"244767","2":"244767"},{"Name":"A Coru\u00f1a (La Coru\u00f1a)","0":"A Coru\u00f1a (La Coru\u00f1a)","CountryCode":"ESP","1":"ESP","Population":"243402","2":"243402"},{"Name":"Vitoria-Gasteiz","0":"Vitoria-Gasteiz","CountryCode":"ESP","1":"ESP","Population":"217154","2":"217154"},{"Name":"Santa Cruz de Tenerife","0":"Santa Cruz de Tenerife","CountryCode":"ESP","1":"ESP","Population":"213050","2":"213050"},{"Name":"Badalona","0":"Badalona","CountryCode":"ESP","1":"ESP","Population":"209635","2":"209635"},{"Name":"Oviedo","0":"Oviedo","CountryCode":"ESP","1":"ESP","Population":"200453","2":"200453"},{"Name":"M\u00f3stoles","0":"M\u00f3stoles","CountryCode":"ESP","1":"ESP","Population":"195351","2":"195351"},{"Name":"Elche [Elx]","0":"Elche [Elx]","CountryCode":"ESP","1":"ESP","Population":"193174","2":"193174"},{"Name":"Sabadell","0":"Sabadell","CountryCode":"ESP","1":"ESP","Population":"184859","2":"184859"},{"Name":"Santander","0":"Santander","CountryCode":"ESP","1":"ESP","Population":"184165","2":"184165"},{"Name":"Jerez de la Frontera","0":"Jerez de la Frontera","CountryCode":"ESP","1":"ESP","Population":"182660","2":"182660"},{"Name":"Pamplona [Iru\u00f1a]","0":"Pamplona [Iru\u00f1a]","CountryCode":"ESP","1":"ESP","Population":"180483","2":"180483"},{"Name":"Donostia-San Sebasti\u00e1n","0":"Donostia-San Sebasti\u00e1n","CountryCode":"ESP","1":"ESP","Population":"179208","2":"179208"},{"Name":"Cartagena","0":"Cartagena","CountryCode":"ESP","1":"ESP","Population":"177709","2":"177709"},{"Name":"Legan\u00e9s","0":"Legan\u00e9s","CountryCode":"ESP","1":"ESP","Population":"173163","2":"173163"},{"Name":"Fuenlabrada","0":"Fuenlabrada","CountryCode":"ESP","1":"ESP","Population":"171173","2":"171173"},{"Name":"Almer\u00eda","0":"Almer\u00eda","CountryCode":"ESP","1":"ESP","Population":"169027","2":"169027"},{"Name":"Terrassa","0":"Terrassa","CountryCode":"ESP","1":"ESP","Population":"168695","2":"168695"},{"Name":"Alcal\u00e1 de Henares","0":"Alcal\u00e1 de Henares","CountryCode":"ESP","1":"ESP","Population":"164463","2":"164463"},{"Name":"Burgos","0":"Burgos","CountryCode":"ESP","1":"ESP","Population":"162802","2":"162802"},{"Name":"Salamanca","0":"Salamanca","CountryCode":"ESP","1":"ESP","Population":"158720","2":"158720"},{"Name":"Albacete","0":"Albacete","CountryCode":"ESP","1":"ESP","Population":"147527","2":"147527"},{"Name":"Getafe","0":"Getafe","CountryCode":"ESP","1":"ESP","Population":"145371","2":"145371"},{"Name":"C\u00e1diz","0":"C\u00e1diz","CountryCode":"ESP","1":"ESP","Population":"142449","2":"142449"},{"Name":"Alcorc\u00f3n","0":"Alcorc\u00f3n","CountryCode":"ESP","1":"ESP","Population":"142048","2":"142048"},{"Name":"Huelva","0":"Huelva","CountryCode":"ESP","1":"ESP","Population":"140583","2":"140583"},{"Name":"Le\u00f3n","0":"Le\u00f3n","CountryCode":"ESP","1":"ESP","Population":"139809","2":"139809"},{"Name":"Castell\u00f3n de la Plana [Castell","0":"Castell\u00f3n de la Plana [Castell","CountryCode":"ESP","1":"ESP","Population":"139712","2":"139712"},{"Name":"Badajoz","0":"Badajoz","CountryCode":"ESP","1":"ESP","Population":"136613","2":"136613"},{"Name":"[San Crist\u00f3bal de] la Laguna","0":"[San Crist\u00f3bal de] la Laguna","CountryCode":"ESP","1":"ESP","Population":"127945","2":"127945"},{"Name":"Logro\u00f1o","0":"Logro\u00f1o","CountryCode":"ESP","1":"ESP","Population":"127093","2":"127093"},{"Name":"Santa Coloma de Gramenet","0":"Santa Coloma de Gramenet","CountryCode":"ESP","1":"ESP","Population":"120802","2":"120802"},{"Name":"Tarragona","0":"Tarragona","CountryCode":"ESP","1":"ESP","Population":"113016","2":"113016"},{"Name":"Lleida (L\u00e9rida)","0":"Lleida (L\u00e9rida)","CountryCode":"ESP","1":"ESP","Population":"112207","2":"112207"},{"Name":"Ja\u00e9n","0":"Ja\u00e9n","CountryCode":"ESP","1":"ESP","Population":"109247","2":"109247"},{"Name":"Ourense (Orense)","0":"Ourense (Orense)","CountryCode":"ESP","1":"ESP","Population":"109120","2":"109120"},{"Name":"Matar\u00f3","0":"Matar\u00f3","CountryCode":"ESP","1":"ESP","Population":"104095","2":"104095"},{"Name":"Algeciras","0":"Algeciras","CountryCode":"ESP","1":"ESP","Population":"103106","2":"103106"},{"Name":"Marbella","0":"Marbella","CountryCode":"ESP","1":"ESP","Population":"101144","2":"101144"},{"Name":"Barakaldo","0":"Barakaldo","CountryCode":"ESP","1":"ESP","Population":"98212","2":"98212"},{"Name":"Dos Hermanas","0":"Dos Hermanas","CountryCode":"ESP","1":"ESP","Population":"94591","2":"94591"},{"Name":"Santiago de Compostela","0":"Santiago de Compostela","CountryCode":"ESP","1":"ESP","Population":"93745","2":"93745"},{"Name":"Torrej\u00f3n de Ardoz","0":"Torrej\u00f3n de Ardoz","CountryCode":"ESP","1":"ESP","Population":"92262","2":"92262"},{"Name":"Cape Town","0":"Cape Town","CountryCode":"ZAF","1":"ZAF","Population":"2352121","2":"2352121"},{"Name":"Soweto","0":"Soweto","CountryCode":"ZAF","1":"ZAF","Population":"904165","2":"904165"},{"Name":"Johannesburg","0":"Johannesburg","CountryCode":"ZAF","1":"ZAF","Population":"756653","2":"756653"},{"Name":"Port Elizabeth","0":"Port Elizabeth","CountryCode":"ZAF","1":"ZAF","Population":"752319","2":"752319"},{"Name":"Pretoria","0":"Pretoria","CountryCode":"ZAF","1":"ZAF","Population":"658630","2":"658630"},{"Name":"Inanda","0":"Inanda","CountryCode":"ZAF","1":"ZAF","Population":"634065","2":"634065"},{"Name":"Durban","0":"Durban","CountryCode":"ZAF","1":"ZAF","Population":"566120","2":"566120"},{"Name":"Vanderbijlpark","0":"Vanderbijlpark","CountryCode":"ZAF","1":"ZAF","Population":"468931","2":"468931"},{"Name":"Kempton Park","0":"Kempton Park","CountryCode":"ZAF","1":"ZAF","Population":"442633","2":"442633"},{"Name":"Alberton","0":"Alberton","CountryCode":"ZAF","1":"ZAF","Population":"410102","2":"410102"},{"Name":"Pinetown","0":"Pinetown","CountryCode":"ZAF","1":"ZAF","Population":"378810","2":"378810"},{"Name":"Pietermaritzburg","0":"Pietermaritzburg","CountryCode":"ZAF","1":"ZAF","Population":"370190","2":"370190"},{"Name":"Benoni","0":"Benoni","CountryCode":"ZAF","1":"ZAF","Population":"365467","2":"365467"},{"Name":"Randburg","0":"Randburg","CountryCode":"ZAF","1":"ZAF","Population":"341288","2":"341288"},{"Name":"Umlazi","0":"Umlazi","CountryCode":"ZAF","1":"ZAF","Population":"339233","2":"339233"},{"Name":"Bloemfontein","0":"Bloemfontein","CountryCode":"ZAF","1":"ZAF","Population":"334341","2":"334341"},{"Name":"Vereeniging","0":"Vereeniging","CountryCode":"ZAF","1":"ZAF","Population":"328535","2":"328535"},{"Name":"Wonderboom","0":"Wonderboom","CountryCode":"ZAF","1":"ZAF","Population":"283289","2":"283289"},{"Name":"Roodepoort","0":"Roodepoort","CountryCode":"ZAF","1":"ZAF","Population":"279340","2":"279340"},{"Name":"Boksburg","0":"Boksburg","CountryCode":"ZAF","1":"ZAF","Population":"262648","2":"262648"},{"Name":"Klerksdorp","0":"Klerksdorp","CountryCode":"ZAF","1":"ZAF","Population":"261911","2":"261911"},{"Name":"Soshanguve","0":"Soshanguve","CountryCode":"ZAF","1":"ZAF","Population":"242727","2":"242727"},{"Name":"Newcastle","0":"Newcastle","CountryCode":"ZAF","1":"ZAF","Population":"222993","2":"222993"},{"Name":"East London","0":"East London","CountryCode":"ZAF","1":"ZAF","Population":"221047","2":"221047"},{"Name":"Welkom","0":"Welkom","CountryCode":"ZAF","1":"ZAF","Population":"203296","2":"203296"},{"Name":"Kimberley","0":"Kimberley","CountryCode":"ZAF","1":"ZAF","Population":"197254","2":"197254"},{"Name":"Uitenhage","0":"Uitenhage","CountryCode":"ZAF","1":"ZAF","Population":"192120","2":"192120"},{"Name":"Chatsworth","0":"Chatsworth","CountryCode":"ZAF","1":"ZAF","Population":"189885","2":"189885"},{"Name":"Mdantsane","0":"Mdantsane","CountryCode":"ZAF","1":"ZAF","Population":"182639","2":"182639"},{"Name":"Krugersdorp","0":"Krugersdorp","CountryCode":"ZAF","1":"ZAF","Population":"181503","2":"181503"},{"Name":"Botshabelo","0":"Botshabelo","CountryCode":"ZAF","1":"ZAF","Population":"177971","2":"177971"},{"Name":"Brakpan","0":"Brakpan","CountryCode":"ZAF","1":"ZAF","Population":"171363","2":"171363"},{"Name":"Witbank","0":"Witbank","CountryCode":"ZAF","1":"ZAF","Population":"167183","2":"167183"},{"Name":"Oberholzer","0":"Oberholzer","CountryCode":"ZAF","1":"ZAF","Population":"164367","2":"164367"},{"Name":"Germiston","0":"Germiston","CountryCode":"ZAF","1":"ZAF","Population":"164252","2":"164252"},{"Name":"Springs","0":"Springs","CountryCode":"ZAF","1":"ZAF","Population":"162072","2":"162072"},{"Name":"Westonaria","0":"Westonaria","CountryCode":"ZAF","1":"ZAF","Population":"159632","2":"159632"},{"Name":"Randfontein","0":"Randfontein","CountryCode":"ZAF","1":"ZAF","Population":"120838","2":"120838"},{"Name":"Paarl","0":"Paarl","CountryCode":"ZAF","1":"ZAF","Population":"105768","2":"105768"},{"Name":"Potchefstroom","0":"Potchefstroom","CountryCode":"ZAF","1":"ZAF","Population":"101817","2":"101817"},{"Name":"Rustenburg","0":"Rustenburg","CountryCode":"ZAF","1":"ZAF","Population":"97008","2":"97008"},{"Name":"Nigel","0":"Nigel","CountryCode":"ZAF","1":"ZAF","Population":"96734","2":"96734"},{"Name":"George","0":"George","CountryCode":"ZAF","1":"ZAF","Population":"93818","2":"93818"},{"Name":"Ladysmith","0":"Ladysmith","CountryCode":"ZAF","1":"ZAF","Population":"89292","2":"89292"},{"Name":"Addis Abeba","0":"Addis Abeba","CountryCode":"ETH","1":"ETH","Population":"2495000","2":"2495000"},{"Name":"Dire Dawa","0":"Dire Dawa","CountryCode":"ETH","1":"ETH","Population":"164851","2":"164851"},{"Name":"Nazret","0":"Nazret","CountryCode":"ETH","1":"ETH","Population":"127842","2":"127842"},{"Name":"Gonder","0":"Gonder","CountryCode":"ETH","1":"ETH","Population":"112249","2":"112249"},{"Name":"Dese","0":"Dese","CountryCode":"ETH","1":"ETH","Population":"97314","2":"97314"},{"Name":"Mekele","0":"Mekele","CountryCode":"ETH","1":"ETH","Population":"96938","2":"96938"},{"Name":"Bahir Dar","0":"Bahir Dar","CountryCode":"ETH","1":"ETH","Population":"96140","2":"96140"},{"Name":"Stanley","0":"Stanley","CountryCode":"FLK","1":"FLK","Population":"1636","2":"1636"},{"Name":"Suva","0":"Suva","CountryCode":"FJI","1":"FJI","Population":"77366","2":"77366"},{"Name":"Quezon","0":"Quezon","CountryCode":"PHL","1":"PHL","Population":"2173831","2":"2173831"},{"Name":"Manila","0":"Manila","CountryCode":"PHL","1":"PHL","Population":"1581082","2":"1581082"},{"Name":"Kalookan","0":"Kalookan","CountryCode":"PHL","1":"PHL","Population":"1177604","2":"1177604"},{"Name":"Davao","0":"Davao","CountryCode":"PHL","1":"PHL","Population":"1147116","2":"1147116"},{"Name":"Cebu","0":"Cebu","CountryCode":"PHL","1":"PHL","Population":"718821","2":"718821"},{"Name":"Zamboanga","0":"Zamboanga","CountryCode":"PHL","1":"PHL","Population":"601794","2":"601794"},{"Name":"Pasig","0":"Pasig","CountryCode":"PHL","1":"PHL","Population":"505058","2":"505058"},{"Name":"Valenzuela","0":"Valenzuela","CountryCode":"PHL","1":"PHL","Population":"485433","2":"485433"},{"Name":"Las Pi\u00f1as","0":"Las Pi\u00f1as","CountryCode":"PHL","1":"PHL","Population":"472780","2":"472780"},{"Name":"Antipolo","0":"Antipolo","CountryCode":"PHL","1":"PHL","Population":"470866","2":"470866"},{"Name":"Taguig","0":"Taguig","CountryCode":"PHL","1":"PHL","Population":"467375","2":"467375"},{"Name":"Cagayan de Oro","0":"Cagayan de Oro","CountryCode":"PHL","1":"PHL","Population":"461877","2":"461877"},{"Name":"Para\u00f1aque","0":"Para\u00f1aque","CountryCode":"PHL","1":"PHL","Population":"449811","2":"449811"},{"Name":"Makati","0":"Makati","CountryCode":"PHL","1":"PHL","Population":"444867","2":"444867"},{"Name":"Bacolod","0":"Bacolod","CountryCode":"PHL","1":"PHL","Population":"429076","2":"429076"},{"Name":"General Santos","0":"General Santos","CountryCode":"PHL","1":"PHL","Population":"411822","2":"411822"},{"Name":"Marikina","0":"Marikina","CountryCode":"PHL","1":"PHL","Population":"391170","2":"391170"},{"Name":"Dasmari\u00f1as","0":"Dasmari\u00f1as","CountryCode":"PHL","1":"PHL","Population":"379520","2":"379520"},{"Name":"Muntinlupa","0":"Muntinlupa","CountryCode":"PHL","1":"PHL","Population":"379310","2":"379310"},{"Name":"Iloilo","0":"Iloilo","CountryCode":"PHL","1":"PHL","Population":"365820","2":"365820"},{"Name":"Pasay","0":"Pasay","CountryCode":"PHL","1":"PHL","Population":"354908","2":"354908"},{"Name":"Malabon","0":"Malabon","CountryCode":"PHL","1":"PHL","Population":"338855","2":"338855"},{"Name":"San Jos\u00e9 del Monte","0":"San Jos\u00e9 del Monte","CountryCode":"PHL","1":"PHL","Population":"315807","2":"315807"},{"Name":"Bacoor","0":"Bacoor","CountryCode":"PHL","1":"PHL","Population":"305699","2":"305699"},{"Name":"Iligan","0":"Iligan","CountryCode":"PHL","1":"PHL","Population":"285061","2":"285061"},{"Name":"Calamba","0":"Calamba","CountryCode":"PHL","1":"PHL","Population":"281146","2":"281146"},{"Name":"Mandaluyong","0":"Mandaluyong","CountryCode":"PHL","1":"PHL","Population":"278474","2":"278474"},{"Name":"Butuan","0":"Butuan","CountryCode":"PHL","1":"PHL","Population":"267279","2":"267279"},{"Name":"Angeles","0":"Angeles","CountryCode":"PHL","1":"PHL","Population":"263971","2":"263971"},{"Name":"Tarlac","0":"Tarlac","CountryCode":"PHL","1":"PHL","Population":"262481","2":"262481"},{"Name":"Mandaue","0":"Mandaue","CountryCode":"PHL","1":"PHL","Population":"259728","2":"259728"},{"Name":"Baguio","0":"Baguio","CountryCode":"PHL","1":"PHL","Population":"252386","2":"252386"},{"Name":"Batangas","0":"Batangas","CountryCode":"PHL","1":"PHL","Population":"247588","2":"247588"},{"Name":"Cainta","0":"Cainta","CountryCode":"PHL","1":"PHL","Population":"242511","2":"242511"},{"Name":"San Pedro","0":"San Pedro","CountryCode":"PHL","1":"PHL","Population":"231403","2":"231403"},{"Name":"Navotas","0":"Navotas","CountryCode":"PHL","1":"PHL","Population":"230403","2":"230403"},{"Name":"Cabanatuan","0":"Cabanatuan","CountryCode":"PHL","1":"PHL","Population":"222859","2":"222859"},{"Name":"San Fernando","0":"San Fernando","CountryCode":"PHL","1":"PHL","Population":"221857","2":"221857"},{"Name":"Lipa","0":"Lipa","CountryCode":"PHL","1":"PHL","Population":"218447","2":"218447"},{"Name":"Lapu-Lapu","0":"Lapu-Lapu","CountryCode":"PHL","1":"PHL","Population":"217019","2":"217019"},{"Name":"San Pablo","0":"San Pablo","CountryCode":"PHL","1":"PHL","Population":"207927","2":"207927"},{"Name":"Bi\u00f1an","0":"Bi\u00f1an","CountryCode":"PHL","1":"PHL","Population":"201186","2":"201186"},{"Name":"Taytay","0":"Taytay","CountryCode":"PHL","1":"PHL","Population":"198183","2":"198183"},{"Name":"Lucena","0":"Lucena","CountryCode":"PHL","1":"PHL","Population":"196075","2":"196075"},{"Name":"Imus","0":"Imus","CountryCode":"PHL","1":"PHL","Population":"195482","2":"195482"},{"Name":"Olongapo","0":"Olongapo","CountryCode":"PHL","1":"PHL","Population":"194260","2":"194260"},{"Name":"Binangonan","0":"Binangonan","CountryCode":"PHL","1":"PHL","Population":"187691","2":"187691"},{"Name":"Santa Rosa","0":"Santa Rosa","CountryCode":"PHL","1":"PHL","Population":"185633","2":"185633"},{"Name":"Tagum","0":"Tagum","CountryCode":"PHL","1":"PHL","Population":"179531","2":"179531"},{"Name":"Tacloban","0":"Tacloban","CountryCode":"PHL","1":"PHL","Population":"178639","2":"178639"},{"Name":"Malolos","0":"Malolos","CountryCode":"PHL","1":"PHL","Population":"175291","2":"175291"},{"Name":"Mabalacat","0":"Mabalacat","CountryCode":"PHL","1":"PHL","Population":"171045","2":"171045"},{"Name":"Cotabato","0":"Cotabato","CountryCode":"PHL","1":"PHL","Population":"163849","2":"163849"},{"Name":"Meycauayan","0":"Meycauayan","CountryCode":"PHL","1":"PHL","Population":"163037","2":"163037"},{"Name":"Puerto Princesa","0":"Puerto Princesa","CountryCode":"PHL","1":"PHL","Population":"161912","2":"161912"},{"Name":"Legazpi","0":"Legazpi","CountryCode":"PHL","1":"PHL","Population":"157010","2":"157010"},{"Name":"Silang","0":"Silang","CountryCode":"PHL","1":"PHL","Population":"156137","2":"156137"},{"Name":"Ormoc","0":"Ormoc","CountryCode":"PHL","1":"PHL","Population":"154297","2":"154297"},{"Name":"San Carlos","0":"San Carlos","CountryCode":"PHL","1":"PHL","Population":"154264","2":"154264"},{"Name":"Kabankalan","0":"Kabankalan","CountryCode":"PHL","1":"PHL","Population":"149769","2":"149769"},{"Name":"Talisay","0":"Talisay","CountryCode":"PHL","1":"PHL","Population":"148110","2":"148110"},{"Name":"Valencia","0":"Valencia","CountryCode":"PHL","1":"PHL","Population":"147924","2":"147924"},{"Name":"Calbayog","0":"Calbayog","CountryCode":"PHL","1":"PHL","Population":"147187","2":"147187"},{"Name":"Santa Maria","0":"Santa Maria","CountryCode":"PHL","1":"PHL","Population":"144282","2":"144282"},{"Name":"Pagadian","0":"Pagadian","CountryCode":"PHL","1":"PHL","Population":"142515","2":"142515"},{"Name":"Cadiz","0":"Cadiz","CountryCode":"PHL","1":"PHL","Population":"141954","2":"141954"},{"Name":"Bago","0":"Bago","CountryCode":"PHL","1":"PHL","Population":"141721","2":"141721"},{"Name":"Toledo","0":"Toledo","CountryCode":"PHL","1":"PHL","Population":"141174","2":"141174"},{"Name":"Naga","0":"Naga","CountryCode":"PHL","1":"PHL","Population":"137810","2":"137810"},{"Name":"San Mateo","0":"San Mateo","CountryCode":"PHL","1":"PHL","Population":"135603","2":"135603"},{"Name":"Panabo","0":"Panabo","CountryCode":"PHL","1":"PHL","Population":"133950","2":"133950"},{"Name":"Koronadal","0":"Koronadal","CountryCode":"PHL","1":"PHL","Population":"133786","2":"133786"},{"Name":"Marawi","0":"Marawi","CountryCode":"PHL","1":"PHL","Population":"131090","2":"131090"},{"Name":"Dagupan","0":"Dagupan","CountryCode":"PHL","1":"PHL","Population":"130328","2":"130328"},{"Name":"Sagay","0":"Sagay","CountryCode":"PHL","1":"PHL","Population":"129765","2":"129765"},{"Name":"Roxas","0":"Roxas","CountryCode":"PHL","1":"PHL","Population":"126352","2":"126352"},{"Name":"Lubao","0":"Lubao","CountryCode":"PHL","1":"PHL","Population":"125699","2":"125699"},{"Name":"Digos","0":"Digos","CountryCode":"PHL","1":"PHL","Population":"125171","2":"125171"},{"Name":"San Miguel","0":"San Miguel","CountryCode":"PHL","1":"PHL","Population":"123824","2":"123824"},{"Name":"Malaybalay","0":"Malaybalay","CountryCode":"PHL","1":"PHL","Population":"123672","2":"123672"},{"Name":"Tuguegarao","0":"Tuguegarao","CountryCode":"PHL","1":"PHL","Population":"120645","2":"120645"},{"Name":"Ilagan","0":"Ilagan","CountryCode":"PHL","1":"PHL","Population":"119990","2":"119990"},{"Name":"Baliuag","0":"Baliuag","CountryCode":"PHL","1":"PHL","Population":"119675","2":"119675"},{"Name":"Surigao","0":"Surigao","CountryCode":"PHL","1":"PHL","Population":"118534","2":"118534"},{"Name":"San Carlos","0":"San Carlos","CountryCode":"PHL","1":"PHL","Population":"118259","2":"118259"},{"Name":"San Juan del Monte","0":"San Juan del Monte","CountryCode":"PHL","1":"PHL","Population":"117680","2":"117680"},{"Name":"Tanauan","0":"Tanauan","CountryCode":"PHL","1":"PHL","Population":"117539","2":"117539"},{"Name":"Concepcion","0":"Concepcion","CountryCode":"PHL","1":"PHL","Population":"115171","2":"115171"},{"Name":"Rodriguez (Montalban)","0":"Rodriguez (Montalban)","CountryCode":"PHL","1":"PHL","Population":"115167","2":"115167"},{"Name":"Sariaya","0":"Sariaya","CountryCode":"PHL","1":"PHL","Population":"114568","2":"114568"},{"Name":"Malasiqui","0":"Malasiqui","CountryCode":"PHL","1":"PHL","Population":"113190","2":"113190"},{"Name":"General Mariano Alvarez","0":"General Mariano Alvarez","CountryCode":"PHL","1":"PHL","Population":"112446","2":"112446"},{"Name":"Urdaneta","0":"Urdaneta","CountryCode":"PHL","1":"PHL","Population":"111582","2":"111582"},{"Name":"Hagonoy","0":"Hagonoy","CountryCode":"PHL","1":"PHL","Population":"111425","2":"111425"},{"Name":"San Jose","0":"San Jose","CountryCode":"PHL","1":"PHL","Population":"111009","2":"111009"},{"Name":"Polomolok","0":"Polomolok","CountryCode":"PHL","1":"PHL","Population":"110709","2":"110709"},{"Name":"Santiago","0":"Santiago","CountryCode":"PHL","1":"PHL","Population":"110531","2":"110531"},{"Name":"Tanza","0":"Tanza","CountryCode":"PHL","1":"PHL","Population":"110517","2":"110517"},{"Name":"Ozamis","0":"Ozamis","CountryCode":"PHL","1":"PHL","Population":"110420","2":"110420"},{"Name":"Mexico","0":"Mexico","CountryCode":"PHL","1":"PHL","Population":"109481","2":"109481"},{"Name":"San Jose","0":"San Jose","CountryCode":"PHL","1":"PHL","Population":"108254","2":"108254"},{"Name":"Silay","0":"Silay","CountryCode":"PHL","1":"PHL","Population":"107722","2":"107722"},{"Name":"General Trias","0":"General Trias","CountryCode":"PHL","1":"PHL","Population":"107691","2":"107691"},{"Name":"Tabaco","0":"Tabaco","CountryCode":"PHL","1":"PHL","Population":"107166","2":"107166"},{"Name":"Cabuyao","0":"Cabuyao","CountryCode":"PHL","1":"PHL","Population":"106630","2":"106630"},{"Name":"Calapan","0":"Calapan","CountryCode":"PHL","1":"PHL","Population":"105910","2":"105910"},{"Name":"Mati","0":"Mati","CountryCode":"PHL","1":"PHL","Population":"105908","2":"105908"},{"Name":"Midsayap","0":"Midsayap","CountryCode":"PHL","1":"PHL","Population":"105760","2":"105760"},{"Name":"Cauayan","0":"Cauayan","CountryCode":"PHL","1":"PHL","Population":"103952","2":"103952"},{"Name":"Gingoog","0":"Gingoog","CountryCode":"PHL","1":"PHL","Population":"102379","2":"102379"},{"Name":"Dumaguete","0":"Dumaguete","CountryCode":"PHL","1":"PHL","Population":"102265","2":"102265"},{"Name":"San Fernando","0":"San Fernando","CountryCode":"PHL","1":"PHL","Population":"102082","2":"102082"},{"Name":"Arayat","0":"Arayat","CountryCode":"PHL","1":"PHL","Population":"101792","2":"101792"},{"Name":"Bayawan (Tulong)","0":"Bayawan (Tulong)","CountryCode":"PHL","1":"PHL","Population":"101391","2":"101391"},{"Name":"Kidapawan","0":"Kidapawan","CountryCode":"PHL","1":"PHL","Population":"101205","2":"101205"},{"Name":"Daraga (Locsin)","0":"Daraga (Locsin)","CountryCode":"PHL","1":"PHL","Population":"101031","2":"101031"},{"Name":"Marilao","0":"Marilao","CountryCode":"PHL","1":"PHL","Population":"101017","2":"101017"},{"Name":"Malita","0":"Malita","CountryCode":"PHL","1":"PHL","Population":"100000","2":"100000"},{"Name":"Dipolog","0":"Dipolog","CountryCode":"PHL","1":"PHL","Population":"99862","2":"99862"},{"Name":"Cavite","0":"Cavite","CountryCode":"PHL","1":"PHL","Population":"99367","2":"99367"},{"Name":"Danao","0":"Danao","CountryCode":"PHL","1":"PHL","Population":"98781","2":"98781"},{"Name":"Bislig","0":"Bislig","CountryCode":"PHL","1":"PHL","Population":"97860","2":"97860"},{"Name":"Talavera","0":"Talavera","CountryCode":"PHL","1":"PHL","Population":"97329","2":"97329"},{"Name":"Guagua","0":"Guagua","CountryCode":"PHL","1":"PHL","Population":"96858","2":"96858"},{"Name":"Bayambang","0":"Bayambang","CountryCode":"PHL","1":"PHL","Population":"96609","2":"96609"},{"Name":"Nasugbu","0":"Nasugbu","CountryCode":"PHL","1":"PHL","Population":"96113","2":"96113"},{"Name":"Baybay","0":"Baybay","CountryCode":"PHL","1":"PHL","Population":"95630","2":"95630"},{"Name":"Capas","0":"Capas","CountryCode":"PHL","1":"PHL","Population":"95219","2":"95219"},{"Name":"Sultan Kudarat","0":"Sultan Kudarat","CountryCode":"PHL","1":"PHL","Population":"94861","2":"94861"},{"Name":"Laoag","0":"Laoag","CountryCode":"PHL","1":"PHL","Population":"94466","2":"94466"},{"Name":"Bayugan","0":"Bayugan","CountryCode":"PHL","1":"PHL","Population":"93623","2":"93623"},{"Name":"Malungon","0":"Malungon","CountryCode":"PHL","1":"PHL","Population":"93232","2":"93232"},{"Name":"Santa Cruz","0":"Santa Cruz","CountryCode":"PHL","1":"PHL","Population":"92694","2":"92694"},{"Name":"Sorsogon","0":"Sorsogon","CountryCode":"PHL","1":"PHL","Population":"92512","2":"92512"},{"Name":"Candelaria","0":"Candelaria","CountryCode":"PHL","1":"PHL","Population":"92429","2":"92429"},{"Name":"Ligao","0":"Ligao","CountryCode":"PHL","1":"PHL","Population":"90603","2":"90603"},{"Name":"T\u00f3rshavn","0":"T\u00f3rshavn","CountryCode":"FRO","1":"FRO","Population":"14542","2":"14542"},{"Name":"Libreville","0":"Libreville","CountryCode":"GAB","1":"GAB","Population":"419000","2":"419000"},{"Name":"Serekunda","0":"Serekunda","CountryCode":"GMB","1":"GMB","Population":"102600","2":"102600"},{"Name":"Banjul","0":"Banjul","CountryCode":"GMB","1":"GMB","Population":"42326","2":"42326"},{"Name":"Tbilisi","0":"Tbilisi","CountryCode":"GEO","1":"GEO","Population":"1235200","2":"1235200"},{"Name":"Kutaisi","0":"Kutaisi","CountryCode":"GEO","1":"GEO","Population":"240900","2":"240900"},{"Name":"Rustavi","0":"Rustavi","CountryCode":"GEO","1":"GEO","Population":"155400","2":"155400"},{"Name":"Batumi","0":"Batumi","CountryCode":"GEO","1":"GEO","Population":"137700","2":"137700"},{"Name":"Sohumi","0":"Sohumi","CountryCode":"GEO","1":"GEO","Population":"111700","2":"111700"},{"Name":"Accra","0":"Accra","CountryCode":"GHA","1":"GHA","Population":"1070000","2":"1070000"},{"Name":"Kumasi","0":"Kumasi","CountryCode":"GHA","1":"GHA","Population":"385192","2":"385192"},{"Name":"Tamale","0":"Tamale","CountryCode":"GHA","1":"GHA","Population":"151069","2":"151069"},{"Name":"Tema","0":"Tema","CountryCode":"GHA","1":"GHA","Population":"109975","2":"109975"},{"Name":"Sekondi-Takoradi","0":"Sekondi-Takoradi","CountryCode":"GHA","1":"GHA","Population":"103653","2":"103653"},{"Name":"Gibraltar","0":"Gibraltar","CountryCode":"GIB","1":"GIB","Population":"27025","2":"27025"},{"Name":"Saint George\u00b4s","0":"Saint George\u00b4s","CountryCode":"GRD","1":"GRD","Population":"4621","2":"4621"},{"Name":"Nuuk","0":"Nuuk","CountryCode":"GRL","1":"GRL","Population":"13445","2":"13445"},{"Name":"Les Abymes","0":"Les Abymes","CountryCode":"GLP","1":"GLP","Population":"62947","2":"62947"},{"Name":"Basse-Terre","0":"Basse-Terre","CountryCode":"GLP","1":"GLP","Population":"12433","2":"12433"},{"Name":"Tamuning","0":"Tamuning","CountryCode":"GUM","1":"GUM","Population":"9500","2":"9500"},{"Name":"Aga\u00f1a","0":"Aga\u00f1a","CountryCode":"GUM","1":"GUM","Population":"1139","2":"1139"},{"Name":"Ciudad de Guatemala","0":"Ciudad de Guatemala","CountryCode":"GTM","1":"GTM","Population":"823301","2":"823301"},{"Name":"Mixco","0":"Mixco","CountryCode":"GTM","1":"GTM","Population":"209791","2":"209791"},{"Name":"Villa Nueva","0":"Villa Nueva","CountryCode":"GTM","1":"GTM","Population":"101295","2":"101295"},{"Name":"Quetzaltenango","0":"Quetzaltenango","CountryCode":"GTM","1":"GTM","Population":"90801","2":"90801"},{"Name":"Conakry","0":"Conakry","CountryCode":"GIN","1":"GIN","Population":"1090610","2":"1090610"},{"Name":"Bissau","0":"Bissau","CountryCode":"GNB","1":"GNB","Population":"241000","2":"241000"},{"Name":"Georgetown","0":"Georgetown","CountryCode":"GUY","1":"GUY","Population":"254000","2":"254000"},{"Name":"Port-au-Prince","0":"Port-au-Prince","CountryCode":"HTI","1":"HTI","Population":"884472","2":"884472"},{"Name":"Carrefour","0":"Carrefour","CountryCode":"HTI","1":"HTI","Population":"290204","2":"290204"},{"Name":"Delmas","0":"Delmas","CountryCode":"HTI","1":"HTI","Population":"240429","2":"240429"},{"Name":"Le-Cap-Ha\u00eftien","0":"Le-Cap-Ha\u00eftien","CountryCode":"HTI","1":"HTI","Population":"102233","2":"102233"},{"Name":"Tegucigalpa","0":"Tegucigalpa","CountryCode":"HND","1":"HND","Population":"813900","2":"813900"},{"Name":"San Pedro Sula","0":"San Pedro Sula","CountryCode":"HND","1":"HND","Population":"383900","2":"383900"},{"Name":"La Ceiba","0":"La Ceiba","CountryCode":"HND","1":"HND","Population":"89200","2":"89200"},{"Name":"Kowloon and New Kowloon","0":"Kowloon and New Kowloon","CountryCode":"HKG","1":"HKG","Population":"1987996","2":"1987996"},{"Name":"Victoria","0":"Victoria","CountryCode":"HKG","1":"HKG","Population":"1312637","2":"1312637"},{"Name":"Longyearbyen","0":"Longyearbyen","CountryCode":"SJM","1":"SJM","Population":"1438","2":"1438"},{"Name":"Jakarta","0":"Jakarta","CountryCode":"IDN","1":"IDN","Population":"9604900","2":"9604900"},{"Name":"Surabaya","0":"Surabaya","CountryCode":"IDN","1":"IDN","Population":"2663820","2":"2663820"},{"Name":"Bandung","0":"Bandung","CountryCode":"IDN","1":"IDN","Population":"2429000","2":"2429000"},{"Name":"Medan","0":"Medan","CountryCode":"IDN","1":"IDN","Population":"1843919","2":"1843919"},{"Name":"Palembang","0":"Palembang","CountryCode":"IDN","1":"IDN","Population":"1222764","2":"1222764"},{"Name":"Tangerang","0":"Tangerang","CountryCode":"IDN","1":"IDN","Population":"1198300","2":"1198300"},{"Name":"Semarang","0":"Semarang","CountryCode":"IDN","1":"IDN","Population":"1104405","2":"1104405"},{"Name":"Ujung Pandang","0":"Ujung Pandang","CountryCode":"IDN","1":"IDN","Population":"1060257","2":"1060257"},{"Name":"Malang","0":"Malang","CountryCode":"IDN","1":"IDN","Population":"716862","2":"716862"},{"Name":"Bandar Lampung","0":"Bandar Lampung","CountryCode":"IDN","1":"IDN","Population":"680332","2":"680332"},{"Name":"Bekasi","0":"Bekasi","CountryCode":"IDN","1":"IDN","Population":"644300","2":"644300"},{"Name":"Padang","0":"Padang","CountryCode":"IDN","1":"IDN","Population":"534474","2":"534474"},{"Name":"Surakarta","0":"Surakarta","CountryCode":"IDN","1":"IDN","Population":"518600","2":"518600"},{"Name":"Banjarmasin","0":"Banjarmasin","CountryCode":"IDN","1":"IDN","Population":"482931","2":"482931"},{"Name":"Pekan Baru","0":"Pekan Baru","CountryCode":"IDN","1":"IDN","Population":"438638","2":"438638"},{"Name":"Denpasar","0":"Denpasar","CountryCode":"IDN","1":"IDN","Population":"435000","2":"435000"},{"Name":"Yogyakarta","0":"Yogyakarta","CountryCode":"IDN","1":"IDN","Population":"418944","2":"418944"},{"Name":"Pontianak","0":"Pontianak","CountryCode":"IDN","1":"IDN","Population":"409632","2":"409632"},{"Name":"Samarinda","0":"Samarinda","CountryCode":"IDN","1":"IDN","Population":"399175","2":"399175"},{"Name":"Jambi","0":"Jambi","CountryCode":"IDN","1":"IDN","Population":"385201","2":"385201"},{"Name":"Depok","0":"Depok","CountryCode":"IDN","1":"IDN","Population":"365200","2":"365200"},{"Name":"Cimahi","0":"Cimahi","CountryCode":"IDN","1":"IDN","Population":"344600","2":"344600"},{"Name":"Balikpapan","0":"Balikpapan","CountryCode":"IDN","1":"IDN","Population":"338752","2":"338752"},{"Name":"Manado","0":"Manado","CountryCode":"IDN","1":"IDN","Population":"332288","2":"332288"},{"Name":"Mataram","0":"Mataram","CountryCode":"IDN","1":"IDN","Population":"306600","2":"306600"},{"Name":"Pekalongan","0":"Pekalongan","CountryCode":"IDN","1":"IDN","Population":"301504","2":"301504"},{"Name":"Tegal","0":"Tegal","CountryCode":"IDN","1":"IDN","Population":"289744","2":"289744"},{"Name":"Bogor","0":"Bogor","CountryCode":"IDN","1":"IDN","Population":"285114","2":"285114"},{"Name":"Ciputat","0":"Ciputat","CountryCode":"IDN","1":"IDN","Population":"270800","2":"270800"},{"Name":"Pondokgede","0":"Pondokgede","CountryCode":"IDN","1":"IDN","Population":"263200","2":"263200"},{"Name":"Cirebon","0":"Cirebon","CountryCode":"IDN","1":"IDN","Population":"254406","2":"254406"},{"Name":"Kediri","0":"Kediri","CountryCode":"IDN","1":"IDN","Population":"253760","2":"253760"},{"Name":"Ambon","0":"Ambon","CountryCode":"IDN","1":"IDN","Population":"249312","2":"249312"},{"Name":"Jember","0":"Jember","CountryCode":"IDN","1":"IDN","Population":"218500","2":"218500"},{"Name":"Cilacap","0":"Cilacap","CountryCode":"IDN","1":"IDN","Population":"206900","2":"206900"},{"Name":"Cimanggis","0":"Cimanggis","CountryCode":"IDN","1":"IDN","Population":"205100","2":"205100"},{"Name":"Pematang Siantar","0":"Pematang Siantar","CountryCode":"IDN","1":"IDN","Population":"203056","2":"203056"},{"Name":"Purwokerto","0":"Purwokerto","CountryCode":"IDN","1":"IDN","Population":"202500","2":"202500"},{"Name":"Ciomas","0":"Ciomas","CountryCode":"IDN","1":"IDN","Population":"187400","2":"187400"},{"Name":"Tasikmalaya","0":"Tasikmalaya","CountryCode":"IDN","1":"IDN","Population":"179800","2":"179800"},{"Name":"Madiun","0":"Madiun","CountryCode":"IDN","1":"IDN","Population":"171532","2":"171532"},{"Name":"Bengkulu","0":"Bengkulu","CountryCode":"IDN","1":"IDN","Population":"146439","2":"146439"},{"Name":"Karawang","0":"Karawang","CountryCode":"IDN","1":"IDN","Population":"145000","2":"145000"},{"Name":"Banda Aceh","0":"Banda Aceh","CountryCode":"IDN","1":"IDN","Population":"143409","2":"143409"},{"Name":"Palu","0":"Palu","CountryCode":"IDN","1":"IDN","Population":"142800","2":"142800"},{"Name":"Pasuruan","0":"Pasuruan","CountryCode":"IDN","1":"IDN","Population":"134019","2":"134019"},{"Name":"Kupang","0":"Kupang","CountryCode":"IDN","1":"IDN","Population":"129300","2":"129300"},{"Name":"Tebing Tinggi","0":"Tebing Tinggi","CountryCode":"IDN","1":"IDN","Population":"129300","2":"129300"},{"Name":"Percut Sei Tuan","0":"Percut Sei Tuan","CountryCode":"IDN","1":"IDN","Population":"129000","2":"129000"},{"Name":"Binjai","0":"Binjai","CountryCode":"IDN","1":"IDN","Population":"127222","2":"127222"},{"Name":"Sukabumi","0":"Sukabumi","CountryCode":"IDN","1":"IDN","Population":"125766","2":"125766"},{"Name":"Waru","0":"Waru","CountryCode":"IDN","1":"IDN","Population":"124300","2":"124300"},{"Name":"Pangkal Pinang","0":"Pangkal Pinang","CountryCode":"IDN","1":"IDN","Population":"124000","2":"124000"},{"Name":"Magelang","0":"Magelang","CountryCode":"IDN","1":"IDN","Population":"123800","2":"123800"},{"Name":"Blitar","0":"Blitar","CountryCode":"IDN","1":"IDN","Population":"122600","2":"122600"},{"Name":"Serang","0":"Serang","CountryCode":"IDN","1":"IDN","Population":"122400","2":"122400"},{"Name":"Probolinggo","0":"Probolinggo","CountryCode":"IDN","1":"IDN","Population":"120770","2":"120770"},{"Name":"Cilegon","0":"Cilegon","CountryCode":"IDN","1":"IDN","Population":"117000","2":"117000"},{"Name":"Cianjur","0":"Cianjur","CountryCode":"IDN","1":"IDN","Population":"114300","2":"114300"},{"Name":"Ciparay","0":"Ciparay","CountryCode":"IDN","1":"IDN","Population":"111500","2":"111500"},{"Name":"Lhokseumawe","0":"Lhokseumawe","CountryCode":"IDN","1":"IDN","Population":"109600","2":"109600"},{"Name":"Taman","0":"Taman","CountryCode":"IDN","1":"IDN","Population":"107000","2":"107000"},{"Name":"Depok","0":"Depok","CountryCode":"IDN","1":"IDN","Population":"106800","2":"106800"},{"Name":"Citeureup","0":"Citeureup","CountryCode":"IDN","1":"IDN","Population":"105100","2":"105100"},{"Name":"Pemalang","0":"Pemalang","CountryCode":"IDN","1":"IDN","Population":"103500","2":"103500"},{"Name":"Klaten","0":"Klaten","CountryCode":"IDN","1":"IDN","Population":"103300","2":"103300"},{"Name":"Salatiga","0":"Salatiga","CountryCode":"IDN","1":"IDN","Population":"103000","2":"103000"},{"Name":"Cibinong","0":"Cibinong","CountryCode":"IDN","1":"IDN","Population":"101300","2":"101300"},{"Name":"Palangka Raya","0":"Palangka Raya","CountryCode":"IDN","1":"IDN","Population":"99693","2":"99693"},{"Name":"Mojokerto","0":"Mojokerto","CountryCode":"IDN","1":"IDN","Population":"96626","2":"96626"},{"Name":"Purwakarta","0":"Purwakarta","CountryCode":"IDN","1":"IDN","Population":"95900","2":"95900"},{"Name":"Garut","0":"Garut","CountryCode":"IDN","1":"IDN","Population":"95800","2":"95800"},{"Name":"Kudus","0":"Kudus","CountryCode":"IDN","1":"IDN","Population":"95300","2":"95300"},{"Name":"Kendari","0":"Kendari","CountryCode":"IDN","1":"IDN","Population":"94800","2":"94800"},{"Name":"Jaya Pura","0":"Jaya Pura","CountryCode":"IDN","1":"IDN","Population":"94700","2":"94700"},{"Name":"Gorontalo","0":"Gorontalo","CountryCode":"IDN","1":"IDN","Population":"94058","2":"94058"},{"Name":"Majalaya","0":"Majalaya","CountryCode":"IDN","1":"IDN","Population":"93200","2":"93200"},{"Name":"Pondok Aren","0":"Pondok Aren","CountryCode":"IDN","1":"IDN","Population":"92700","2":"92700"},{"Name":"Jombang","0":"Jombang","CountryCode":"IDN","1":"IDN","Population":"92600","2":"92600"},{"Name":"Sunggal","0":"Sunggal","CountryCode":"IDN","1":"IDN","Population":"92300","2":"92300"},{"Name":"Batam","0":"Batam","CountryCode":"IDN","1":"IDN","Population":"91871","2":"91871"},{"Name":"Padang Sidempuan","0":"Padang Sidempuan","CountryCode":"IDN","1":"IDN","Population":"91200","2":"91200"},{"Name":"Sawangan","0":"Sawangan","CountryCode":"IDN","1":"IDN","Population":"91100","2":"91100"},{"Name":"Banyuwangi","0":"Banyuwangi","CountryCode":"IDN","1":"IDN","Population":"89900","2":"89900"},{"Name":"Tanjung Pinang","0":"Tanjung Pinang","CountryCode":"IDN","1":"IDN","Population":"89900","2":"89900"},{"Name":"Mumbai (Bombay)","0":"Mumbai (Bombay)","CountryCode":"IND","1":"IND","Population":"10500000","2":"10500000"},{"Name":"Delhi","0":"Delhi","CountryCode":"IND","1":"IND","Population":"7206704","2":"7206704"},{"Name":"Calcutta [Kolkata]","0":"Calcutta [Kolkata]","CountryCode":"IND","1":"IND","Population":"4399819","2":"4399819"},{"Name":"Chennai (Madras)","0":"Chennai (Madras)","CountryCode":"IND","1":"IND","Population":"3841396","2":"3841396"},{"Name":"Hyderabad","0":"Hyderabad","CountryCode":"IND","1":"IND","Population":"2964638","2":"2964638"},{"Name":"Ahmedabad","0":"Ahmedabad","CountryCode":"IND","1":"IND","Population":"2876710","2":"2876710"},{"Name":"Bangalore","0":"Bangalore","CountryCode":"IND","1":"IND","Population":"2660088","2":"2660088"},{"Name":"Kanpur","0":"Kanpur","CountryCode":"IND","1":"IND","Population":"1874409","2":"1874409"},{"Name":"Nagpur","0":"Nagpur","CountryCode":"IND","1":"IND","Population":"1624752","2":"1624752"},{"Name":"Lucknow","0":"Lucknow","CountryCode":"IND","1":"IND","Population":"1619115","2":"1619115"},{"Name":"Pune","0":"Pune","CountryCode":"IND","1":"IND","Population":"1566651","2":"1566651"},{"Name":"Surat","0":"Surat","CountryCode":"IND","1":"IND","Population":"1498817","2":"1498817"},{"Name":"Jaipur","0":"Jaipur","CountryCode":"IND","1":"IND","Population":"1458483","2":"1458483"},{"Name":"Indore","0":"Indore","CountryCode":"IND","1":"IND","Population":"1091674","2":"1091674"},{"Name":"Bhopal","0":"Bhopal","CountryCode":"IND","1":"IND","Population":"1062771","2":"1062771"},{"Name":"Ludhiana","0":"Ludhiana","CountryCode":"IND","1":"IND","Population":"1042740","2":"1042740"},{"Name":"Vadodara (Baroda)","0":"Vadodara (Baroda)","CountryCode":"IND","1":"IND","Population":"1031346","2":"1031346"},{"Name":"Kalyan","0":"Kalyan","CountryCode":"IND","1":"IND","Population":"1014557","2":"1014557"},{"Name":"Madurai","0":"Madurai","CountryCode":"IND","1":"IND","Population":"977856","2":"977856"},{"Name":"Haora (Howrah)","0":"Haora (Howrah)","CountryCode":"IND","1":"IND","Population":"950435","2":"950435"},{"Name":"Varanasi (Benares)","0":"Varanasi (Benares)","CountryCode":"IND","1":"IND","Population":"929270","2":"929270"},{"Name":"Patna","0":"Patna","CountryCode":"IND","1":"IND","Population":"917243","2":"917243"},{"Name":"Srinagar","0":"Srinagar","CountryCode":"IND","1":"IND","Population":"892506","2":"892506"},{"Name":"Agra","0":"Agra","CountryCode":"IND","1":"IND","Population":"891790","2":"891790"},{"Name":"Coimbatore","0":"Coimbatore","CountryCode":"IND","1":"IND","Population":"816321","2":"816321"},{"Name":"Thane (Thana)","0":"Thane (Thana)","CountryCode":"IND","1":"IND","Population":"803389","2":"803389"},{"Name":"Allahabad","0":"Allahabad","CountryCode":"IND","1":"IND","Population":"792858","2":"792858"},{"Name":"Meerut","0":"Meerut","CountryCode":"IND","1":"IND","Population":"753778","2":"753778"},{"Name":"Vishakhapatnam","0":"Vishakhapatnam","CountryCode":"IND","1":"IND","Population":"752037","2":"752037"},{"Name":"Jabalpur","0":"Jabalpur","CountryCode":"IND","1":"IND","Population":"741927","2":"741927"},{"Name":"Amritsar","0":"Amritsar","CountryCode":"IND","1":"IND","Population":"708835","2":"708835"},{"Name":"Faridabad","0":"Faridabad","CountryCode":"IND","1":"IND","Population":"703592","2":"703592"},{"Name":"Vijayawada","0":"Vijayawada","CountryCode":"IND","1":"IND","Population":"701827","2":"701827"},{"Name":"Gwalior","0":"Gwalior","CountryCode":"IND","1":"IND","Population":"690765","2":"690765"},{"Name":"Jodhpur","0":"Jodhpur","CountryCode":"IND","1":"IND","Population":"666279","2":"666279"},{"Name":"Nashik (Nasik)","0":"Nashik (Nasik)","CountryCode":"IND","1":"IND","Population":"656925","2":"656925"},{"Name":"Hubli-Dharwad","0":"Hubli-Dharwad","CountryCode":"IND","1":"IND","Population":"648298","2":"648298"},{"Name":"Solapur (Sholapur)","0":"Solapur (Sholapur)","CountryCode":"IND","1":"IND","Population":"604215","2":"604215"},{"Name":"Ranchi","0":"Ranchi","CountryCode":"IND","1":"IND","Population":"599306","2":"599306"},{"Name":"Bareilly","0":"Bareilly","CountryCode":"IND","1":"IND","Population":"587211","2":"587211"},{"Name":"Guwahati (Gauhati)","0":"Guwahati (Gauhati)","CountryCode":"IND","1":"IND","Population":"584342","2":"584342"},{"Name":"Shambajinagar (Aurangabad)","0":"Shambajinagar (Aurangabad)","CountryCode":"IND","1":"IND","Population":"573272","2":"573272"},{"Name":"Cochin (Kochi)","0":"Cochin (Kochi)","CountryCode":"IND","1":"IND","Population":"564589","2":"564589"},{"Name":"Rajkot","0":"Rajkot","CountryCode":"IND","1":"IND","Population":"559407","2":"559407"},{"Name":"Kota","0":"Kota","CountryCode":"IND","1":"IND","Population":"537371","2":"537371"},{"Name":"Thiruvananthapuram (Trivandrum","0":"Thiruvananthapuram (Trivandrum","CountryCode":"IND","1":"IND","Population":"524006","2":"524006"},{"Name":"Pimpri-Chinchwad","0":"Pimpri-Chinchwad","CountryCode":"IND","1":"IND","Population":"517083","2":"517083"},{"Name":"Jalandhar (Jullundur)","0":"Jalandhar (Jullundur)","CountryCode":"IND","1":"IND","Population":"509510","2":"509510"},{"Name":"Gorakhpur","0":"Gorakhpur","CountryCode":"IND","1":"IND","Population":"505566","2":"505566"},{"Name":"Chandigarh","0":"Chandigarh","CountryCode":"IND","1":"IND","Population":"504094","2":"504094"},{"Name":"Mysore","0":"Mysore","CountryCode":"IND","1":"IND","Population":"480692","2":"480692"},{"Name":"Aligarh","0":"Aligarh","CountryCode":"IND","1":"IND","Population":"480520","2":"480520"},{"Name":"Guntur","0":"Guntur","CountryCode":"IND","1":"IND","Population":"471051","2":"471051"},{"Name":"Jamshedpur","0":"Jamshedpur","CountryCode":"IND","1":"IND","Population":"460577","2":"460577"},{"Name":"Ghaziabad","0":"Ghaziabad","CountryCode":"IND","1":"IND","Population":"454156","2":"454156"},{"Name":"Warangal","0":"Warangal","CountryCode":"IND","1":"IND","Population":"447657","2":"447657"},{"Name":"Raipur","0":"Raipur","CountryCode":"IND","1":"IND","Population":"438639","2":"438639"},{"Name":"Moradabad","0":"Moradabad","CountryCode":"IND","1":"IND","Population":"429214","2":"429214"},{"Name":"Durgapur","0":"Durgapur","CountryCode":"IND","1":"IND","Population":"425836","2":"425836"},{"Name":"Amravati","0":"Amravati","CountryCode":"IND","1":"IND","Population":"421576","2":"421576"},{"Name":"Calicut (Kozhikode)","0":"Calicut (Kozhikode)","CountryCode":"IND","1":"IND","Population":"419831","2":"419831"},{"Name":"Bikaner","0":"Bikaner","CountryCode":"IND","1":"IND","Population":"416289","2":"416289"},{"Name":"Bhubaneswar","0":"Bhubaneswar","CountryCode":"IND","1":"IND","Population":"411542","2":"411542"},{"Name":"Kolhapur","0":"Kolhapur","CountryCode":"IND","1":"IND","Population":"406370","2":"406370"},{"Name":"Kataka (Cuttack)","0":"Kataka (Cuttack)","CountryCode":"IND","1":"IND","Population":"403418","2":"403418"},{"Name":"Ajmer","0":"Ajmer","CountryCode":"IND","1":"IND","Population":"402700","2":"402700"},{"Name":"Bhavnagar","0":"Bhavnagar","CountryCode":"IND","1":"IND","Population":"402338","2":"402338"},{"Name":"Tiruchirapalli","0":"Tiruchirapalli","CountryCode":"IND","1":"IND","Population":"387223","2":"387223"},{"Name":"Bhilai","0":"Bhilai","CountryCode":"IND","1":"IND","Population":"386159","2":"386159"},{"Name":"Bhiwandi","0":"Bhiwandi","CountryCode":"IND","1":"IND","Population":"379070","2":"379070"},{"Name":"Saharanpur","0":"Saharanpur","CountryCode":"IND","1":"IND","Population":"374945","2":"374945"},{"Name":"Ulhasnagar","0":"Ulhasnagar","CountryCode":"IND","1":"IND","Population":"369077","2":"369077"},{"Name":"Salem","0":"Salem","CountryCode":"IND","1":"IND","Population":"366712","2":"366712"},{"Name":"Ujjain","0":"Ujjain","CountryCode":"IND","1":"IND","Population":"362266","2":"362266"},{"Name":"Malegaon","0":"Malegaon","CountryCode":"IND","1":"IND","Population":"342595","2":"342595"},{"Name":"Jamnagar","0":"Jamnagar","CountryCode":"IND","1":"IND","Population":"341637","2":"341637"},{"Name":"Bokaro Steel City","0":"Bokaro Steel City","CountryCode":"IND","1":"IND","Population":"333683","2":"333683"},{"Name":"Akola","0":"Akola","CountryCode":"IND","1":"IND","Population":"328034","2":"328034"},{"Name":"Belgaum","0":"Belgaum","CountryCode":"IND","1":"IND","Population":"326399","2":"326399"},{"Name":"Rajahmundry","0":"Rajahmundry","CountryCode":"IND","1":"IND","Population":"324851","2":"324851"},{"Name":"Nellore","0":"Nellore","CountryCode":"IND","1":"IND","Population":"316606","2":"316606"},{"Name":"Udaipur","0":"Udaipur","CountryCode":"IND","1":"IND","Population":"308571","2":"308571"},{"Name":"New Bombay","0":"New Bombay","CountryCode":"IND","1":"IND","Population":"307297","2":"307297"},{"Name":"Bhatpara","0":"Bhatpara","CountryCode":"IND","1":"IND","Population":"304952","2":"304952"},{"Name":"Gulbarga","0":"Gulbarga","CountryCode":"IND","1":"IND","Population":"304099","2":"304099"},{"Name":"New Delhi","0":"New Delhi","CountryCode":"IND","1":"IND","Population":"301297","2":"301297"},{"Name":"Jhansi","0":"Jhansi","CountryCode":"IND","1":"IND","Population":"300850","2":"300850"},{"Name":"Gaya","0":"Gaya","CountryCode":"IND","1":"IND","Population":"291675","2":"291675"},{"Name":"Kakinada","0":"Kakinada","CountryCode":"IND","1":"IND","Population":"279980","2":"279980"},{"Name":"Dhule (Dhulia)","0":"Dhule (Dhulia)","CountryCode":"IND","1":"IND","Population":"278317","2":"278317"},{"Name":"Panihati","0":"Panihati","CountryCode":"IND","1":"IND","Population":"275990","2":"275990"},{"Name":"Nanded (Nander)","0":"Nanded (Nander)","CountryCode":"IND","1":"IND","Population":"275083","2":"275083"},{"Name":"Mangalore","0":"Mangalore","CountryCode":"IND","1":"IND","Population":"273304","2":"273304"},{"Name":"Dehra Dun","0":"Dehra Dun","CountryCode":"IND","1":"IND","Population":"270159","2":"270159"},{"Name":"Kamarhati","0":"Kamarhati","CountryCode":"IND","1":"IND","Population":"266889","2":"266889"},{"Name":"Davangere","0":"Davangere","CountryCode":"IND","1":"IND","Population":"266082","2":"266082"},{"Name":"Asansol","0":"Asansol","CountryCode":"IND","1":"IND","Population":"262188","2":"262188"},{"Name":"Bhagalpur","0":"Bhagalpur","CountryCode":"IND","1":"IND","Population":"253225","2":"253225"},{"Name":"Bellary","0":"Bellary","CountryCode":"IND","1":"IND","Population":"245391","2":"245391"},{"Name":"Barddhaman (Burdwan)","0":"Barddhaman (Burdwan)","CountryCode":"IND","1":"IND","Population":"245079","2":"245079"},{"Name":"Rampur","0":"Rampur","CountryCode":"IND","1":"IND","Population":"243742","2":"243742"},{"Name":"Jalgaon","0":"Jalgaon","CountryCode":"IND","1":"IND","Population":"242193","2":"242193"},{"Name":"Muzaffarpur","0":"Muzaffarpur","CountryCode":"IND","1":"IND","Population":"241107","2":"241107"},{"Name":"Nizamabad","0":"Nizamabad","CountryCode":"IND","1":"IND","Population":"241034","2":"241034"},{"Name":"Muzaffarnagar","0":"Muzaffarnagar","CountryCode":"IND","1":"IND","Population":"240609","2":"240609"},{"Name":"Patiala","0":"Patiala","CountryCode":"IND","1":"IND","Population":"238368","2":"238368"},{"Name":"Shahjahanpur","0":"Shahjahanpur","CountryCode":"IND","1":"IND","Population":"237713","2":"237713"},{"Name":"Kurnool","0":"Kurnool","CountryCode":"IND","1":"IND","Population":"236800","2":"236800"},{"Name":"Tiruppur (Tirupper)","0":"Tiruppur (Tirupper)","CountryCode":"IND","1":"IND","Population":"235661","2":"235661"},{"Name":"Rohtak","0":"Rohtak","CountryCode":"IND","1":"IND","Population":"233400","2":"233400"},{"Name":"South Dum Dum","0":"South Dum Dum","CountryCode":"IND","1":"IND","Population":"232811","2":"232811"},{"Name":"Mathura","0":"Mathura","CountryCode":"IND","1":"IND","Population":"226691","2":"226691"},{"Name":"Chandrapur","0":"Chandrapur","CountryCode":"IND","1":"IND","Population":"226105","2":"226105"},{"Name":"Barahanagar (Baranagar)","0":"Barahanagar (Baranagar)","CountryCode":"IND","1":"IND","Population":"224821","2":"224821"},{"Name":"Darbhanga","0":"Darbhanga","CountryCode":"IND","1":"IND","Population":"218391","2":"218391"},{"Name":"Siliguri (Shiliguri)","0":"Siliguri (Shiliguri)","CountryCode":"IND","1":"IND","Population":"216950","2":"216950"},{"Name":"Raurkela","0":"Raurkela","CountryCode":"IND","1":"IND","Population":"215489","2":"215489"},{"Name":"Ambattur","0":"Ambattur","CountryCode":"IND","1":"IND","Population":"215424","2":"215424"},{"Name":"Panipat","0":"Panipat","CountryCode":"IND","1":"IND","Population":"215218","2":"215218"},{"Name":"Firozabad","0":"Firozabad","CountryCode":"IND","1":"IND","Population":"215128","2":"215128"},{"Name":"Ichalkaranji","0":"Ichalkaranji","CountryCode":"IND","1":"IND","Population":"214950","2":"214950"},{"Name":"Jammu","0":"Jammu","CountryCode":"IND","1":"IND","Population":"214737","2":"214737"},{"Name":"Ramagundam","0":"Ramagundam","CountryCode":"IND","1":"IND","Population":"214384","2":"214384"},{"Name":"Eluru","0":"Eluru","CountryCode":"IND","1":"IND","Population":"212866","2":"212866"},{"Name":"Brahmapur","0":"Brahmapur","CountryCode":"IND","1":"IND","Population":"210418","2":"210418"},{"Name":"Alwar","0":"Alwar","CountryCode":"IND","1":"IND","Population":"205086","2":"205086"},{"Name":"Pondicherry","0":"Pondicherry","CountryCode":"IND","1":"IND","Population":"203065","2":"203065"},{"Name":"Thanjavur","0":"Thanjavur","CountryCode":"IND","1":"IND","Population":"202013","2":"202013"},{"Name":"Bihar Sharif","0":"Bihar Sharif","CountryCode":"IND","1":"IND","Population":"201323","2":"201323"},{"Name":"Tuticorin","0":"Tuticorin","CountryCode":"IND","1":"IND","Population":"199854","2":"199854"},{"Name":"Imphal","0":"Imphal","CountryCode":"IND","1":"IND","Population":"198535","2":"198535"},{"Name":"Latur","0":"Latur","CountryCode":"IND","1":"IND","Population":"197408","2":"197408"},{"Name":"Sagar","0":"Sagar","CountryCode":"IND","1":"IND","Population":"195346","2":"195346"},{"Name":"Farrukhabad-cum-Fatehgarh","0":"Farrukhabad-cum-Fatehgarh","CountryCode":"IND","1":"IND","Population":"194567","2":"194567"},{"Name":"Sangli","0":"Sangli","CountryCode":"IND","1":"IND","Population":"193197","2":"193197"},{"Name":"Parbhani","0":"Parbhani","CountryCode":"IND","1":"IND","Population":"190255","2":"190255"},{"Name":"Nagar Coil","0":"Nagar Coil","CountryCode":"IND","1":"IND","Population":"190084","2":"190084"},{"Name":"Bijapur","0":"Bijapur","CountryCode":"IND","1":"IND","Population":"186939","2":"186939"},{"Name":"Kukatpalle","0":"Kukatpalle","CountryCode":"IND","1":"IND","Population":"185378","2":"185378"},{"Name":"Bally","0":"Bally","CountryCode":"IND","1":"IND","Population":"184474","2":"184474"},{"Name":"Bhilwara","0":"Bhilwara","CountryCode":"IND","1":"IND","Population":"183965","2":"183965"},{"Name":"Ratlam","0":"Ratlam","CountryCode":"IND","1":"IND","Population":"183375","2":"183375"},{"Name":"Avadi","0":"Avadi","CountryCode":"IND","1":"IND","Population":"183215","2":"183215"},{"Name":"Dindigul","0":"Dindigul","CountryCode":"IND","1":"IND","Population":"182477","2":"182477"},{"Name":"Ahmadnagar","0":"Ahmadnagar","CountryCode":"IND","1":"IND","Population":"181339","2":"181339"},{"Name":"Bilaspur","0":"Bilaspur","CountryCode":"IND","1":"IND","Population":"179833","2":"179833"},{"Name":"Shimoga","0":"Shimoga","CountryCode":"IND","1":"IND","Population":"179258","2":"179258"},{"Name":"Kharagpur","0":"Kharagpur","CountryCode":"IND","1":"IND","Population":"177989","2":"177989"},{"Name":"Mira Bhayandar","0":"Mira Bhayandar","CountryCode":"IND","1":"IND","Population":"175372","2":"175372"},{"Name":"Vellore","0":"Vellore","CountryCode":"IND","1":"IND","Population":"175061","2":"175061"},{"Name":"Jalna","0":"Jalna","CountryCode":"IND","1":"IND","Population":"174985","2":"174985"},{"Name":"Burnpur","0":"Burnpur","CountryCode":"IND","1":"IND","Population":"174933","2":"174933"},{"Name":"Anantapur","0":"Anantapur","CountryCode":"IND","1":"IND","Population":"174924","2":"174924"},{"Name":"Allappuzha (Alleppey)","0":"Allappuzha (Alleppey)","CountryCode":"IND","1":"IND","Population":"174666","2":"174666"},{"Name":"Tirupati","0":"Tirupati","CountryCode":"IND","1":"IND","Population":"174369","2":"174369"},{"Name":"Karnal","0":"Karnal","CountryCode":"IND","1":"IND","Population":"173751","2":"173751"},{"Name":"Burhanpur","0":"Burhanpur","CountryCode":"IND","1":"IND","Population":"172710","2":"172710"},{"Name":"Hisar (Hissar)","0":"Hisar (Hissar)","CountryCode":"IND","1":"IND","Population":"172677","2":"172677"},{"Name":"Tiruvottiyur","0":"Tiruvottiyur","CountryCode":"IND","1":"IND","Population":"172562","2":"172562"},{"Name":"Mirzapur-cum-Vindhyachal","0":"Mirzapur-cum-Vindhyachal","CountryCode":"IND","1":"IND","Population":"169336","2":"169336"},{"Name":"Secunderabad","0":"Secunderabad","CountryCode":"IND","1":"IND","Population":"167461","2":"167461"},{"Name":"Nadiad","0":"Nadiad","CountryCode":"IND","1":"IND","Population":"167051","2":"167051"},{"Name":"Dewas","0":"Dewas","CountryCode":"IND","1":"IND","Population":"164364","2":"164364"},{"Name":"Murwara (Katni)","0":"Murwara (Katni)","CountryCode":"IND","1":"IND","Population":"163431","2":"163431"},{"Name":"Ganganagar","0":"Ganganagar","CountryCode":"IND","1":"IND","Population":"161482","2":"161482"},{"Name":"Vizianagaram","0":"Vizianagaram","CountryCode":"IND","1":"IND","Population":"160359","2":"160359"},{"Name":"Erode","0":"Erode","CountryCode":"IND","1":"IND","Population":"159232","2":"159232"},{"Name":"Machilipatnam (Masulipatam)","0":"Machilipatnam (Masulipatam)","CountryCode":"IND","1":"IND","Population":"159110","2":"159110"},{"Name":"Bhatinda (Bathinda)","0":"Bhatinda (Bathinda)","CountryCode":"IND","1":"IND","Population":"159042","2":"159042"},{"Name":"Raichur","0":"Raichur","CountryCode":"IND","1":"IND","Population":"157551","2":"157551"},{"Name":"Agartala","0":"Agartala","CountryCode":"IND","1":"IND","Population":"157358","2":"157358"},{"Name":"Arrah (Ara)","0":"Arrah (Ara)","CountryCode":"IND","1":"IND","Population":"157082","2":"157082"},{"Name":"Satna","0":"Satna","CountryCode":"IND","1":"IND","Population":"156630","2":"156630"},{"Name":"Lalbahadur Nagar","0":"Lalbahadur Nagar","CountryCode":"IND","1":"IND","Population":"155500","2":"155500"},{"Name":"Aizawl","0":"Aizawl","CountryCode":"IND","1":"IND","Population":"155240","2":"155240"},{"Name":"Uluberia","0":"Uluberia","CountryCode":"IND","1":"IND","Population":"155172","2":"155172"},{"Name":"Katihar","0":"Katihar","CountryCode":"IND","1":"IND","Population":"154367","2":"154367"},{"Name":"Cuddalore","0":"Cuddalore","CountryCode":"IND","1":"IND","Population":"153086","2":"153086"},{"Name":"Hugli-Chinsurah","0":"Hugli-Chinsurah","CountryCode":"IND","1":"IND","Population":"151806","2":"151806"},{"Name":"Dhanbad","0":"Dhanbad","CountryCode":"IND","1":"IND","Population":"151789","2":"151789"},{"Name":"Raiganj","0":"Raiganj","CountryCode":"IND","1":"IND","Population":"151045","2":"151045"},{"Name":"Sambhal","0":"Sambhal","CountryCode":"IND","1":"IND","Population":"150869","2":"150869"},{"Name":"Durg","0":"Durg","CountryCode":"IND","1":"IND","Population":"150645","2":"150645"},{"Name":"Munger (Monghyr)","0":"Munger (Monghyr)","CountryCode":"IND","1":"IND","Population":"150112","2":"150112"},{"Name":"Kanchipuram","0":"Kanchipuram","CountryCode":"IND","1":"IND","Population":"150100","2":"150100"},{"Name":"North Dum Dum","0":"North Dum Dum","CountryCode":"IND","1":"IND","Population":"149965","2":"149965"},{"Name":"Karimnagar","0":"Karimnagar","CountryCode":"IND","1":"IND","Population":"148583","2":"148583"},{"Name":"Bharatpur","0":"Bharatpur","CountryCode":"IND","1":"IND","Population":"148519","2":"148519"},{"Name":"Sikar","0":"Sikar","CountryCode":"IND","1":"IND","Population":"148272","2":"148272"},{"Name":"Hardwar (Haridwar)","0":"Hardwar (Haridwar)","CountryCode":"IND","1":"IND","Population":"147305","2":"147305"},{"Name":"Dabgram","0":"Dabgram","CountryCode":"IND","1":"IND","Population":"147217","2":"147217"},{"Name":"Morena","0":"Morena","CountryCode":"IND","1":"IND","Population":"147124","2":"147124"},{"Name":"Noida","0":"Noida","CountryCode":"IND","1":"IND","Population":"146514","2":"146514"},{"Name":"Hapur","0":"Hapur","CountryCode":"IND","1":"IND","Population":"146262","2":"146262"},{"Name":"Bhusawal","0":"Bhusawal","CountryCode":"IND","1":"IND","Population":"145143","2":"145143"},{"Name":"Khandwa","0":"Khandwa","CountryCode":"IND","1":"IND","Population":"145133","2":"145133"},{"Name":"Yamuna Nagar","0":"Yamuna Nagar","CountryCode":"IND","1":"IND","Population":"144346","2":"144346"},{"Name":"Sonipat (Sonepat)","0":"Sonipat (Sonepat)","CountryCode":"IND","1":"IND","Population":"143922","2":"143922"},{"Name":"Tenali","0":"Tenali","CountryCode":"IND","1":"IND","Population":"143726","2":"143726"},{"Name":"Raurkela Civil Township","0":"Raurkela Civil Township","CountryCode":"IND","1":"IND","Population":"140408","2":"140408"},{"Name":"Kollam (Quilon)","0":"Kollam (Quilon)","CountryCode":"IND","1":"IND","Population":"139852","2":"139852"},{"Name":"Kumbakonam","0":"Kumbakonam","CountryCode":"IND","1":"IND","Population":"139483","2":"139483"},{"Name":"Ingraj Bazar (English Bazar)","0":"Ingraj Bazar (English Bazar)","CountryCode":"IND","1":"IND","Population":"139204","2":"139204"},{"Name":"Timkur","0":"Timkur","CountryCode":"IND","1":"IND","Population":"138903","2":"138903"},{"Name":"Amroha","0":"Amroha","CountryCode":"IND","1":"IND","Population":"137061","2":"137061"},{"Name":"Serampore","0":"Serampore","CountryCode":"IND","1":"IND","Population":"137028","2":"137028"},{"Name":"Chapra","0":"Chapra","CountryCode":"IND","1":"IND","Population":"136877","2":"136877"},{"Name":"Pali","0":"Pali","CountryCode":"IND","1":"IND","Population":"136842","2":"136842"},{"Name":"Maunath Bhanjan","0":"Maunath Bhanjan","CountryCode":"IND","1":"IND","Population":"136697","2":"136697"},{"Name":"Adoni","0":"Adoni","CountryCode":"IND","1":"IND","Population":"136182","2":"136182"},{"Name":"Jaunpur","0":"Jaunpur","CountryCode":"IND","1":"IND","Population":"136062","2":"136062"},{"Name":"Tirunelveli","0":"Tirunelveli","CountryCode":"IND","1":"IND","Population":"135825","2":"135825"},{"Name":"Bahraich","0":"Bahraich","CountryCode":"IND","1":"IND","Population":"135400","2":"135400"},{"Name":"Gadag Betigeri","0":"Gadag Betigeri","CountryCode":"IND","1":"IND","Population":"134051","2":"134051"},{"Name":"Proddatur","0":"Proddatur","CountryCode":"IND","1":"IND","Population":"133914","2":"133914"},{"Name":"Chittoor","0":"Chittoor","CountryCode":"IND","1":"IND","Population":"133462","2":"133462"},{"Name":"Barrackpur","0":"Barrackpur","CountryCode":"IND","1":"IND","Population":"133265","2":"133265"},{"Name":"Bharuch (Broach)","0":"Bharuch (Broach)","CountryCode":"IND","1":"IND","Population":"133102","2":"133102"},{"Name":"Naihati","0":"Naihati","CountryCode":"IND","1":"IND","Population":"132701","2":"132701"},{"Name":"Shillong","0":"Shillong","CountryCode":"IND","1":"IND","Population":"131719","2":"131719"},{"Name":"Sambalpur","0":"Sambalpur","CountryCode":"IND","1":"IND","Population":"131138","2":"131138"},{"Name":"Junagadh","0":"Junagadh","CountryCode":"IND","1":"IND","Population":"130484","2":"130484"},{"Name":"Rae Bareli","0":"Rae Bareli","CountryCode":"IND","1":"IND","Population":"129904","2":"129904"},{"Name":"Rewa","0":"Rewa","CountryCode":"IND","1":"IND","Population":"128981","2":"128981"},{"Name":"Gurgaon","0":"Gurgaon","CountryCode":"IND","1":"IND","Population":"128608","2":"128608"},{"Name":"Khammam","0":"Khammam","CountryCode":"IND","1":"IND","Population":"127992","2":"127992"},{"Name":"Bulandshahr","0":"Bulandshahr","CountryCode":"IND","1":"IND","Population":"127201","2":"127201"},{"Name":"Navsari","0":"Navsari","CountryCode":"IND","1":"IND","Population":"126089","2":"126089"},{"Name":"Malkajgiri","0":"Malkajgiri","CountryCode":"IND","1":"IND","Population":"126066","2":"126066"},{"Name":"Midnapore (Medinipur)","0":"Midnapore (Medinipur)","CountryCode":"IND","1":"IND","Population":"125498","2":"125498"},{"Name":"Miraj","0":"Miraj","CountryCode":"IND","1":"IND","Population":"125407","2":"125407"},{"Name":"Raj Nandgaon","0":"Raj Nandgaon","CountryCode":"IND","1":"IND","Population":"125371","2":"125371"},{"Name":"Alandur","0":"Alandur","CountryCode":"IND","1":"IND","Population":"125244","2":"125244"},{"Name":"Puri","0":"Puri","CountryCode":"IND","1":"IND","Population":"125199","2":"125199"},{"Name":"Navadwip","0":"Navadwip","CountryCode":"IND","1":"IND","Population":"125037","2":"125037"},{"Name":"Sirsa","0":"Sirsa","CountryCode":"IND","1":"IND","Population":"125000","2":"125000"},{"Name":"Korba","0":"Korba","CountryCode":"IND","1":"IND","Population":"124501","2":"124501"},{"Name":"Faizabad","0":"Faizabad","CountryCode":"IND","1":"IND","Population":"124437","2":"124437"},{"Name":"Etawah","0":"Etawah","CountryCode":"IND","1":"IND","Population":"124072","2":"124072"},{"Name":"Pathankot","0":"Pathankot","CountryCode":"IND","1":"IND","Population":"123930","2":"123930"},{"Name":"Gandhinagar","0":"Gandhinagar","CountryCode":"IND","1":"IND","Population":"123359","2":"123359"},{"Name":"Palghat (Palakkad)","0":"Palghat (Palakkad)","CountryCode":"IND","1":"IND","Population":"123289","2":"123289"},{"Name":"Veraval","0":"Veraval","CountryCode":"IND","1":"IND","Population":"123000","2":"123000"},{"Name":"Hoshiarpur","0":"Hoshiarpur","CountryCode":"IND","1":"IND","Population":"122705","2":"122705"},{"Name":"Ambala","0":"Ambala","CountryCode":"IND","1":"IND","Population":"122596","2":"122596"},{"Name":"Sitapur","0":"Sitapur","CountryCode":"IND","1":"IND","Population":"121842","2":"121842"},{"Name":"Bhiwani","0":"Bhiwani","CountryCode":"IND","1":"IND","Population":"121629","2":"121629"},{"Name":"Cuddapah","0":"Cuddapah","CountryCode":"IND","1":"IND","Population":"121463","2":"121463"},{"Name":"Bhimavaram","0":"Bhimavaram","CountryCode":"IND","1":"IND","Population":"121314","2":"121314"},{"Name":"Krishnanagar","0":"Krishnanagar","CountryCode":"IND","1":"IND","Population":"121110","2":"121110"},{"Name":"Chandannagar","0":"Chandannagar","CountryCode":"IND","1":"IND","Population":"120378","2":"120378"},{"Name":"Mandya","0":"Mandya","CountryCode":"IND","1":"IND","Population":"120265","2":"120265"},{"Name":"Dibrugarh","0":"Dibrugarh","CountryCode":"IND","1":"IND","Population":"120127","2":"120127"},{"Name":"Nandyal","0":"Nandyal","CountryCode":"IND","1":"IND","Population":"119813","2":"119813"},{"Name":"Balurghat","0":"Balurghat","CountryCode":"IND","1":"IND","Population":"119796","2":"119796"},{"Name":"Neyveli","0":"Neyveli","CountryCode":"IND","1":"IND","Population":"118080","2":"118080"},{"Name":"Fatehpur","0":"Fatehpur","CountryCode":"IND","1":"IND","Population":"117675","2":"117675"},{"Name":"Mahbubnagar","0":"Mahbubnagar","CountryCode":"IND","1":"IND","Population":"116833","2":"116833"},{"Name":"Budaun","0":"Budaun","CountryCode":"IND","1":"IND","Population":"116695","2":"116695"},{"Name":"Porbandar","0":"Porbandar","CountryCode":"IND","1":"IND","Population":"116671","2":"116671"},{"Name":"Silchar","0":"Silchar","CountryCode":"IND","1":"IND","Population":"115483","2":"115483"},{"Name":"Berhampore (Baharampur)","0":"Berhampore (Baharampur)","CountryCode":"IND","1":"IND","Population":"115144","2":"115144"},{"Name":"Purnea (Purnia)","0":"Purnea (Purnia)","CountryCode":"IND","1":"IND","Population":"114912","2":"114912"},{"Name":"Bankura","0":"Bankura","CountryCode":"IND","1":"IND","Population":"114876","2":"114876"},{"Name":"Rajapalaiyam","0":"Rajapalaiyam","CountryCode":"IND","1":"IND","Population":"114202","2":"114202"},{"Name":"Titagarh","0":"Titagarh","CountryCode":"IND","1":"IND","Population":"114085","2":"114085"},{"Name":"Halisahar","0":"Halisahar","CountryCode":"IND","1":"IND","Population":"114028","2":"114028"},{"Name":"Hathras","0":"Hathras","CountryCode":"IND","1":"IND","Population":"113285","2":"113285"},{"Name":"Bhir (Bid)","0":"Bhir (Bid)","CountryCode":"IND","1":"IND","Population":"112434","2":"112434"},{"Name":"Pallavaram","0":"Pallavaram","CountryCode":"IND","1":"IND","Population":"111866","2":"111866"},{"Name":"Anand","0":"Anand","CountryCode":"IND","1":"IND","Population":"110266","2":"110266"},{"Name":"Mango","0":"Mango","CountryCode":"IND","1":"IND","Population":"110024","2":"110024"},{"Name":"Santipur","0":"Santipur","CountryCode":"IND","1":"IND","Population":"109956","2":"109956"},{"Name":"Bhind","0":"Bhind","CountryCode":"IND","1":"IND","Population":"109755","2":"109755"},{"Name":"Gondiya","0":"Gondiya","CountryCode":"IND","1":"IND","Population":"109470","2":"109470"},{"Name":"Tiruvannamalai","0":"Tiruvannamalai","CountryCode":"IND","1":"IND","Population":"109196","2":"109196"},{"Name":"Yeotmal (Yavatmal)","0":"Yeotmal (Yavatmal)","CountryCode":"IND","1":"IND","Population":"108578","2":"108578"},{"Name":"Kulti-Barakar","0":"Kulti-Barakar","CountryCode":"IND","1":"IND","Population":"108518","2":"108518"},{"Name":"Moga","0":"Moga","CountryCode":"IND","1":"IND","Population":"108304","2":"108304"},{"Name":"Shivapuri","0":"Shivapuri","CountryCode":"IND","1":"IND","Population":"108277","2":"108277"},{"Name":"Bidar","0":"Bidar","CountryCode":"IND","1":"IND","Population":"108016","2":"108016"},{"Name":"Guntakal","0":"Guntakal","CountryCode":"IND","1":"IND","Population":"107592","2":"107592"},{"Name":"Unnao","0":"Unnao","CountryCode":"IND","1":"IND","Population":"107425","2":"107425"},{"Name":"Barasat","0":"Barasat","CountryCode":"IND","1":"IND","Population":"107365","2":"107365"},{"Name":"Tambaram","0":"Tambaram","CountryCode":"IND","1":"IND","Population":"107187","2":"107187"},{"Name":"Abohar","0":"Abohar","CountryCode":"IND","1":"IND","Population":"107163","2":"107163"},{"Name":"Pilibhit","0":"Pilibhit","CountryCode":"IND","1":"IND","Population":"106605","2":"106605"},{"Name":"Valparai","0":"Valparai","CountryCode":"IND","1":"IND","Population":"106523","2":"106523"},{"Name":"Gonda","0":"Gonda","CountryCode":"IND","1":"IND","Population":"106078","2":"106078"},{"Name":"Surendranagar","0":"Surendranagar","CountryCode":"IND","1":"IND","Population":"105973","2":"105973"},{"Name":"Qutubullapur","0":"Qutubullapur","CountryCode":"IND","1":"IND","Population":"105380","2":"105380"},{"Name":"Beawar","0":"Beawar","CountryCode":"IND","1":"IND","Population":"105363","2":"105363"},{"Name":"Hindupur","0":"Hindupur","CountryCode":"IND","1":"IND","Population":"104651","2":"104651"},{"Name":"Gandhidham","0":"Gandhidham","CountryCode":"IND","1":"IND","Population":"104585","2":"104585"},{"Name":"Haldwani-cum-Kathgodam","0":"Haldwani-cum-Kathgodam","CountryCode":"IND","1":"IND","Population":"104195","2":"104195"},{"Name":"Tellicherry (Thalassery)","0":"Tellicherry (Thalassery)","CountryCode":"IND","1":"IND","Population":"103579","2":"103579"},{"Name":"Wardha","0":"Wardha","CountryCode":"IND","1":"IND","Population":"102985","2":"102985"},{"Name":"Rishra","0":"Rishra","CountryCode":"IND","1":"IND","Population":"102649","2":"102649"},{"Name":"Bhuj","0":"Bhuj","CountryCode":"IND","1":"IND","Population":"102176","2":"102176"},{"Name":"Modinagar","0":"Modinagar","CountryCode":"IND","1":"IND","Population":"101660","2":"101660"},{"Name":"Gudivada","0":"Gudivada","CountryCode":"IND","1":"IND","Population":"101656","2":"101656"},{"Name":"Basirhat","0":"Basirhat","CountryCode":"IND","1":"IND","Population":"101409","2":"101409"},{"Name":"Uttarpara-Kotrung","0":"Uttarpara-Kotrung","CountryCode":"IND","1":"IND","Population":"100867","2":"100867"},{"Name":"Ongole","0":"Ongole","CountryCode":"IND","1":"IND","Population":"100836","2":"100836"},{"Name":"North Barrackpur","0":"North Barrackpur","CountryCode":"IND","1":"IND","Population":"100513","2":"100513"},{"Name":"Guna","0":"Guna","CountryCode":"IND","1":"IND","Population":"100490","2":"100490"},{"Name":"Haldia","0":"Haldia","CountryCode":"IND","1":"IND","Population":"100347","2":"100347"},{"Name":"Habra","0":"Habra","CountryCode":"IND","1":"IND","Population":"100223","2":"100223"},{"Name":"Kanchrapara","0":"Kanchrapara","CountryCode":"IND","1":"IND","Population":"100194","2":"100194"},{"Name":"Tonk","0":"Tonk","CountryCode":"IND","1":"IND","Population":"100079","2":"100079"},{"Name":"Champdani","0":"Champdani","CountryCode":"IND","1":"IND","Population":"98818","2":"98818"},{"Name":"Orai","0":"Orai","CountryCode":"IND","1":"IND","Population":"98640","2":"98640"},{"Name":"Pudukkottai","0":"Pudukkottai","CountryCode":"IND","1":"IND","Population":"98619","2":"98619"},{"Name":"Sasaram","0":"Sasaram","CountryCode":"IND","1":"IND","Population":"98220","2":"98220"},{"Name":"Hazaribag","0":"Hazaribag","CountryCode":"IND","1":"IND","Population":"97712","2":"97712"},{"Name":"Palayankottai","0":"Palayankottai","CountryCode":"IND","1":"IND","Population":"97662","2":"97662"},{"Name":"Banda","0":"Banda","CountryCode":"IND","1":"IND","Population":"97227","2":"97227"},{"Name":"Godhra","0":"Godhra","CountryCode":"IND","1":"IND","Population":"96813","2":"96813"},{"Name":"Hospet","0":"Hospet","CountryCode":"IND","1":"IND","Population":"96322","2":"96322"},{"Name":"Ashoknagar-Kalyangarh","0":"Ashoknagar-Kalyangarh","CountryCode":"IND","1":"IND","Population":"96315","2":"96315"},{"Name":"Achalpur","0":"Achalpur","CountryCode":"IND","1":"IND","Population":"96216","2":"96216"},{"Name":"Patan","0":"Patan","CountryCode":"IND","1":"IND","Population":"96109","2":"96109"},{"Name":"Mandasor","0":"Mandasor","CountryCode":"IND","1":"IND","Population":"95758","2":"95758"},{"Name":"Damoh","0":"Damoh","CountryCode":"IND","1":"IND","Population":"95661","2":"95661"},{"Name":"Satara","0":"Satara","CountryCode":"IND","1":"IND","Population":"95133","2":"95133"},{"Name":"Meerut Cantonment","0":"Meerut Cantonment","CountryCode":"IND","1":"IND","Population":"94876","2":"94876"},{"Name":"Dehri","0":"Dehri","CountryCode":"IND","1":"IND","Population":"94526","2":"94526"},{"Name":"Delhi Cantonment","0":"Delhi Cantonment","CountryCode":"IND","1":"IND","Population":"94326","2":"94326"},{"Name":"Chhindwara","0":"Chhindwara","CountryCode":"IND","1":"IND","Population":"93731","2":"93731"},{"Name":"Bansberia","0":"Bansberia","CountryCode":"IND","1":"IND","Population":"93447","2":"93447"},{"Name":"Nagaon","0":"Nagaon","CountryCode":"IND","1":"IND","Population":"93350","2":"93350"},{"Name":"Kanpur Cantonment","0":"Kanpur Cantonment","CountryCode":"IND","1":"IND","Population":"93109","2":"93109"},{"Name":"Vidisha","0":"Vidisha","CountryCode":"IND","1":"IND","Population":"92917","2":"92917"},{"Name":"Bettiah","0":"Bettiah","CountryCode":"IND","1":"IND","Population":"92583","2":"92583"},{"Name":"Purulia","0":"Purulia","CountryCode":"IND","1":"IND","Population":"92574","2":"92574"},{"Name":"Hassan","0":"Hassan","CountryCode":"IND","1":"IND","Population":"90803","2":"90803"},{"Name":"Ambala Sadar","0":"Ambala Sadar","CountryCode":"IND","1":"IND","Population":"90712","2":"90712"},{"Name":"Baidyabati","0":"Baidyabati","CountryCode":"IND","1":"IND","Population":"90601","2":"90601"},{"Name":"Morvi","0":"Morvi","CountryCode":"IND","1":"IND","Population":"90357","2":"90357"},{"Name":"Raigarh","0":"Raigarh","CountryCode":"IND","1":"IND","Population":"89166","2":"89166"},{"Name":"Vejalpur","0":"Vejalpur","CountryCode":"IND","1":"IND","Population":"89053","2":"89053"},{"Name":"Baghdad","0":"Baghdad","CountryCode":"IRQ","1":"IRQ","Population":"4336000","2":"4336000"},{"Name":"Mosul","0":"Mosul","CountryCode":"IRQ","1":"IRQ","Population":"879000","2":"879000"},{"Name":"Irbil","0":"Irbil","CountryCode":"IRQ","1":"IRQ","Population":"485968","2":"485968"},{"Name":"Kirkuk","0":"Kirkuk","CountryCode":"IRQ","1":"IRQ","Population":"418624","2":"418624"},{"Name":"Basra","0":"Basra","CountryCode":"IRQ","1":"IRQ","Population":"406296","2":"406296"},{"Name":"al-Sulaymaniya","0":"al-Sulaymaniya","CountryCode":"IRQ","1":"IRQ","Population":"364096","2":"364096"},{"Name":"al-Najaf","0":"al-Najaf","CountryCode":"IRQ","1":"IRQ","Population":"309010","2":"309010"},{"Name":"Karbala","0":"Karbala","CountryCode":"IRQ","1":"IRQ","Population":"296705","2":"296705"},{"Name":"al-Hilla","0":"al-Hilla","CountryCode":"IRQ","1":"IRQ","Population":"268834","2":"268834"},{"Name":"al-Nasiriya","0":"al-Nasiriya","CountryCode":"IRQ","1":"IRQ","Population":"265937","2":"265937"},{"Name":"al-Amara","0":"al-Amara","CountryCode":"IRQ","1":"IRQ","Population":"208797","2":"208797"},{"Name":"al-Diwaniya","0":"al-Diwaniya","CountryCode":"IRQ","1":"IRQ","Population":"196519","2":"196519"},{"Name":"al-Ramadi","0":"al-Ramadi","CountryCode":"IRQ","1":"IRQ","Population":"192556","2":"192556"},{"Name":"al-Kut","0":"al-Kut","CountryCode":"IRQ","1":"IRQ","Population":"183183","2":"183183"},{"Name":"Baquba","0":"Baquba","CountryCode":"IRQ","1":"IRQ","Population":"114516","2":"114516"},{"Name":"Teheran","0":"Teheran","CountryCode":"IRN","1":"IRN","Population":"6758845","2":"6758845"},{"Name":"Mashhad","0":"Mashhad","CountryCode":"IRN","1":"IRN","Population":"1887405","2":"1887405"},{"Name":"Esfahan","0":"Esfahan","CountryCode":"IRN","1":"IRN","Population":"1266072","2":"1266072"},{"Name":"Tabriz","0":"Tabriz","CountryCode":"IRN","1":"IRN","Population":"1191043","2":"1191043"},{"Name":"Shiraz","0":"Shiraz","CountryCode":"IRN","1":"IRN","Population":"1053025","2":"1053025"},{"Name":"Karaj","0":"Karaj","CountryCode":"IRN","1":"IRN","Population":"940968","2":"940968"},{"Name":"Ahvaz","0":"Ahvaz","CountryCode":"IRN","1":"IRN","Population":"804980","2":"804980"},{"Name":"Qom","0":"Qom","CountryCode":"IRN","1":"IRN","Population":"777677","2":"777677"},{"Name":"Kermanshah","0":"Kermanshah","CountryCode":"IRN","1":"IRN","Population":"692986","2":"692986"},{"Name":"Urmia","0":"Urmia","CountryCode":"IRN","1":"IRN","Population":"435200","2":"435200"},{"Name":"Zahedan","0":"Zahedan","CountryCode":"IRN","1":"IRN","Population":"419518","2":"419518"},{"Name":"Rasht","0":"Rasht","CountryCode":"IRN","1":"IRN","Population":"417748","2":"417748"},{"Name":"Hamadan","0":"Hamadan","CountryCode":"IRN","1":"IRN","Population":"401281","2":"401281"},{"Name":"Kerman","0":"Kerman","CountryCode":"IRN","1":"IRN","Population":"384991","2":"384991"},{"Name":"Arak","0":"Arak","CountryCode":"IRN","1":"IRN","Population":"380755","2":"380755"},{"Name":"Ardebil","0":"Ardebil","CountryCode":"IRN","1":"IRN","Population":"340386","2":"340386"},{"Name":"Yazd","0":"Yazd","CountryCode":"IRN","1":"IRN","Population":"326776","2":"326776"},{"Name":"Qazvin","0":"Qazvin","CountryCode":"IRN","1":"IRN","Population":"291117","2":"291117"},{"Name":"Zanjan","0":"Zanjan","CountryCode":"IRN","1":"IRN","Population":"286295","2":"286295"},{"Name":"Sanandaj","0":"Sanandaj","CountryCode":"IRN","1":"IRN","Population":"277808","2":"277808"},{"Name":"Bandar-e-Abbas","0":"Bandar-e-Abbas","CountryCode":"IRN","1":"IRN","Population":"273578","2":"273578"},{"Name":"Khorramabad","0":"Khorramabad","CountryCode":"IRN","1":"IRN","Population":"272815","2":"272815"},{"Name":"Eslamshahr","0":"Eslamshahr","CountryCode":"IRN","1":"IRN","Population":"265450","2":"265450"},{"Name":"Borujerd","0":"Borujerd","CountryCode":"IRN","1":"IRN","Population":"217804","2":"217804"},{"Name":"Abadan","0":"Abadan","CountryCode":"IRN","1":"IRN","Population":"206073","2":"206073"},{"Name":"Dezful","0":"Dezful","CountryCode":"IRN","1":"IRN","Population":"202639","2":"202639"},{"Name":"Kashan","0":"Kashan","CountryCode":"IRN","1":"IRN","Population":"201372","2":"201372"},{"Name":"Sari","0":"Sari","CountryCode":"IRN","1":"IRN","Population":"195882","2":"195882"},{"Name":"Gorgan","0":"Gorgan","CountryCode":"IRN","1":"IRN","Population":"188710","2":"188710"},{"Name":"Najafabad","0":"Najafabad","CountryCode":"IRN","1":"IRN","Population":"178498","2":"178498"},{"Name":"Sabzevar","0":"Sabzevar","CountryCode":"IRN","1":"IRN","Population":"170738","2":"170738"},{"Name":"Khomeynishahr","0":"Khomeynishahr","CountryCode":"IRN","1":"IRN","Population":"165888","2":"165888"},{"Name":"Amol","0":"Amol","CountryCode":"IRN","1":"IRN","Population":"159092","2":"159092"},{"Name":"Neyshabur","0":"Neyshabur","CountryCode":"IRN","1":"IRN","Population":"158847","2":"158847"},{"Name":"Babol","0":"Babol","CountryCode":"IRN","1":"IRN","Population":"158346","2":"158346"},{"Name":"Khoy","0":"Khoy","CountryCode":"IRN","1":"IRN","Population":"148944","2":"148944"},{"Name":"Malayer","0":"Malayer","CountryCode":"IRN","1":"IRN","Population":"144373","2":"144373"},{"Name":"Bushehr","0":"Bushehr","CountryCode":"IRN","1":"IRN","Population":"143641","2":"143641"},{"Name":"Qaemshahr","0":"Qaemshahr","CountryCode":"IRN","1":"IRN","Population":"143286","2":"143286"},{"Name":"Qarchak","0":"Qarchak","CountryCode":"IRN","1":"IRN","Population":"142690","2":"142690"},{"Name":"Qods","0":"Qods","CountryCode":"IRN","1":"IRN","Population":"138278","2":"138278"},{"Name":"Sirjan","0":"Sirjan","CountryCode":"IRN","1":"IRN","Population":"135024","2":"135024"},{"Name":"Bojnurd","0":"Bojnurd","CountryCode":"IRN","1":"IRN","Population":"134835","2":"134835"},{"Name":"Maragheh","0":"Maragheh","CountryCode":"IRN","1":"IRN","Population":"132318","2":"132318"},{"Name":"Birjand","0":"Birjand","CountryCode":"IRN","1":"IRN","Population":"127608","2":"127608"},{"Name":"Ilam","0":"Ilam","CountryCode":"IRN","1":"IRN","Population":"126346","2":"126346"},{"Name":"Bukan","0":"Bukan","CountryCode":"IRN","1":"IRN","Population":"120020","2":"120020"},{"Name":"Masjed-e-Soleyman","0":"Masjed-e-Soleyman","CountryCode":"IRN","1":"IRN","Population":"116883","2":"116883"},{"Name":"Saqqez","0":"Saqqez","CountryCode":"IRN","1":"IRN","Population":"115394","2":"115394"},{"Name":"Gonbad-e Qabus","0":"Gonbad-e Qabus","CountryCode":"IRN","1":"IRN","Population":"111253","2":"111253"},{"Name":"Saveh","0":"Saveh","CountryCode":"IRN","1":"IRN","Population":"111245","2":"111245"},{"Name":"Mahabad","0":"Mahabad","CountryCode":"IRN","1":"IRN","Population":"107799","2":"107799"},{"Name":"Varamin","0":"Varamin","CountryCode":"IRN","1":"IRN","Population":"107233","2":"107233"},{"Name":"Andimeshk","0":"Andimeshk","CountryCode":"IRN","1":"IRN","Population":"106923","2":"106923"},{"Name":"Khorramshahr","0":"Khorramshahr","CountryCode":"IRN","1":"IRN","Population":"105636","2":"105636"},{"Name":"Shahrud","0":"Shahrud","CountryCode":"IRN","1":"IRN","Population":"104765","2":"104765"},{"Name":"Marv Dasht","0":"Marv Dasht","CountryCode":"IRN","1":"IRN","Population":"103579","2":"103579"},{"Name":"Zabol","0":"Zabol","CountryCode":"IRN","1":"IRN","Population":"100887","2":"100887"},{"Name":"Shahr-e Kord","0":"Shahr-e Kord","CountryCode":"IRN","1":"IRN","Population":"100477","2":"100477"},{"Name":"Bandar-e Anzali","0":"Bandar-e Anzali","CountryCode":"IRN","1":"IRN","Population":"98500","2":"98500"},{"Name":"Rafsanjan","0":"Rafsanjan","CountryCode":"IRN","1":"IRN","Population":"98300","2":"98300"},{"Name":"Marand","0":"Marand","CountryCode":"IRN","1":"IRN","Population":"96400","2":"96400"},{"Name":"Torbat-e Heydariyeh","0":"Torbat-e Heydariyeh","CountryCode":"IRN","1":"IRN","Population":"94600","2":"94600"},{"Name":"Jahrom","0":"Jahrom","CountryCode":"IRN","1":"IRN","Population":"94200","2":"94200"},{"Name":"Semnan","0":"Semnan","CountryCode":"IRN","1":"IRN","Population":"91045","2":"91045"},{"Name":"Miandoab","0":"Miandoab","CountryCode":"IRN","1":"IRN","Population":"90100","2":"90100"},{"Name":"Qomsheh","0":"Qomsheh","CountryCode":"IRN","1":"IRN","Population":"89800","2":"89800"},{"Name":"Dublin","0":"Dublin","CountryCode":"IRL","1":"IRL","Population":"481854","2":"481854"},{"Name":"Cork","0":"Cork","CountryCode":"IRL","1":"IRL","Population":"127187","2":"127187"},{"Name":"Reykjav\u00edk","0":"Reykjav\u00edk","CountryCode":"ISL","1":"ISL","Population":"109184","2":"109184"},{"Name":"Jerusalem","0":"Jerusalem","CountryCode":"ISR","1":"ISR","Population":"633700","2":"633700"},{"Name":"Tel Aviv-Jaffa","0":"Tel Aviv-Jaffa","CountryCode":"ISR","1":"ISR","Population":"348100","2":"348100"},{"Name":"Haifa","0":"Haifa","CountryCode":"ISR","1":"ISR","Population":"265700","2":"265700"},{"Name":"Rishon Le Ziyyon","0":"Rishon Le Ziyyon","CountryCode":"ISR","1":"ISR","Population":"188200","2":"188200"},{"Name":"Beerseba","0":"Beerseba","CountryCode":"ISR","1":"ISR","Population":"163700","2":"163700"},{"Name":"Holon","0":"Holon","CountryCode":"ISR","1":"ISR","Population":"163100","2":"163100"},{"Name":"Petah Tiqwa","0":"Petah Tiqwa","CountryCode":"ISR","1":"ISR","Population":"159400","2":"159400"},{"Name":"Ashdod","0":"Ashdod","CountryCode":"ISR","1":"ISR","Population":"155800","2":"155800"},{"Name":"Netanya","0":"Netanya","CountryCode":"ISR","1":"ISR","Population":"154900","2":"154900"},{"Name":"Bat Yam","0":"Bat Yam","CountryCode":"ISR","1":"ISR","Population":"137000","2":"137000"},{"Name":"Bene Beraq","0":"Bene Beraq","CountryCode":"ISR","1":"ISR","Population":"133900","2":"133900"},{"Name":"Ramat Gan","0":"Ramat Gan","CountryCode":"ISR","1":"ISR","Population":"126900","2":"126900"},{"Name":"Ashqelon","0":"Ashqelon","CountryCode":"ISR","1":"ISR","Population":"92300","2":"92300"},{"Name":"Rehovot","0":"Rehovot","CountryCode":"ISR","1":"ISR","Population":"90300","2":"90300"},{"Name":"Roma","0":"Roma","CountryCode":"ITA","1":"ITA","Population":"2643581","2":"2643581"},{"Name":"Milano","0":"Milano","CountryCode":"ITA","1":"ITA","Population":"1300977","2":"1300977"},{"Name":"Napoli","0":"Napoli","CountryCode":"ITA","1":"ITA","Population":"1002619","2":"1002619"},{"Name":"Torino","0":"Torino","CountryCode":"ITA","1":"ITA","Population":"903705","2":"903705"},{"Name":"Palermo","0":"Palermo","CountryCode":"ITA","1":"ITA","Population":"683794","2":"683794"},{"Name":"Genova","0":"Genova","CountryCode":"ITA","1":"ITA","Population":"636104","2":"636104"},{"Name":"Bologna","0":"Bologna","CountryCode":"ITA","1":"ITA","Population":"381161","2":"381161"},{"Name":"Firenze","0":"Firenze","CountryCode":"ITA","1":"ITA","Population":"376662","2":"376662"},{"Name":"Catania","0":"Catania","CountryCode":"ITA","1":"ITA","Population":"337862","2":"337862"},{"Name":"Bari","0":"Bari","CountryCode":"ITA","1":"ITA","Population":"331848","2":"331848"},{"Name":"Venezia","0":"Venezia","CountryCode":"ITA","1":"ITA","Population":"277305","2":"277305"},{"Name":"Messina","0":"Messina","CountryCode":"ITA","1":"ITA","Population":"259156","2":"259156"},{"Name":"Verona","0":"Verona","CountryCode":"ITA","1":"ITA","Population":"255268","2":"255268"},{"Name":"Trieste","0":"Trieste","CountryCode":"ITA","1":"ITA","Population":"216459","2":"216459"},{"Name":"Padova","0":"Padova","CountryCode":"ITA","1":"ITA","Population":"211391","2":"211391"},{"Name":"Taranto","0":"Taranto","CountryCode":"ITA","1":"ITA","Population":"208214","2":"208214"},{"Name":"Brescia","0":"Brescia","CountryCode":"ITA","1":"ITA","Population":"191317","2":"191317"},{"Name":"Reggio di Calabria","0":"Reggio di Calabria","CountryCode":"ITA","1":"ITA","Population":"179617","2":"179617"},{"Name":"Modena","0":"Modena","CountryCode":"ITA","1":"ITA","Population":"176022","2":"176022"},{"Name":"Prato","0":"Prato","CountryCode":"ITA","1":"ITA","Population":"172473","2":"172473"},{"Name":"Parma","0":"Parma","CountryCode":"ITA","1":"ITA","Population":"168717","2":"168717"},{"Name":"Cagliari","0":"Cagliari","CountryCode":"ITA","1":"ITA","Population":"165926","2":"165926"},{"Name":"Livorno","0":"Livorno","CountryCode":"ITA","1":"ITA","Population":"161673","2":"161673"},{"Name":"Perugia","0":"Perugia","CountryCode":"ITA","1":"ITA","Population":"156673","2":"156673"},{"Name":"Foggia","0":"Foggia","CountryCode":"ITA","1":"ITA","Population":"154891","2":"154891"},{"Name":"Reggio nell\u00b4 Emilia","0":"Reggio nell\u00b4 Emilia","CountryCode":"ITA","1":"ITA","Population":"143664","2":"143664"},{"Name":"Salerno","0":"Salerno","CountryCode":"ITA","1":"ITA","Population":"142055","2":"142055"},{"Name":"Ravenna","0":"Ravenna","CountryCode":"ITA","1":"ITA","Population":"138418","2":"138418"},{"Name":"Ferrara","0":"Ferrara","CountryCode":"ITA","1":"ITA","Population":"132127","2":"132127"},{"Name":"Rimini","0":"Rimini","CountryCode":"ITA","1":"ITA","Population":"131062","2":"131062"},{"Name":"Syrakusa","0":"Syrakusa","CountryCode":"ITA","1":"ITA","Population":"126282","2":"126282"},{"Name":"Sassari","0":"Sassari","CountryCode":"ITA","1":"ITA","Population":"120803","2":"120803"},{"Name":"Monza","0":"Monza","CountryCode":"ITA","1":"ITA","Population":"119516","2":"119516"},{"Name":"Bergamo","0":"Bergamo","CountryCode":"ITA","1":"ITA","Population":"117837","2":"117837"},{"Name":"Pescara","0":"Pescara","CountryCode":"ITA","1":"ITA","Population":"115698","2":"115698"},{"Name":"Latina","0":"Latina","CountryCode":"ITA","1":"ITA","Population":"114099","2":"114099"},{"Name":"Vicenza","0":"Vicenza","CountryCode":"ITA","1":"ITA","Population":"109738","2":"109738"},{"Name":"Terni","0":"Terni","CountryCode":"ITA","1":"ITA","Population":"107770","2":"107770"},{"Name":"Forl\u00ec","0":"Forl\u00ec","CountryCode":"ITA","1":"ITA","Population":"107475","2":"107475"},{"Name":"Trento","0":"Trento","CountryCode":"ITA","1":"ITA","Population":"104906","2":"104906"},{"Name":"Novara","0":"Novara","CountryCode":"ITA","1":"ITA","Population":"102037","2":"102037"},{"Name":"Piacenza","0":"Piacenza","CountryCode":"ITA","1":"ITA","Population":"98384","2":"98384"},{"Name":"Ancona","0":"Ancona","CountryCode":"ITA","1":"ITA","Population":"98329","2":"98329"},{"Name":"Lecce","0":"Lecce","CountryCode":"ITA","1":"ITA","Population":"98208","2":"98208"},{"Name":"Bolzano","0":"Bolzano","CountryCode":"ITA","1":"ITA","Population":"97232","2":"97232"},{"Name":"Catanzaro","0":"Catanzaro","CountryCode":"ITA","1":"ITA","Population":"96700","2":"96700"},{"Name":"La Spezia","0":"La Spezia","CountryCode":"ITA","1":"ITA","Population":"95504","2":"95504"},{"Name":"Udine","0":"Udine","CountryCode":"ITA","1":"ITA","Population":"94932","2":"94932"},{"Name":"Torre del Greco","0":"Torre del Greco","CountryCode":"ITA","1":"ITA","Population":"94505","2":"94505"},{"Name":"Andria","0":"Andria","CountryCode":"ITA","1":"ITA","Population":"94443","2":"94443"},{"Name":"Brindisi","0":"Brindisi","CountryCode":"ITA","1":"ITA","Population":"93454","2":"93454"},{"Name":"Giugliano in Campania","0":"Giugliano in Campania","CountryCode":"ITA","1":"ITA","Population":"93286","2":"93286"},{"Name":"Pisa","0":"Pisa","CountryCode":"ITA","1":"ITA","Population":"92379","2":"92379"},{"Name":"Barletta","0":"Barletta","CountryCode":"ITA","1":"ITA","Population":"91904","2":"91904"},{"Name":"Arezzo","0":"Arezzo","CountryCode":"ITA","1":"ITA","Population":"91729","2":"91729"},{"Name":"Alessandria","0":"Alessandria","CountryCode":"ITA","1":"ITA","Population":"90289","2":"90289"},{"Name":"Cesena","0":"Cesena","CountryCode":"ITA","1":"ITA","Population":"89852","2":"89852"},{"Name":"Pesaro","0":"Pesaro","CountryCode":"ITA","1":"ITA","Population":"88987","2":"88987"},{"Name":"Dili","0":"Dili","CountryCode":"TMP","1":"TMP","Population":"47900","2":"47900"},{"Name":"Wien","0":"Wien","CountryCode":"AUT","1":"AUT","Population":"1608144","2":"1608144"},{"Name":"Graz","0":"Graz","CountryCode":"AUT","1":"AUT","Population":"240967","2":"240967"},{"Name":"Linz","0":"Linz","CountryCode":"AUT","1":"AUT","Population":"188022","2":"188022"},{"Name":"Salzburg","0":"Salzburg","CountryCode":"AUT","1":"AUT","Population":"144247","2":"144247"},{"Name":"Innsbruck","0":"Innsbruck","CountryCode":"AUT","1":"AUT","Population":"111752","2":"111752"},{"Name":"Klagenfurt","0":"Klagenfurt","CountryCode":"AUT","1":"AUT","Population":"91141","2":"91141"},{"Name":"Spanish Town","0":"Spanish Town","CountryCode":"JAM","1":"JAM","Population":"110379","2":"110379"},{"Name":"Kingston","0":"Kingston","CountryCode":"JAM","1":"JAM","Population":"103962","2":"103962"},{"Name":"Portmore","0":"Portmore","CountryCode":"JAM","1":"JAM","Population":"99799","2":"99799"},{"Name":"Tokyo","0":"Tokyo","CountryCode":"JPN","1":"JPN","Population":"7980230","2":"7980230"},{"Name":"Jokohama [Yokohama]","0":"Jokohama [Yokohama]","CountryCode":"JPN","1":"JPN","Population":"3339594","2":"3339594"},{"Name":"Osaka","0":"Osaka","CountryCode":"JPN","1":"JPN","Population":"2595674","2":"2595674"},{"Name":"Nagoya","0":"Nagoya","CountryCode":"JPN","1":"JPN","Population":"2154376","2":"2154376"},{"Name":"Sapporo","0":"Sapporo","CountryCode":"JPN","1":"JPN","Population":"1790886","2":"1790886"},{"Name":"Kioto","0":"Kioto","CountryCode":"JPN","1":"JPN","Population":"1461974","2":"1461974"},{"Name":"Kobe","0":"Kobe","CountryCode":"JPN","1":"JPN","Population":"1425139","2":"1425139"},{"Name":"Fukuoka","0":"Fukuoka","CountryCode":"JPN","1":"JPN","Population":"1308379","2":"1308379"},{"Name":"Kawasaki","0":"Kawasaki","CountryCode":"JPN","1":"JPN","Population":"1217359","2":"1217359"},{"Name":"Hiroshima","0":"Hiroshima","CountryCode":"JPN","1":"JPN","Population":"1119117","2":"1119117"},{"Name":"Kitakyushu","0":"Kitakyushu","CountryCode":"JPN","1":"JPN","Population":"1016264","2":"1016264"},{"Name":"Sendai","0":"Sendai","CountryCode":"JPN","1":"JPN","Population":"989975","2":"989975"},{"Name":"Chiba","0":"Chiba","CountryCode":"JPN","1":"JPN","Population":"863930","2":"863930"},{"Name":"Sakai","0":"Sakai","CountryCode":"JPN","1":"JPN","Population":"797735","2":"797735"},{"Name":"Kumamoto","0":"Kumamoto","CountryCode":"JPN","1":"JPN","Population":"656734","2":"656734"},{"Name":"Okayama","0":"Okayama","CountryCode":"JPN","1":"JPN","Population":"624269","2":"624269"},{"Name":"Sagamihara","0":"Sagamihara","CountryCode":"JPN","1":"JPN","Population":"586300","2":"586300"},{"Name":"Hamamatsu","0":"Hamamatsu","CountryCode":"JPN","1":"JPN","Population":"568796","2":"568796"},{"Name":"Kagoshima","0":"Kagoshima","CountryCode":"JPN","1":"JPN","Population":"549977","2":"549977"},{"Name":"Funabashi","0":"Funabashi","CountryCode":"JPN","1":"JPN","Population":"545299","2":"545299"},{"Name":"Higashiosaka","0":"Higashiosaka","CountryCode":"JPN","1":"JPN","Population":"517785","2":"517785"},{"Name":"Hachioji","0":"Hachioji","CountryCode":"JPN","1":"JPN","Population":"513451","2":"513451"},{"Name":"Niigata","0":"Niigata","CountryCode":"JPN","1":"JPN","Population":"497464","2":"497464"},{"Name":"Amagasaki","0":"Amagasaki","CountryCode":"JPN","1":"JPN","Population":"481434","2":"481434"},{"Name":"Himeji","0":"Himeji","CountryCode":"JPN","1":"JPN","Population":"475167","2":"475167"},{"Name":"Shizuoka","0":"Shizuoka","CountryCode":"JPN","1":"JPN","Population":"473854","2":"473854"},{"Name":"Urawa","0":"Urawa","CountryCode":"JPN","1":"JPN","Population":"469675","2":"469675"},{"Name":"Matsuyama","0":"Matsuyama","CountryCode":"JPN","1":"JPN","Population":"466133","2":"466133"},{"Name":"Matsudo","0":"Matsudo","CountryCode":"JPN","1":"JPN","Population":"461126","2":"461126"},{"Name":"Kanazawa","0":"Kanazawa","CountryCode":"JPN","1":"JPN","Population":"455386","2":"455386"},{"Name":"Kawaguchi","0":"Kawaguchi","CountryCode":"JPN","1":"JPN","Population":"452155","2":"452155"},{"Name":"Ichikawa","0":"Ichikawa","CountryCode":"JPN","1":"JPN","Population":"441893","2":"441893"},{"Name":"Omiya","0":"Omiya","CountryCode":"JPN","1":"JPN","Population":"441649","2":"441649"},{"Name":"Utsunomiya","0":"Utsunomiya","CountryCode":"JPN","1":"JPN","Population":"440353","2":"440353"},{"Name":"Oita","0":"Oita","CountryCode":"JPN","1":"JPN","Population":"433401","2":"433401"},{"Name":"Nagasaki","0":"Nagasaki","CountryCode":"JPN","1":"JPN","Population":"432759","2":"432759"},{"Name":"Yokosuka","0":"Yokosuka","CountryCode":"JPN","1":"JPN","Population":"430200","2":"430200"},{"Name":"Kurashiki","0":"Kurashiki","CountryCode":"JPN","1":"JPN","Population":"425103","2":"425103"},{"Name":"Gifu","0":"Gifu","CountryCode":"JPN","1":"JPN","Population":"408007","2":"408007"},{"Name":"Hirakata","0":"Hirakata","CountryCode":"JPN","1":"JPN","Population":"403151","2":"403151"},{"Name":"Nishinomiya","0":"Nishinomiya","CountryCode":"JPN","1":"JPN","Population":"397618","2":"397618"},{"Name":"Toyonaka","0":"Toyonaka","CountryCode":"JPN","1":"JPN","Population":"396689","2":"396689"},{"Name":"Wakayama","0":"Wakayama","CountryCode":"JPN","1":"JPN","Population":"391233","2":"391233"},{"Name":"Fukuyama","0":"Fukuyama","CountryCode":"JPN","1":"JPN","Population":"376921","2":"376921"},{"Name":"Fujisawa","0":"Fujisawa","CountryCode":"JPN","1":"JPN","Population":"372840","2":"372840"},{"Name":"Asahikawa","0":"Asahikawa","CountryCode":"JPN","1":"JPN","Population":"364813","2":"364813"},{"Name":"Machida","0":"Machida","CountryCode":"JPN","1":"JPN","Population":"364197","2":"364197"},{"Name":"Nara","0":"Nara","CountryCode":"JPN","1":"JPN","Population":"362812","2":"362812"},{"Name":"Takatsuki","0":"Takatsuki","CountryCode":"JPN","1":"JPN","Population":"361747","2":"361747"},{"Name":"Iwaki","0":"Iwaki","CountryCode":"JPN","1":"JPN","Population":"361737","2":"361737"},{"Name":"Nagano","0":"Nagano","CountryCode":"JPN","1":"JPN","Population":"361391","2":"361391"},{"Name":"Toyohashi","0":"Toyohashi","CountryCode":"JPN","1":"JPN","Population":"360066","2":"360066"},{"Name":"Toyota","0":"Toyota","CountryCode":"JPN","1":"JPN","Population":"346090","2":"346090"},{"Name":"Suita","0":"Suita","CountryCode":"JPN","1":"JPN","Population":"345750","2":"345750"},{"Name":"Takamatsu","0":"Takamatsu","CountryCode":"JPN","1":"JPN","Population":"332471","2":"332471"},{"Name":"Koriyama","0":"Koriyama","CountryCode":"JPN","1":"JPN","Population":"330335","2":"330335"},{"Name":"Okazaki","0":"Okazaki","CountryCode":"JPN","1":"JPN","Population":"328711","2":"328711"},{"Name":"Kawagoe","0":"Kawagoe","CountryCode":"JPN","1":"JPN","Population":"327211","2":"327211"},{"Name":"Tokorozawa","0":"Tokorozawa","CountryCode":"JPN","1":"JPN","Population":"325809","2":"325809"},{"Name":"Toyama","0":"Toyama","CountryCode":"JPN","1":"JPN","Population":"325790","2":"325790"},{"Name":"Kochi","0":"Kochi","CountryCode":"JPN","1":"JPN","Population":"324710","2":"324710"},{"Name":"Kashiwa","0":"Kashiwa","CountryCode":"JPN","1":"JPN","Population":"320296","2":"320296"},{"Name":"Akita","0":"Akita","CountryCode":"JPN","1":"JPN","Population":"314440","2":"314440"},{"Name":"Miyazaki","0":"Miyazaki","CountryCode":"JPN","1":"JPN","Population":"303784","2":"303784"},{"Name":"Koshigaya","0":"Koshigaya","CountryCode":"JPN","1":"JPN","Population":"301446","2":"301446"},{"Name":"Naha","0":"Naha","CountryCode":"JPN","1":"JPN","Population":"299851","2":"299851"},{"Name":"Aomori","0":"Aomori","CountryCode":"JPN","1":"JPN","Population":"295969","2":"295969"},{"Name":"Hakodate","0":"Hakodate","CountryCode":"JPN","1":"JPN","Population":"294788","2":"294788"},{"Name":"Akashi","0":"Akashi","CountryCode":"JPN","1":"JPN","Population":"292253","2":"292253"},{"Name":"Yokkaichi","0":"Yokkaichi","CountryCode":"JPN","1":"JPN","Population":"288173","2":"288173"},{"Name":"Fukushima","0":"Fukushima","CountryCode":"JPN","1":"JPN","Population":"287525","2":"287525"},{"Name":"Morioka","0":"Morioka","CountryCode":"JPN","1":"JPN","Population":"287353","2":"287353"},{"Name":"Maebashi","0":"Maebashi","CountryCode":"JPN","1":"JPN","Population":"284473","2":"284473"},{"Name":"Kasugai","0":"Kasugai","CountryCode":"JPN","1":"JPN","Population":"282348","2":"282348"},{"Name":"Otsu","0":"Otsu","CountryCode":"JPN","1":"JPN","Population":"282070","2":"282070"},{"Name":"Ichihara","0":"Ichihara","CountryCode":"JPN","1":"JPN","Population":"279280","2":"279280"},{"Name":"Yao","0":"Yao","CountryCode":"JPN","1":"JPN","Population":"276421","2":"276421"},{"Name":"Ichinomiya","0":"Ichinomiya","CountryCode":"JPN","1":"JPN","Population":"270828","2":"270828"},{"Name":"Tokushima","0":"Tokushima","CountryCode":"JPN","1":"JPN","Population":"269649","2":"269649"},{"Name":"Kakogawa","0":"Kakogawa","CountryCode":"JPN","1":"JPN","Population":"266281","2":"266281"},{"Name":"Ibaraki","0":"Ibaraki","CountryCode":"JPN","1":"JPN","Population":"261020","2":"261020"},{"Name":"Neyagawa","0":"Neyagawa","CountryCode":"JPN","1":"JPN","Population":"257315","2":"257315"},{"Name":"Shimonoseki","0":"Shimonoseki","CountryCode":"JPN","1":"JPN","Population":"257263","2":"257263"},{"Name":"Yamagata","0":"Yamagata","CountryCode":"JPN","1":"JPN","Population":"255617","2":"255617"},{"Name":"Fukui","0":"Fukui","CountryCode":"JPN","1":"JPN","Population":"254818","2":"254818"},{"Name":"Hiratsuka","0":"Hiratsuka","CountryCode":"JPN","1":"JPN","Population":"254207","2":"254207"},{"Name":"Mito","0":"Mito","CountryCode":"JPN","1":"JPN","Population":"246559","2":"246559"},{"Name":"Sasebo","0":"Sasebo","CountryCode":"JPN","1":"JPN","Population":"244240","2":"244240"},{"Name":"Hachinohe","0":"Hachinohe","CountryCode":"JPN","1":"JPN","Population":"242979","2":"242979"},{"Name":"Takasaki","0":"Takasaki","CountryCode":"JPN","1":"JPN","Population":"239124","2":"239124"},{"Name":"Shimizu","0":"Shimizu","CountryCode":"JPN","1":"JPN","Population":"239123","2":"239123"},{"Name":"Kurume","0":"Kurume","CountryCode":"JPN","1":"JPN","Population":"235611","2":"235611"},{"Name":"Fuji","0":"Fuji","CountryCode":"JPN","1":"JPN","Population":"231527","2":"231527"},{"Name":"Soka","0":"Soka","CountryCode":"JPN","1":"JPN","Population":"222768","2":"222768"},{"Name":"Fuchu","0":"Fuchu","CountryCode":"JPN","1":"JPN","Population":"220576","2":"220576"},{"Name":"Chigasaki","0":"Chigasaki","CountryCode":"JPN","1":"JPN","Population":"216015","2":"216015"},{"Name":"Atsugi","0":"Atsugi","CountryCode":"JPN","1":"JPN","Population":"212407","2":"212407"},{"Name":"Numazu","0":"Numazu","CountryCode":"JPN","1":"JPN","Population":"211382","2":"211382"},{"Name":"Ageo","0":"Ageo","CountryCode":"JPN","1":"JPN","Population":"209442","2":"209442"},{"Name":"Yamato","0":"Yamato","CountryCode":"JPN","1":"JPN","Population":"208234","2":"208234"},{"Name":"Matsumoto","0":"Matsumoto","CountryCode":"JPN","1":"JPN","Population":"206801","2":"206801"},{"Name":"Kure","0":"Kure","CountryCode":"JPN","1":"JPN","Population":"206504","2":"206504"},{"Name":"Takarazuka","0":"Takarazuka","CountryCode":"JPN","1":"JPN","Population":"205993","2":"205993"},{"Name":"Kasukabe","0":"Kasukabe","CountryCode":"JPN","1":"JPN","Population":"201838","2":"201838"},{"Name":"Chofu","0":"Chofu","CountryCode":"JPN","1":"JPN","Population":"201585","2":"201585"},{"Name":"Odawara","0":"Odawara","CountryCode":"JPN","1":"JPN","Population":"200171","2":"200171"},{"Name":"Kofu","0":"Kofu","CountryCode":"JPN","1":"JPN","Population":"199753","2":"199753"},{"Name":"Kushiro","0":"Kushiro","CountryCode":"JPN","1":"JPN","Population":"197608","2":"197608"},{"Name":"Kishiwada","0":"Kishiwada","CountryCode":"JPN","1":"JPN","Population":"197276","2":"197276"},{"Name":"Hitachi","0":"Hitachi","CountryCode":"JPN","1":"JPN","Population":"196622","2":"196622"},{"Name":"Nagaoka","0":"Nagaoka","CountryCode":"JPN","1":"JPN","Population":"192407","2":"192407"},{"Name":"Itami","0":"Itami","CountryCode":"JPN","1":"JPN","Population":"190886","2":"190886"},{"Name":"Uji","0":"Uji","CountryCode":"JPN","1":"JPN","Population":"188735","2":"188735"},{"Name":"Suzuka","0":"Suzuka","CountryCode":"JPN","1":"JPN","Population":"184061","2":"184061"},{"Name":"Hirosaki","0":"Hirosaki","CountryCode":"JPN","1":"JPN","Population":"177522","2":"177522"},{"Name":"Ube","0":"Ube","CountryCode":"JPN","1":"JPN","Population":"175206","2":"175206"},{"Name":"Kodaira","0":"Kodaira","CountryCode":"JPN","1":"JPN","Population":"174984","2":"174984"},{"Name":"Takaoka","0":"Takaoka","CountryCode":"JPN","1":"JPN","Population":"174380","2":"174380"},{"Name":"Obihiro","0":"Obihiro","CountryCode":"JPN","1":"JPN","Population":"173685","2":"173685"},{"Name":"Tomakomai","0":"Tomakomai","CountryCode":"JPN","1":"JPN","Population":"171958","2":"171958"},{"Name":"Saga","0":"Saga","CountryCode":"JPN","1":"JPN","Population":"170034","2":"170034"},{"Name":"Sakura","0":"Sakura","CountryCode":"JPN","1":"JPN","Population":"168072","2":"168072"},{"Name":"Kamakura","0":"Kamakura","CountryCode":"JPN","1":"JPN","Population":"167661","2":"167661"},{"Name":"Mitaka","0":"Mitaka","CountryCode":"JPN","1":"JPN","Population":"167268","2":"167268"},{"Name":"Izumi","0":"Izumi","CountryCode":"JPN","1":"JPN","Population":"166979","2":"166979"},{"Name":"Hino","0":"Hino","CountryCode":"JPN","1":"JPN","Population":"166770","2":"166770"},{"Name":"Hadano","0":"Hadano","CountryCode":"JPN","1":"JPN","Population":"166512","2":"166512"},{"Name":"Ashikaga","0":"Ashikaga","CountryCode":"JPN","1":"JPN","Population":"165243","2":"165243"},{"Name":"Tsu","0":"Tsu","CountryCode":"JPN","1":"JPN","Population":"164543","2":"164543"},{"Name":"Sayama","0":"Sayama","CountryCode":"JPN","1":"JPN","Population":"162472","2":"162472"},{"Name":"Yachiyo","0":"Yachiyo","CountryCode":"JPN","1":"JPN","Population":"161222","2":"161222"},{"Name":"Tsukuba","0":"Tsukuba","CountryCode":"JPN","1":"JPN","Population":"160768","2":"160768"},{"Name":"Tachikawa","0":"Tachikawa","CountryCode":"JPN","1":"JPN","Population":"159430","2":"159430"},{"Name":"Kumagaya","0":"Kumagaya","CountryCode":"JPN","1":"JPN","Population":"157171","2":"157171"},{"Name":"Moriguchi","0":"Moriguchi","CountryCode":"JPN","1":"JPN","Population":"155941","2":"155941"},{"Name":"Otaru","0":"Otaru","CountryCode":"JPN","1":"JPN","Population":"155784","2":"155784"},{"Name":"Anjo","0":"Anjo","CountryCode":"JPN","1":"JPN","Population":"153823","2":"153823"},{"Name":"Narashino","0":"Narashino","CountryCode":"JPN","1":"JPN","Population":"152849","2":"152849"},{"Name":"Oyama","0":"Oyama","CountryCode":"JPN","1":"JPN","Population":"152820","2":"152820"},{"Name":"Ogaki","0":"Ogaki","CountryCode":"JPN","1":"JPN","Population":"151758","2":"151758"},{"Name":"Matsue","0":"Matsue","CountryCode":"JPN","1":"JPN","Population":"149821","2":"149821"},{"Name":"Kawanishi","0":"Kawanishi","CountryCode":"JPN","1":"JPN","Population":"149794","2":"149794"},{"Name":"Hitachinaka","0":"Hitachinaka","CountryCode":"JPN","1":"JPN","Population":"148006","2":"148006"},{"Name":"Niiza","0":"Niiza","CountryCode":"JPN","1":"JPN","Population":"147744","2":"147744"},{"Name":"Nagareyama","0":"Nagareyama","CountryCode":"JPN","1":"JPN","Population":"147738","2":"147738"},{"Name":"Tottori","0":"Tottori","CountryCode":"JPN","1":"JPN","Population":"147523","2":"147523"},{"Name":"Tama","0":"Tama","CountryCode":"JPN","1":"JPN","Population":"146712","2":"146712"},{"Name":"Iruma","0":"Iruma","CountryCode":"JPN","1":"JPN","Population":"145922","2":"145922"},{"Name":"Ota","0":"Ota","CountryCode":"JPN","1":"JPN","Population":"145317","2":"145317"},{"Name":"Omuta","0":"Omuta","CountryCode":"JPN","1":"JPN","Population":"142889","2":"142889"},{"Name":"Komaki","0":"Komaki","CountryCode":"JPN","1":"JPN","Population":"139827","2":"139827"},{"Name":"Ome","0":"Ome","CountryCode":"JPN","1":"JPN","Population":"139216","2":"139216"},{"Name":"Kadoma","0":"Kadoma","CountryCode":"JPN","1":"JPN","Population":"138953","2":"138953"},{"Name":"Yamaguchi","0":"Yamaguchi","CountryCode":"JPN","1":"JPN","Population":"138210","2":"138210"},{"Name":"Higashimurayama","0":"Higashimurayama","CountryCode":"JPN","1":"JPN","Population":"136970","2":"136970"},{"Name":"Yonago","0":"Yonago","CountryCode":"JPN","1":"JPN","Population":"136461","2":"136461"},{"Name":"Matsubara","0":"Matsubara","CountryCode":"JPN","1":"JPN","Population":"135010","2":"135010"},{"Name":"Musashino","0":"Musashino","CountryCode":"JPN","1":"JPN","Population":"134426","2":"134426"},{"Name":"Tsuchiura","0":"Tsuchiura","CountryCode":"JPN","1":"JPN","Population":"134072","2":"134072"},{"Name":"Joetsu","0":"Joetsu","CountryCode":"JPN","1":"JPN","Population":"133505","2":"133505"},{"Name":"Miyakonojo","0":"Miyakonojo","CountryCode":"JPN","1":"JPN","Population":"133183","2":"133183"},{"Name":"Misato","0":"Misato","CountryCode":"JPN","1":"JPN","Population":"132957","2":"132957"},{"Name":"Kakamigahara","0":"Kakamigahara","CountryCode":"JPN","1":"JPN","Population":"131831","2":"131831"},{"Name":"Daito","0":"Daito","CountryCode":"JPN","1":"JPN","Population":"130594","2":"130594"},{"Name":"Seto","0":"Seto","CountryCode":"JPN","1":"JPN","Population":"130470","2":"130470"},{"Name":"Kariya","0":"Kariya","CountryCode":"JPN","1":"JPN","Population":"127969","2":"127969"},{"Name":"Urayasu","0":"Urayasu","CountryCode":"JPN","1":"JPN","Population":"127550","2":"127550"},{"Name":"Beppu","0":"Beppu","CountryCode":"JPN","1":"JPN","Population":"127486","2":"127486"},{"Name":"Niihama","0":"Niihama","CountryCode":"JPN","1":"JPN","Population":"127207","2":"127207"},{"Name":"Minoo","0":"Minoo","CountryCode":"JPN","1":"JPN","Population":"127026","2":"127026"},{"Name":"Fujieda","0":"Fujieda","CountryCode":"JPN","1":"JPN","Population":"126897","2":"126897"},{"Name":"Abiko","0":"Abiko","CountryCode":"JPN","1":"JPN","Population":"126670","2":"126670"},{"Name":"Nobeoka","0":"Nobeoka","CountryCode":"JPN","1":"JPN","Population":"125547","2":"125547"},{"Name":"Tondabayashi","0":"Tondabayashi","CountryCode":"JPN","1":"JPN","Population":"125094","2":"125094"},{"Name":"Ueda","0":"Ueda","CountryCode":"JPN","1":"JPN","Population":"124217","2":"124217"},{"Name":"Kashihara","0":"Kashihara","CountryCode":"JPN","1":"JPN","Population":"124013","2":"124013"},{"Name":"Matsusaka","0":"Matsusaka","CountryCode":"JPN","1":"JPN","Population":"123582","2":"123582"},{"Name":"Isesaki","0":"Isesaki","CountryCode":"JPN","1":"JPN","Population":"123285","2":"123285"},{"Name":"Zama","0":"Zama","CountryCode":"JPN","1":"JPN","Population":"122046","2":"122046"},{"Name":"Kisarazu","0":"Kisarazu","CountryCode":"JPN","1":"JPN","Population":"121967","2":"121967"},{"Name":"Noda","0":"Noda","CountryCode":"JPN","1":"JPN","Population":"121030","2":"121030"},{"Name":"Ishinomaki","0":"Ishinomaki","CountryCode":"JPN","1":"JPN","Population":"120963","2":"120963"},{"Name":"Fujinomiya","0":"Fujinomiya","CountryCode":"JPN","1":"JPN","Population":"119714","2":"119714"},{"Name":"Kawachinagano","0":"Kawachinagano","CountryCode":"JPN","1":"JPN","Population":"119666","2":"119666"},{"Name":"Imabari","0":"Imabari","CountryCode":"JPN","1":"JPN","Population":"119357","2":"119357"},{"Name":"Aizuwakamatsu","0":"Aizuwakamatsu","CountryCode":"JPN","1":"JPN","Population":"119287","2":"119287"},{"Name":"Higashihiroshima","0":"Higashihiroshima","CountryCode":"JPN","1":"JPN","Population":"119166","2":"119166"},{"Name":"Habikino","0":"Habikino","CountryCode":"JPN","1":"JPN","Population":"118968","2":"118968"},{"Name":"Ebetsu","0":"Ebetsu","CountryCode":"JPN","1":"JPN","Population":"118805","2":"118805"},{"Name":"Hofu","0":"Hofu","CountryCode":"JPN","1":"JPN","Population":"118751","2":"118751"},{"Name":"Kiryu","0":"Kiryu","CountryCode":"JPN","1":"JPN","Population":"118326","2":"118326"},{"Name":"Okinawa","0":"Okinawa","CountryCode":"JPN","1":"JPN","Population":"117748","2":"117748"},{"Name":"Yaizu","0":"Yaizu","CountryCode":"JPN","1":"JPN","Population":"117258","2":"117258"},{"Name":"Toyokawa","0":"Toyokawa","CountryCode":"JPN","1":"JPN","Population":"115781","2":"115781"},{"Name":"Ebina","0":"Ebina","CountryCode":"JPN","1":"JPN","Population":"115571","2":"115571"},{"Name":"Asaka","0":"Asaka","CountryCode":"JPN","1":"JPN","Population":"114815","2":"114815"},{"Name":"Higashikurume","0":"Higashikurume","CountryCode":"JPN","1":"JPN","Population":"111666","2":"111666"},{"Name":"Ikoma","0":"Ikoma","CountryCode":"JPN","1":"JPN","Population":"111645","2":"111645"},{"Name":"Kitami","0":"Kitami","CountryCode":"JPN","1":"JPN","Population":"111295","2":"111295"},{"Name":"Koganei","0":"Koganei","CountryCode":"JPN","1":"JPN","Population":"110969","2":"110969"},{"Name":"Iwatsuki","0":"Iwatsuki","CountryCode":"JPN","1":"JPN","Population":"110034","2":"110034"},{"Name":"Mishima","0":"Mishima","CountryCode":"JPN","1":"JPN","Population":"109699","2":"109699"},{"Name":"Handa","0":"Handa","CountryCode":"JPN","1":"JPN","Population":"108600","2":"108600"},{"Name":"Muroran","0":"Muroran","CountryCode":"JPN","1":"JPN","Population":"108275","2":"108275"},{"Name":"Komatsu","0":"Komatsu","CountryCode":"JPN","1":"JPN","Population":"107937","2":"107937"},{"Name":"Yatsushiro","0":"Yatsushiro","CountryCode":"JPN","1":"JPN","Population":"107661","2":"107661"},{"Name":"Iida","0":"Iida","CountryCode":"JPN","1":"JPN","Population":"107583","2":"107583"},{"Name":"Tokuyama","0":"Tokuyama","CountryCode":"JPN","1":"JPN","Population":"107078","2":"107078"},{"Name":"Kokubunji","0":"Kokubunji","CountryCode":"JPN","1":"JPN","Population":"106996","2":"106996"},{"Name":"Akishima","0":"Akishima","CountryCode":"JPN","1":"JPN","Population":"106914","2":"106914"},{"Name":"Iwakuni","0":"Iwakuni","CountryCode":"JPN","1":"JPN","Population":"106647","2":"106647"},{"Name":"Kusatsu","0":"Kusatsu","CountryCode":"JPN","1":"JPN","Population":"106232","2":"106232"},{"Name":"Kuwana","0":"Kuwana","CountryCode":"JPN","1":"JPN","Population":"106121","2":"106121"},{"Name":"Sanda","0":"Sanda","CountryCode":"JPN","1":"JPN","Population":"105643","2":"105643"},{"Name":"Hikone","0":"Hikone","CountryCode":"JPN","1":"JPN","Population":"105508","2":"105508"},{"Name":"Toda","0":"Toda","CountryCode":"JPN","1":"JPN","Population":"103969","2":"103969"},{"Name":"Tajimi","0":"Tajimi","CountryCode":"JPN","1":"JPN","Population":"103171","2":"103171"},{"Name":"Ikeda","0":"Ikeda","CountryCode":"JPN","1":"JPN","Population":"102710","2":"102710"},{"Name":"Fukaya","0":"Fukaya","CountryCode":"JPN","1":"JPN","Population":"102156","2":"102156"},{"Name":"Ise","0":"Ise","CountryCode":"JPN","1":"JPN","Population":"101732","2":"101732"},{"Name":"Sakata","0":"Sakata","CountryCode":"JPN","1":"JPN","Population":"101651","2":"101651"},{"Name":"Kasuga","0":"Kasuga","CountryCode":"JPN","1":"JPN","Population":"101344","2":"101344"},{"Name":"Kamagaya","0":"Kamagaya","CountryCode":"JPN","1":"JPN","Population":"100821","2":"100821"},{"Name":"Tsuruoka","0":"Tsuruoka","CountryCode":"JPN","1":"JPN","Population":"100713","2":"100713"},{"Name":"Hoya","0":"Hoya","CountryCode":"JPN","1":"JPN","Population":"100313","2":"100313"},{"Name":"Nishio","0":"Nishio","CountryCode":"JPN","1":"JPN","Population":"100032","2":"100032"},{"Name":"Tokai","0":"Tokai","CountryCode":"JPN","1":"JPN","Population":"99738","2":"99738"},{"Name":"Inazawa","0":"Inazawa","CountryCode":"JPN","1":"JPN","Population":"98746","2":"98746"},{"Name":"Sakado","0":"Sakado","CountryCode":"JPN","1":"JPN","Population":"98221","2":"98221"},{"Name":"Isehara","0":"Isehara","CountryCode":"JPN","1":"JPN","Population":"98123","2":"98123"},{"Name":"Takasago","0":"Takasago","CountryCode":"JPN","1":"JPN","Population":"97632","2":"97632"},{"Name":"Fujimi","0":"Fujimi","CountryCode":"JPN","1":"JPN","Population":"96972","2":"96972"},{"Name":"Urasoe","0":"Urasoe","CountryCode":"JPN","1":"JPN","Population":"96002","2":"96002"},{"Name":"Yonezawa","0":"Yonezawa","CountryCode":"JPN","1":"JPN","Population":"95592","2":"95592"},{"Name":"Konan","0":"Konan","CountryCode":"JPN","1":"JPN","Population":"95521","2":"95521"},{"Name":"Yamatokoriyama","0":"Yamatokoriyama","CountryCode":"JPN","1":"JPN","Population":"95165","2":"95165"},{"Name":"Maizuru","0":"Maizuru","CountryCode":"JPN","1":"JPN","Population":"94784","2":"94784"},{"Name":"Onomichi","0":"Onomichi","CountryCode":"JPN","1":"JPN","Population":"93756","2":"93756"},{"Name":"Higashimatsuyama","0":"Higashimatsuyama","CountryCode":"JPN","1":"JPN","Population":"93342","2":"93342"},{"Name":"Kimitsu","0":"Kimitsu","CountryCode":"JPN","1":"JPN","Population":"93216","2":"93216"},{"Name":"Isahaya","0":"Isahaya","CountryCode":"JPN","1":"JPN","Population":"93058","2":"93058"},{"Name":"Kanuma","0":"Kanuma","CountryCode":"JPN","1":"JPN","Population":"93053","2":"93053"},{"Name":"Izumisano","0":"Izumisano","CountryCode":"JPN","1":"JPN","Population":"92583","2":"92583"},{"Name":"Kameoka","0":"Kameoka","CountryCode":"JPN","1":"JPN","Population":"92398","2":"92398"},{"Name":"Mobara","0":"Mobara","CountryCode":"JPN","1":"JPN","Population":"91664","2":"91664"},{"Name":"Narita","0":"Narita","CountryCode":"JPN","1":"JPN","Population":"91470","2":"91470"},{"Name":"Kashiwazaki","0":"Kashiwazaki","CountryCode":"JPN","1":"JPN","Population":"91229","2":"91229"},{"Name":"Tsuyama","0":"Tsuyama","CountryCode":"JPN","1":"JPN","Population":"91170","2":"91170"},{"Name":"Sanaa","0":"Sanaa","CountryCode":"YEM","1":"YEM","Population":"503600","2":"503600"},{"Name":"Aden","0":"Aden","CountryCode":"YEM","1":"YEM","Population":"398300","2":"398300"},{"Name":"Taizz","0":"Taizz","CountryCode":"YEM","1":"YEM","Population":"317600","2":"317600"},{"Name":"Hodeida","0":"Hodeida","CountryCode":"YEM","1":"YEM","Population":"298500","2":"298500"},{"Name":"al-Mukalla","0":"al-Mukalla","CountryCode":"YEM","1":"YEM","Population":"122400","2":"122400"},{"Name":"Ibb","0":"Ibb","CountryCode":"YEM","1":"YEM","Population":"103300","2":"103300"},{"Name":"Amman","0":"Amman","CountryCode":"JOR","1":"JOR","Population":"1000000","2":"1000000"},{"Name":"al-Zarqa","0":"al-Zarqa","CountryCode":"JOR","1":"JOR","Population":"389815","2":"389815"},{"Name":"Irbid","0":"Irbid","CountryCode":"JOR","1":"JOR","Population":"231511","2":"231511"},{"Name":"al-Rusayfa","0":"al-Rusayfa","CountryCode":"JOR","1":"JOR","Population":"137247","2":"137247"},{"Name":"Wadi al-Sir","0":"Wadi al-Sir","CountryCode":"JOR","1":"JOR","Population":"89104","2":"89104"},{"Name":"Flying Fish Cove","0":"Flying Fish Cove","CountryCode":"CXR","1":"CXR","Population":"700","2":"700"},{"Name":"Beograd","0":"Beograd","CountryCode":"YUG","1":"YUG","Population":"1204000","2":"1204000"},{"Name":"Novi Sad","0":"Novi Sad","CountryCode":"YUG","1":"YUG","Population":"179626","2":"179626"},{"Name":"Ni\u0161","0":"Ni\u0161","CountryCode":"YUG","1":"YUG","Population":"175391","2":"175391"},{"Name":"Pri\u0161tina","0":"Pri\u0161tina","CountryCode":"YUG","1":"YUG","Population":"155496","2":"155496"},{"Name":"Kragujevac","0":"Kragujevac","CountryCode":"YUG","1":"YUG","Population":"147305","2":"147305"},{"Name":"Podgorica","0":"Podgorica","CountryCode":"YUG","1":"YUG","Population":"135000","2":"135000"},{"Name":"Subotica","0":"Subotica","CountryCode":"YUG","1":"YUG","Population":"100386","2":"100386"},{"Name":"Prizren","0":"Prizren","CountryCode":"YUG","1":"YUG","Population":"92303","2":"92303"},{"Name":"Phnom Penh","0":"Phnom Penh","CountryCode":"KHM","1":"KHM","Population":"570155","2":"570155"},{"Name":"Battambang","0":"Battambang","CountryCode":"KHM","1":"KHM","Population":"129800","2":"129800"},{"Name":"Siem Reap","0":"Siem Reap","CountryCode":"KHM","1":"KHM","Population":"105100","2":"105100"},{"Name":"Douala","0":"Douala","CountryCode":"CMR","1":"CMR","Population":"1448300","2":"1448300"},{"Name":"Yaound\u00e9","0":"Yaound\u00e9","CountryCode":"CMR","1":"CMR","Population":"1372800","2":"1372800"},{"Name":"Garoua","0":"Garoua","CountryCode":"CMR","1":"CMR","Population":"177000","2":"177000"},{"Name":"Maroua","0":"Maroua","CountryCode":"CMR","1":"CMR","Population":"143000","2":"143000"},{"Name":"Bamenda","0":"Bamenda","CountryCode":"CMR","1":"CMR","Population":"138000","2":"138000"},{"Name":"Bafoussam","0":"Bafoussam","CountryCode":"CMR","1":"CMR","Population":"131000","2":"131000"},{"Name":"Nkongsamba","0":"Nkongsamba","CountryCode":"CMR","1":"CMR","Population":"112454","2":"112454"},{"Name":"Montr\u00e9al","0":"Montr\u00e9al","CountryCode":"CAN","1":"CAN","Population":"1016376","2":"1016376"},{"Name":"Calgary","0":"Calgary","CountryCode":"CAN","1":"CAN","Population":"768082","2":"768082"},{"Name":"Toronto","0":"Toronto","CountryCode":"CAN","1":"CAN","Population":"688275","2":"688275"},{"Name":"North York","0":"North York","CountryCode":"CAN","1":"CAN","Population":"622632","2":"622632"},{"Name":"Winnipeg","0":"Winnipeg","CountryCode":"CAN","1":"CAN","Population":"618477","2":"618477"},{"Name":"Edmonton","0":"Edmonton","CountryCode":"CAN","1":"CAN","Population":"616306","2":"616306"},{"Name":"Mississauga","0":"Mississauga","CountryCode":"CAN","1":"CAN","Population":"608072","2":"608072"},{"Name":"Scarborough","0":"Scarborough","CountryCode":"CAN","1":"CAN","Population":"594501","2":"594501"},{"Name":"Vancouver","0":"Vancouver","CountryCode":"CAN","1":"CAN","Population":"514008","2":"514008"},{"Name":"Etobicoke","0":"Etobicoke","CountryCode":"CAN","1":"CAN","Population":"348845","2":"348845"},{"Name":"London","0":"London","CountryCode":"CAN","1":"CAN","Population":"339917","2":"339917"},{"Name":"Hamilton","0":"Hamilton","CountryCode":"CAN","1":"CAN","Population":"335614","2":"335614"},{"Name":"Ottawa","0":"Ottawa","CountryCode":"CAN","1":"CAN","Population":"335277","2":"335277"},{"Name":"Laval","0":"Laval","CountryCode":"CAN","1":"CAN","Population":"330393","2":"330393"},{"Name":"Surrey","0":"Surrey","CountryCode":"CAN","1":"CAN","Population":"304477","2":"304477"},{"Name":"Brampton","0":"Brampton","CountryCode":"CAN","1":"CAN","Population":"296711","2":"296711"},{"Name":"Windsor","0":"Windsor","CountryCode":"CAN","1":"CAN","Population":"207588","2":"207588"},{"Name":"Saskatoon","0":"Saskatoon","CountryCode":"CAN","1":"CAN","Population":"193647","2":"193647"},{"Name":"Kitchener","0":"Kitchener","CountryCode":"CAN","1":"CAN","Population":"189959","2":"189959"},{"Name":"Markham","0":"Markham","CountryCode":"CAN","1":"CAN","Population":"189098","2":"189098"},{"Name":"Regina","0":"Regina","CountryCode":"CAN","1":"CAN","Population":"180400","2":"180400"},{"Name":"Burnaby","0":"Burnaby","CountryCode":"CAN","1":"CAN","Population":"179209","2":"179209"},{"Name":"Qu\u00e9bec","0":"Qu\u00e9bec","CountryCode":"CAN","1":"CAN","Population":"167264","2":"167264"},{"Name":"York","0":"York","CountryCode":"CAN","1":"CAN","Population":"154980","2":"154980"},{"Name":"Richmond","0":"Richmond","CountryCode":"CAN","1":"CAN","Population":"148867","2":"148867"},{"Name":"Vaughan","0":"Vaughan","CountryCode":"CAN","1":"CAN","Population":"147889","2":"147889"},{"Name":"Burlington","0":"Burlington","CountryCode":"CAN","1":"CAN","Population":"145150","2":"145150"},{"Name":"Oshawa","0":"Oshawa","CountryCode":"CAN","1":"CAN","Population":"140173","2":"140173"},{"Name":"Oakville","0":"Oakville","CountryCode":"CAN","1":"CAN","Population":"139192","2":"139192"},{"Name":"Saint Catharines","0":"Saint Catharines","CountryCode":"CAN","1":"CAN","Population":"136216","2":"136216"},{"Name":"Longueuil","0":"Longueuil","CountryCode":"CAN","1":"CAN","Population":"127977","2":"127977"},{"Name":"Richmond Hill","0":"Richmond Hill","CountryCode":"CAN","1":"CAN","Population":"116428","2":"116428"},{"Name":"Thunder Bay","0":"Thunder Bay","CountryCode":"CAN","1":"CAN","Population":"115913","2":"115913"},{"Name":"Nepean","0":"Nepean","CountryCode":"CAN","1":"CAN","Population":"115100","2":"115100"},{"Name":"Cape Breton","0":"Cape Breton","CountryCode":"CAN","1":"CAN","Population":"114733","2":"114733"},{"Name":"East York","0":"East York","CountryCode":"CAN","1":"CAN","Population":"114034","2":"114034"},{"Name":"Halifax","0":"Halifax","CountryCode":"CAN","1":"CAN","Population":"113910","2":"113910"},{"Name":"Cambridge","0":"Cambridge","CountryCode":"CAN","1":"CAN","Population":"109186","2":"109186"},{"Name":"Gloucester","0":"Gloucester","CountryCode":"CAN","1":"CAN","Population":"107314","2":"107314"},{"Name":"Abbotsford","0":"Abbotsford","CountryCode":"CAN","1":"CAN","Population":"105403","2":"105403"},{"Name":"Guelph","0":"Guelph","CountryCode":"CAN","1":"CAN","Population":"103593","2":"103593"},{"Name":"Saint John\u00b4s","0":"Saint John\u00b4s","CountryCode":"CAN","1":"CAN","Population":"101936","2":"101936"},{"Name":"Coquitlam","0":"Coquitlam","CountryCode":"CAN","1":"CAN","Population":"101820","2":"101820"},{"Name":"Saanich","0":"Saanich","CountryCode":"CAN","1":"CAN","Population":"101388","2":"101388"},{"Name":"Gatineau","0":"Gatineau","CountryCode":"CAN","1":"CAN","Population":"100702","2":"100702"},{"Name":"Delta","0":"Delta","CountryCode":"CAN","1":"CAN","Population":"95411","2":"95411"},{"Name":"Sudbury","0":"Sudbury","CountryCode":"CAN","1":"CAN","Population":"92686","2":"92686"},{"Name":"Kelowna","0":"Kelowna","CountryCode":"CAN","1":"CAN","Population":"89442","2":"89442"},{"Name":"Barrie","0":"Barrie","CountryCode":"CAN","1":"CAN","Population":"89269","2":"89269"},{"Name":"Praia","0":"Praia","CountryCode":"CPV","1":"CPV","Population":"94800","2":"94800"},{"Name":"Almaty","0":"Almaty","CountryCode":"KAZ","1":"KAZ","Population":"1129400","2":"1129400"},{"Name":"Qaraghandy","0":"Qaraghandy","CountryCode":"KAZ","1":"KAZ","Population":"436900","2":"436900"},{"Name":"Shymkent","0":"Shymkent","CountryCode":"KAZ","1":"KAZ","Population":"360100","2":"360100"},{"Name":"Taraz","0":"Taraz","CountryCode":"KAZ","1":"KAZ","Population":"330100","2":"330100"},{"Name":"Astana","0":"Astana","CountryCode":"KAZ","1":"KAZ","Population":"311200","2":"311200"},{"Name":"\u00d6skemen","0":"\u00d6skemen","CountryCode":"KAZ","1":"KAZ","Population":"311000","2":"311000"},{"Name":"Pavlodar","0":"Pavlodar","CountryCode":"KAZ","1":"KAZ","Population":"300500","2":"300500"},{"Name":"Semey","0":"Semey","CountryCode":"KAZ","1":"KAZ","Population":"269600","2":"269600"},{"Name":"Aqt\u00f6be","0":"Aqt\u00f6be","CountryCode":"KAZ","1":"KAZ","Population":"253100","2":"253100"},{"Name":"Qostanay","0":"Qostanay","CountryCode":"KAZ","1":"KAZ","Population":"221400","2":"221400"},{"Name":"Petropavl","0":"Petropavl","CountryCode":"KAZ","1":"KAZ","Population":"203500","2":"203500"},{"Name":"Oral","0":"Oral","CountryCode":"KAZ","1":"KAZ","Population":"195500","2":"195500"},{"Name":"Temirtau","0":"Temirtau","CountryCode":"KAZ","1":"KAZ","Population":"170500","2":"170500"},{"Name":"Qyzylorda","0":"Qyzylorda","CountryCode":"KAZ","1":"KAZ","Population":"157400","2":"157400"},{"Name":"Aqtau","0":"Aqtau","CountryCode":"KAZ","1":"KAZ","Population":"143400","2":"143400"},{"Name":"Atyrau","0":"Atyrau","CountryCode":"KAZ","1":"KAZ","Population":"142500","2":"142500"},{"Name":"Ekibastuz","0":"Ekibastuz","CountryCode":"KAZ","1":"KAZ","Population":"127200","2":"127200"},{"Name":"K\u00f6kshetau","0":"K\u00f6kshetau","CountryCode":"KAZ","1":"KAZ","Population":"123400","2":"123400"},{"Name":"Rudnyy","0":"Rudnyy","CountryCode":"KAZ","1":"KAZ","Population":"109500","2":"109500"},{"Name":"Taldyqorghan","0":"Taldyqorghan","CountryCode":"KAZ","1":"KAZ","Population":"98000","2":"98000"},{"Name":"Zhezqazghan","0":"Zhezqazghan","CountryCode":"KAZ","1":"KAZ","Population":"90000","2":"90000"},{"Name":"Nairobi","0":"Nairobi","CountryCode":"KEN","1":"KEN","Population":"2290000","2":"2290000"},{"Name":"Mombasa","0":"Mombasa","CountryCode":"KEN","1":"KEN","Population":"461753","2":"461753"},{"Name":"Kisumu","0":"Kisumu","CountryCode":"KEN","1":"KEN","Population":"192733","2":"192733"},{"Name":"Nakuru","0":"Nakuru","CountryCode":"KEN","1":"KEN","Population":"163927","2":"163927"},{"Name":"Machakos","0":"Machakos","CountryCode":"KEN","1":"KEN","Population":"116293","2":"116293"},{"Name":"Eldoret","0":"Eldoret","CountryCode":"KEN","1":"KEN","Population":"111882","2":"111882"},{"Name":"Meru","0":"Meru","CountryCode":"KEN","1":"KEN","Population":"94947","2":"94947"},{"Name":"Nyeri","0":"Nyeri","CountryCode":"KEN","1":"KEN","Population":"91258","2":"91258"},{"Name":"Bangui","0":"Bangui","CountryCode":"CAF","1":"CAF","Population":"524000","2":"524000"},{"Name":"Shanghai","0":"Shanghai","CountryCode":"CHN","1":"CHN","Population":"9696300","2":"9696300"},{"Name":"Peking","0":"Peking","CountryCode":"CHN","1":"CHN","Population":"7472000","2":"7472000"},{"Name":"Chongqing","0":"Chongqing","CountryCode":"CHN","1":"CHN","Population":"6351600","2":"6351600"},{"Name":"Tianjin","0":"Tianjin","CountryCode":"CHN","1":"CHN","Population":"5286800","2":"5286800"},{"Name":"Wuhan","0":"Wuhan","CountryCode":"CHN","1":"CHN","Population":"4344600","2":"4344600"},{"Name":"Harbin","0":"Harbin","CountryCode":"CHN","1":"CHN","Population":"4289800","2":"4289800"},{"Name":"Shenyang","0":"Shenyang","CountryCode":"CHN","1":"CHN","Population":"4265200","2":"4265200"},{"Name":"Kanton [Guangzhou]","0":"Kanton [Guangzhou]","CountryCode":"CHN","1":"CHN","Population":"4256300","2":"4256300"},{"Name":"Chengdu","0":"Chengdu","CountryCode":"CHN","1":"CHN","Population":"3361500","2":"3361500"},{"Name":"Nanking [Nanjing]","0":"Nanking [Nanjing]","CountryCode":"CHN","1":"CHN","Population":"2870300","2":"2870300"},{"Name":"Changchun","0":"Changchun","CountryCode":"CHN","1":"CHN","Population":"2812000","2":"2812000"},{"Name":"Xi\u00b4an","0":"Xi\u00b4an","CountryCode":"CHN","1":"CHN","Population":"2761400","2":"2761400"},{"Name":"Dalian","0":"Dalian","CountryCode":"CHN","1":"CHN","Population":"2697000","2":"2697000"},{"Name":"Qingdao","0":"Qingdao","CountryCode":"CHN","1":"CHN","Population":"2596000","2":"2596000"},{"Name":"Jinan","0":"Jinan","CountryCode":"CHN","1":"CHN","Population":"2278100","2":"2278100"},{"Name":"Hangzhou","0":"Hangzhou","CountryCode":"CHN","1":"CHN","Population":"2190500","2":"2190500"},{"Name":"Zhengzhou","0":"Zhengzhou","CountryCode":"CHN","1":"CHN","Population":"2107200","2":"2107200"},{"Name":"Shijiazhuang","0":"Shijiazhuang","CountryCode":"CHN","1":"CHN","Population":"2041500","2":"2041500"},{"Name":"Taiyuan","0":"Taiyuan","CountryCode":"CHN","1":"CHN","Population":"1968400","2":"1968400"},{"Name":"Kunming","0":"Kunming","CountryCode":"CHN","1":"CHN","Population":"1829500","2":"1829500"},{"Name":"Changsha","0":"Changsha","CountryCode":"CHN","1":"CHN","Population":"1809800","2":"1809800"},{"Name":"Nanchang","0":"Nanchang","CountryCode":"CHN","1":"CHN","Population":"1691600","2":"1691600"},{"Name":"Fuzhou","0":"Fuzhou","CountryCode":"CHN","1":"CHN","Population":"1593800","2":"1593800"},{"Name":"Lanzhou","0":"Lanzhou","CountryCode":"CHN","1":"CHN","Population":"1565800","2":"1565800"},{"Name":"Guiyang","0":"Guiyang","CountryCode":"CHN","1":"CHN","Population":"1465200","2":"1465200"},{"Name":"Ningbo","0":"Ningbo","CountryCode":"CHN","1":"CHN","Population":"1371200","2":"1371200"},{"Name":"Hefei","0":"Hefei","CountryCode":"CHN","1":"CHN","Population":"1369100","2":"1369100"},{"Name":"Urumt\u0161i [\u00dcr\u00fcmqi]","0":"Urumt\u0161i [\u00dcr\u00fcmqi]","CountryCode":"CHN","1":"CHN","Population":"1310100","2":"1310100"},{"Name":"Anshan","0":"Anshan","CountryCode":"CHN","1":"CHN","Population":"1200000","2":"1200000"},{"Name":"Fushun","0":"Fushun","CountryCode":"CHN","1":"CHN","Population":"1200000","2":"1200000"},{"Name":"Nanning","0":"Nanning","CountryCode":"CHN","1":"CHN","Population":"1161800","2":"1161800"},{"Name":"Zibo","0":"Zibo","CountryCode":"CHN","1":"CHN","Population":"1140000","2":"1140000"},{"Name":"Qiqihar","0":"Qiqihar","CountryCode":"CHN","1":"CHN","Population":"1070000","2":"1070000"},{"Name":"Jilin","0":"Jilin","CountryCode":"CHN","1":"CHN","Population":"1040000","2":"1040000"},{"Name":"Tangshan","0":"Tangshan","CountryCode":"CHN","1":"CHN","Population":"1040000","2":"1040000"},{"Name":"Baotou","0":"Baotou","CountryCode":"CHN","1":"CHN","Population":"980000","2":"980000"},{"Name":"Shenzhen","0":"Shenzhen","CountryCode":"CHN","1":"CHN","Population":"950500","2":"950500"},{"Name":"Hohhot","0":"Hohhot","CountryCode":"CHN","1":"CHN","Population":"916700","2":"916700"},{"Name":"Handan","0":"Handan","CountryCode":"CHN","1":"CHN","Population":"840000","2":"840000"},{"Name":"Wuxi","0":"Wuxi","CountryCode":"CHN","1":"CHN","Population":"830000","2":"830000"},{"Name":"Xuzhou","0":"Xuzhou","CountryCode":"CHN","1":"CHN","Population":"810000","2":"810000"},{"Name":"Datong","0":"Datong","CountryCode":"CHN","1":"CHN","Population":"800000","2":"800000"},{"Name":"Yichun","0":"Yichun","CountryCode":"CHN","1":"CHN","Population":"800000","2":"800000"},{"Name":"Benxi","0":"Benxi","CountryCode":"CHN","1":"CHN","Population":"770000","2":"770000"},{"Name":"Luoyang","0":"Luoyang","CountryCode":"CHN","1":"CHN","Population":"760000","2":"760000"},{"Name":"Suzhou","0":"Suzhou","CountryCode":"CHN","1":"CHN","Population":"710000","2":"710000"},{"Name":"Xining","0":"Xining","CountryCode":"CHN","1":"CHN","Population":"700200","2":"700200"},{"Name":"Huainan","0":"Huainan","CountryCode":"CHN","1":"CHN","Population":"700000","2":"700000"},{"Name":"Jixi","0":"Jixi","CountryCode":"CHN","1":"CHN","Population":"683885","2":"683885"},{"Name":"Daqing","0":"Daqing","CountryCode":"CHN","1":"CHN","Population":"660000","2":"660000"},{"Name":"Fuxin","0":"Fuxin","CountryCode":"CHN","1":"CHN","Population":"640000","2":"640000"},{"Name":"Amoy [Xiamen]","0":"Amoy [Xiamen]","CountryCode":"CHN","1":"CHN","Population":"627500","2":"627500"},{"Name":"Liuzhou","0":"Liuzhou","CountryCode":"CHN","1":"CHN","Population":"610000","2":"610000"},{"Name":"Shantou","0":"Shantou","CountryCode":"CHN","1":"CHN","Population":"580000","2":"580000"},{"Name":"Jinzhou","0":"Jinzhou","CountryCode":"CHN","1":"CHN","Population":"570000","2":"570000"},{"Name":"Mudanjiang","0":"Mudanjiang","CountryCode":"CHN","1":"CHN","Population":"570000","2":"570000"},{"Name":"Yinchuan","0":"Yinchuan","CountryCode":"CHN","1":"CHN","Population":"544500","2":"544500"},{"Name":"Changzhou","0":"Changzhou","CountryCode":"CHN","1":"CHN","Population":"530000","2":"530000"},{"Name":"Zhangjiakou","0":"Zhangjiakou","CountryCode":"CHN","1":"CHN","Population":"530000","2":"530000"},{"Name":"Dandong","0":"Dandong","CountryCode":"CHN","1":"CHN","Population":"520000","2":"520000"},{"Name":"Hegang","0":"Hegang","CountryCode":"CHN","1":"CHN","Population":"520000","2":"520000"},{"Name":"Kaifeng","0":"Kaifeng","CountryCode":"CHN","1":"CHN","Population":"510000","2":"510000"},{"Name":"Jiamusi","0":"Jiamusi","CountryCode":"CHN","1":"CHN","Population":"493409","2":"493409"},{"Name":"Liaoyang","0":"Liaoyang","CountryCode":"CHN","1":"CHN","Population":"492559","2":"492559"},{"Name":"Hengyang","0":"Hengyang","CountryCode":"CHN","1":"CHN","Population":"487148","2":"487148"},{"Name":"Baoding","0":"Baoding","CountryCode":"CHN","1":"CHN","Population":"483155","2":"483155"},{"Name":"Hunjiang","0":"Hunjiang","CountryCode":"CHN","1":"CHN","Population":"482043","2":"482043"},{"Name":"Xinxiang","0":"Xinxiang","CountryCode":"CHN","1":"CHN","Population":"473762","2":"473762"},{"Name":"Huangshi","0":"Huangshi","CountryCode":"CHN","1":"CHN","Population":"457601","2":"457601"},{"Name":"Haikou","0":"Haikou","CountryCode":"CHN","1":"CHN","Population":"454300","2":"454300"},{"Name":"Yantai","0":"Yantai","CountryCode":"CHN","1":"CHN","Population":"452127","2":"452127"},{"Name":"Bengbu","0":"Bengbu","CountryCode":"CHN","1":"CHN","Population":"449245","2":"449245"},{"Name":"Xiangtan","0":"Xiangtan","CountryCode":"CHN","1":"CHN","Population":"441968","2":"441968"},{"Name":"Weifang","0":"Weifang","CountryCode":"CHN","1":"CHN","Population":"428522","2":"428522"},{"Name":"Wuhu","0":"Wuhu","CountryCode":"CHN","1":"CHN","Population":"425740","2":"425740"},{"Name":"Pingxiang","0":"Pingxiang","CountryCode":"CHN","1":"CHN","Population":"425579","2":"425579"},{"Name":"Yingkou","0":"Yingkou","CountryCode":"CHN","1":"CHN","Population":"421589","2":"421589"},{"Name":"Anyang","0":"Anyang","CountryCode":"CHN","1":"CHN","Population":"420332","2":"420332"},{"Name":"Panzhihua","0":"Panzhihua","CountryCode":"CHN","1":"CHN","Population":"415466","2":"415466"},{"Name":"Pingdingshan","0":"Pingdingshan","CountryCode":"CHN","1":"CHN","Population":"410775","2":"410775"},{"Name":"Xiangfan","0":"Xiangfan","CountryCode":"CHN","1":"CHN","Population":"410407","2":"410407"},{"Name":"Zhuzhou","0":"Zhuzhou","CountryCode":"CHN","1":"CHN","Population":"409924","2":"409924"},{"Name":"Jiaozuo","0":"Jiaozuo","CountryCode":"CHN","1":"CHN","Population":"409100","2":"409100"},{"Name":"Wenzhou","0":"Wenzhou","CountryCode":"CHN","1":"CHN","Population":"401871","2":"401871"},{"Name":"Zhangjiang","0":"Zhangjiang","CountryCode":"CHN","1":"CHN","Population":"400997","2":"400997"},{"Name":"Zigong","0":"Zigong","CountryCode":"CHN","1":"CHN","Population":"393184","2":"393184"},{"Name":"Shuangyashan","0":"Shuangyashan","CountryCode":"CHN","1":"CHN","Population":"386081","2":"386081"},{"Name":"Zaozhuang","0":"Zaozhuang","CountryCode":"CHN","1":"CHN","Population":"380846","2":"380846"},{"Name":"Yakeshi","0":"Yakeshi","CountryCode":"CHN","1":"CHN","Population":"377869","2":"377869"},{"Name":"Yichang","0":"Yichang","CountryCode":"CHN","1":"CHN","Population":"371601","2":"371601"},{"Name":"Zhenjiang","0":"Zhenjiang","CountryCode":"CHN","1":"CHN","Population":"368316","2":"368316"},{"Name":"Huaibei","0":"Huaibei","CountryCode":"CHN","1":"CHN","Population":"366549","2":"366549"},{"Name":"Qinhuangdao","0":"Qinhuangdao","CountryCode":"CHN","1":"CHN","Population":"364972","2":"364972"},{"Name":"Guilin","0":"Guilin","CountryCode":"CHN","1":"CHN","Population":"364130","2":"364130"},{"Name":"Liupanshui","0":"Liupanshui","CountryCode":"CHN","1":"CHN","Population":"363954","2":"363954"},{"Name":"Panjin","0":"Panjin","CountryCode":"CHN","1":"CHN","Population":"362773","2":"362773"},{"Name":"Yangquan","0":"Yangquan","CountryCode":"CHN","1":"CHN","Population":"362268","2":"362268"},{"Name":"Jinxi","0":"Jinxi","CountryCode":"CHN","1":"CHN","Population":"357052","2":"357052"},{"Name":"Liaoyuan","0":"Liaoyuan","CountryCode":"CHN","1":"CHN","Population":"354141","2":"354141"},{"Name":"Lianyungang","0":"Lianyungang","CountryCode":"CHN","1":"CHN","Population":"354139","2":"354139"},{"Name":"Xianyang","0":"Xianyang","CountryCode":"CHN","1":"CHN","Population":"352125","2":"352125"},{"Name":"Tai\u00b4an","0":"Tai\u00b4an","CountryCode":"CHN","1":"CHN","Population":"350696","2":"350696"},{"Name":"Chifeng","0":"Chifeng","CountryCode":"CHN","1":"CHN","Population":"350077","2":"350077"},{"Name":"Shaoguan","0":"Shaoguan","CountryCode":"CHN","1":"CHN","Population":"350043","2":"350043"},{"Name":"Nantong","0":"Nantong","CountryCode":"CHN","1":"CHN","Population":"343341","2":"343341"},{"Name":"Leshan","0":"Leshan","CountryCode":"CHN","1":"CHN","Population":"341128","2":"341128"},{"Name":"Baoji","0":"Baoji","CountryCode":"CHN","1":"CHN","Population":"337765","2":"337765"},{"Name":"Linyi","0":"Linyi","CountryCode":"CHN","1":"CHN","Population":"324720","2":"324720"},{"Name":"Tonghua","0":"Tonghua","CountryCode":"CHN","1":"CHN","Population":"324600","2":"324600"},{"Name":"Siping","0":"Siping","CountryCode":"CHN","1":"CHN","Population":"317223","2":"317223"},{"Name":"Changzhi","0":"Changzhi","CountryCode":"CHN","1":"CHN","Population":"317144","2":"317144"},{"Name":"Tengzhou","0":"Tengzhou","CountryCode":"CHN","1":"CHN","Population":"315083","2":"315083"},{"Name":"Chaozhou","0":"Chaozhou","CountryCode":"CHN","1":"CHN","Population":"313469","2":"313469"},{"Name":"Yangzhou","0":"Yangzhou","CountryCode":"CHN","1":"CHN","Population":"312892","2":"312892"},{"Name":"Dongwan","0":"Dongwan","CountryCode":"CHN","1":"CHN","Population":"308669","2":"308669"},{"Name":"Ma\u00b4anshan","0":"Ma\u00b4anshan","CountryCode":"CHN","1":"CHN","Population":"305421","2":"305421"},{"Name":"Foshan","0":"Foshan","CountryCode":"CHN","1":"CHN","Population":"303160","2":"303160"},{"Name":"Yueyang","0":"Yueyang","CountryCode":"CHN","1":"CHN","Population":"302800","2":"302800"},{"Name":"Xingtai","0":"Xingtai","CountryCode":"CHN","1":"CHN","Population":"302789","2":"302789"},{"Name":"Changde","0":"Changde","CountryCode":"CHN","1":"CHN","Population":"301276","2":"301276"},{"Name":"Shihezi","0":"Shihezi","CountryCode":"CHN","1":"CHN","Population":"299676","2":"299676"},{"Name":"Yancheng","0":"Yancheng","CountryCode":"CHN","1":"CHN","Population":"296831","2":"296831"},{"Name":"Jiujiang","0":"Jiujiang","CountryCode":"CHN","1":"CHN","Population":"291187","2":"291187"},{"Name":"Dongying","0":"Dongying","CountryCode":"CHN","1":"CHN","Population":"281728","2":"281728"},{"Name":"Shashi","0":"Shashi","CountryCode":"CHN","1":"CHN","Population":"281352","2":"281352"},{"Name":"Xintai","0":"Xintai","CountryCode":"CHN","1":"CHN","Population":"281248","2":"281248"},{"Name":"Jingdezhen","0":"Jingdezhen","CountryCode":"CHN","1":"CHN","Population":"281183","2":"281183"},{"Name":"Tongchuan","0":"Tongchuan","CountryCode":"CHN","1":"CHN","Population":"280657","2":"280657"},{"Name":"Zhongshan","0":"Zhongshan","CountryCode":"CHN","1":"CHN","Population":"278829","2":"278829"},{"Name":"Shiyan","0":"Shiyan","CountryCode":"CHN","1":"CHN","Population":"273786","2":"273786"},{"Name":"Tieli","0":"Tieli","CountryCode":"CHN","1":"CHN","Population":"265683","2":"265683"},{"Name":"Jining","0":"Jining","CountryCode":"CHN","1":"CHN","Population":"265248","2":"265248"},{"Name":"Wuhai","0":"Wuhai","CountryCode":"CHN","1":"CHN","Population":"264081","2":"264081"},{"Name":"Mianyang","0":"Mianyang","CountryCode":"CHN","1":"CHN","Population":"262947","2":"262947"},{"Name":"Luzhou","0":"Luzhou","CountryCode":"CHN","1":"CHN","Population":"262892","2":"262892"},{"Name":"Zunyi","0":"Zunyi","CountryCode":"CHN","1":"CHN","Population":"261862","2":"261862"},{"Name":"Shizuishan","0":"Shizuishan","CountryCode":"CHN","1":"CHN","Population":"257862","2":"257862"},{"Name":"Neijiang","0":"Neijiang","CountryCode":"CHN","1":"CHN","Population":"256012","2":"256012"},{"Name":"Tongliao","0":"Tongliao","CountryCode":"CHN","1":"CHN","Population":"255129","2":"255129"},{"Name":"Tieling","0":"Tieling","CountryCode":"CHN","1":"CHN","Population":"254842","2":"254842"},{"Name":"Wafangdian","0":"Wafangdian","CountryCode":"CHN","1":"CHN","Population":"251733","2":"251733"},{"Name":"Anqing","0":"Anqing","CountryCode":"CHN","1":"CHN","Population":"250718","2":"250718"},{"Name":"Shaoyang","0":"Shaoyang","CountryCode":"CHN","1":"CHN","Population":"247227","2":"247227"},{"Name":"Laiwu","0":"Laiwu","CountryCode":"CHN","1":"CHN","Population":"246833","2":"246833"},{"Name":"Chengde","0":"Chengde","CountryCode":"CHN","1":"CHN","Population":"246799","2":"246799"},{"Name":"Tianshui","0":"Tianshui","CountryCode":"CHN","1":"CHN","Population":"244974","2":"244974"},{"Name":"Nanyang","0":"Nanyang","CountryCode":"CHN","1":"CHN","Population":"243303","2":"243303"},{"Name":"Cangzhou","0":"Cangzhou","CountryCode":"CHN","1":"CHN","Population":"242708","2":"242708"},{"Name":"Yibin","0":"Yibin","CountryCode":"CHN","1":"CHN","Population":"241019","2":"241019"},{"Name":"Huaiyin","0":"Huaiyin","CountryCode":"CHN","1":"CHN","Population":"239675","2":"239675"},{"Name":"Dunhua","0":"Dunhua","CountryCode":"CHN","1":"CHN","Population":"235100","2":"235100"},{"Name":"Yanji","0":"Yanji","CountryCode":"CHN","1":"CHN","Population":"230892","2":"230892"},{"Name":"Jiangmen","0":"Jiangmen","CountryCode":"CHN","1":"CHN","Population":"230587","2":"230587"},{"Name":"Tongling","0":"Tongling","CountryCode":"CHN","1":"CHN","Population":"228017","2":"228017"},{"Name":"Suihua","0":"Suihua","CountryCode":"CHN","1":"CHN","Population":"227881","2":"227881"},{"Name":"Gongziling","0":"Gongziling","CountryCode":"CHN","1":"CHN","Population":"226569","2":"226569"},{"Name":"Xiantao","0":"Xiantao","CountryCode":"CHN","1":"CHN","Population":"222884","2":"222884"},{"Name":"Chaoyang","0":"Chaoyang","CountryCode":"CHN","1":"CHN","Population":"222394","2":"222394"},{"Name":"Ganzhou","0":"Ganzhou","CountryCode":"CHN","1":"CHN","Population":"220129","2":"220129"},{"Name":"Huzhou","0":"Huzhou","CountryCode":"CHN","1":"CHN","Population":"218071","2":"218071"},{"Name":"Baicheng","0":"Baicheng","CountryCode":"CHN","1":"CHN","Population":"217987","2":"217987"},{"Name":"Shangzi","0":"Shangzi","CountryCode":"CHN","1":"CHN","Population":"215373","2":"215373"},{"Name":"Yangjiang","0":"Yangjiang","CountryCode":"CHN","1":"CHN","Population":"215196","2":"215196"},{"Name":"Qitaihe","0":"Qitaihe","CountryCode":"CHN","1":"CHN","Population":"214957","2":"214957"},{"Name":"Gejiu","0":"Gejiu","CountryCode":"CHN","1":"CHN","Population":"214294","2":"214294"},{"Name":"Jiangyin","0":"Jiangyin","CountryCode":"CHN","1":"CHN","Population":"213659","2":"213659"},{"Name":"Hebi","0":"Hebi","CountryCode":"CHN","1":"CHN","Population":"212976","2":"212976"},{"Name":"Jiaxing","0":"Jiaxing","CountryCode":"CHN","1":"CHN","Population":"211526","2":"211526"},{"Name":"Wuzhou","0":"Wuzhou","CountryCode":"CHN","1":"CHN","Population":"210452","2":"210452"},{"Name":"Meihekou","0":"Meihekou","CountryCode":"CHN","1":"CHN","Population":"209038","2":"209038"},{"Name":"Xuchang","0":"Xuchang","CountryCode":"CHN","1":"CHN","Population":"208815","2":"208815"},{"Name":"Liaocheng","0":"Liaocheng","CountryCode":"CHN","1":"CHN","Population":"207844","2":"207844"},{"Name":"Haicheng","0":"Haicheng","CountryCode":"CHN","1":"CHN","Population":"205560","2":"205560"},{"Name":"Qianjiang","0":"Qianjiang","CountryCode":"CHN","1":"CHN","Population":"205504","2":"205504"},{"Name":"Baiyin","0":"Baiyin","CountryCode":"CHN","1":"CHN","Population":"204970","2":"204970"},{"Name":"Bei\u00b4an","0":"Bei\u00b4an","CountryCode":"CHN","1":"CHN","Population":"204899","2":"204899"},{"Name":"Yixing","0":"Yixing","CountryCode":"CHN","1":"CHN","Population":"200824","2":"200824"},{"Name":"Laizhou","0":"Laizhou","CountryCode":"CHN","1":"CHN","Population":"198664","2":"198664"},{"Name":"Qaramay","0":"Qaramay","CountryCode":"CHN","1":"CHN","Population":"197602","2":"197602"},{"Name":"Acheng","0":"Acheng","CountryCode":"CHN","1":"CHN","Population":"197595","2":"197595"},{"Name":"Dezhou","0":"Dezhou","CountryCode":"CHN","1":"CHN","Population":"195485","2":"195485"},{"Name":"Nanping","0":"Nanping","CountryCode":"CHN","1":"CHN","Population":"195064","2":"195064"},{"Name":"Zhaoqing","0":"Zhaoqing","CountryCode":"CHN","1":"CHN","Population":"194784","2":"194784"},{"Name":"Beipiao","0":"Beipiao","CountryCode":"CHN","1":"CHN","Population":"194301","2":"194301"},{"Name":"Fengcheng","0":"Fengcheng","CountryCode":"CHN","1":"CHN","Population":"193784","2":"193784"},{"Name":"Fuyu","0":"Fuyu","CountryCode":"CHN","1":"CHN","Population":"192981","2":"192981"},{"Name":"Xinyang","0":"Xinyang","CountryCode":"CHN","1":"CHN","Population":"192509","2":"192509"},{"Name":"Dongtai","0":"Dongtai","CountryCode":"CHN","1":"CHN","Population":"192247","2":"192247"},{"Name":"Yuci","0":"Yuci","CountryCode":"CHN","1":"CHN","Population":"191356","2":"191356"},{"Name":"Honghu","0":"Honghu","CountryCode":"CHN","1":"CHN","Population":"190772","2":"190772"},{"Name":"Ezhou","0":"Ezhou","CountryCode":"CHN","1":"CHN","Population":"190123","2":"190123"},{"Name":"Heze","0":"Heze","CountryCode":"CHN","1":"CHN","Population":"189293","2":"189293"},{"Name":"Daxian","0":"Daxian","CountryCode":"CHN","1":"CHN","Population":"188101","2":"188101"},{"Name":"Linfen","0":"Linfen","CountryCode":"CHN","1":"CHN","Population":"187309","2":"187309"},{"Name":"Tianmen","0":"Tianmen","CountryCode":"CHN","1":"CHN","Population":"186332","2":"186332"},{"Name":"Yiyang","0":"Yiyang","CountryCode":"CHN","1":"CHN","Population":"185818","2":"185818"},{"Name":"Quanzhou","0":"Quanzhou","CountryCode":"CHN","1":"CHN","Population":"185154","2":"185154"},{"Name":"Rizhao","0":"Rizhao","CountryCode":"CHN","1":"CHN","Population":"185048","2":"185048"},{"Name":"Deyang","0":"Deyang","CountryCode":"CHN","1":"CHN","Population":"182488","2":"182488"},{"Name":"Guangyuan","0":"Guangyuan","CountryCode":"CHN","1":"CHN","Population":"182241","2":"182241"},{"Name":"Changshu","0":"Changshu","CountryCode":"CHN","1":"CHN","Population":"181805","2":"181805"},{"Name":"Zhangzhou","0":"Zhangzhou","CountryCode":"CHN","1":"CHN","Population":"181424","2":"181424"},{"Name":"Hailar","0":"Hailar","CountryCode":"CHN","1":"CHN","Population":"180650","2":"180650"},{"Name":"Nanchong","0":"Nanchong","CountryCode":"CHN","1":"CHN","Population":"180273","2":"180273"},{"Name":"Jiutai","0":"Jiutai","CountryCode":"CHN","1":"CHN","Population":"180130","2":"180130"},{"Name":"Zhaodong","0":"Zhaodong","CountryCode":"CHN","1":"CHN","Population":"179976","2":"179976"},{"Name":"Shaoxing","0":"Shaoxing","CountryCode":"CHN","1":"CHN","Population":"179818","2":"179818"},{"Name":"Fuyang","0":"Fuyang","CountryCode":"CHN","1":"CHN","Population":"179572","2":"179572"},{"Name":"Maoming","0":"Maoming","CountryCode":"CHN","1":"CHN","Population":"178683","2":"178683"},{"Name":"Qujing","0":"Qujing","CountryCode":"CHN","1":"CHN","Population":"178669","2":"178669"},{"Name":"Ghulja","0":"Ghulja","CountryCode":"CHN","1":"CHN","Population":"177193","2":"177193"},{"Name":"Jiaohe","0":"Jiaohe","CountryCode":"CHN","1":"CHN","Population":"176367","2":"176367"},{"Name":"Puyang","0":"Puyang","CountryCode":"CHN","1":"CHN","Population":"175988","2":"175988"},{"Name":"Huadian","0":"Huadian","CountryCode":"CHN","1":"CHN","Population":"175873","2":"175873"},{"Name":"Jiangyou","0":"Jiangyou","CountryCode":"CHN","1":"CHN","Population":"175753","2":"175753"},{"Name":"Qashqar","0":"Qashqar","CountryCode":"CHN","1":"CHN","Population":"174570","2":"174570"},{"Name":"Anshun","0":"Anshun","CountryCode":"CHN","1":"CHN","Population":"174142","2":"174142"},{"Name":"Fuling","0":"Fuling","CountryCode":"CHN","1":"CHN","Population":"173878","2":"173878"},{"Name":"Xinyu","0":"Xinyu","CountryCode":"CHN","1":"CHN","Population":"173524","2":"173524"},{"Name":"Hanzhong","0":"Hanzhong","CountryCode":"CHN","1":"CHN","Population":"169930","2":"169930"},{"Name":"Danyang","0":"Danyang","CountryCode":"CHN","1":"CHN","Population":"169603","2":"169603"},{"Name":"Chenzhou","0":"Chenzhou","CountryCode":"CHN","1":"CHN","Population":"169400","2":"169400"},{"Name":"Xiaogan","0":"Xiaogan","CountryCode":"CHN","1":"CHN","Population":"166280","2":"166280"},{"Name":"Shangqiu","0":"Shangqiu","CountryCode":"CHN","1":"CHN","Population":"164880","2":"164880"},{"Name":"Zhuhai","0":"Zhuhai","CountryCode":"CHN","1":"CHN","Population":"164747","2":"164747"},{"Name":"Qingyuan","0":"Qingyuan","CountryCode":"CHN","1":"CHN","Population":"164641","2":"164641"},{"Name":"Aqsu","0":"Aqsu","CountryCode":"CHN","1":"CHN","Population":"164092","2":"164092"},{"Name":"Jining","0":"Jining","CountryCode":"CHN","1":"CHN","Population":"163552","2":"163552"},{"Name":"Xiaoshan","0":"Xiaoshan","CountryCode":"CHN","1":"CHN","Population":"162930","2":"162930"},{"Name":"Zaoyang","0":"Zaoyang","CountryCode":"CHN","1":"CHN","Population":"162198","2":"162198"},{"Name":"Xinghua","0":"Xinghua","CountryCode":"CHN","1":"CHN","Population":"161910","2":"161910"},{"Name":"Hami","0":"Hami","CountryCode":"CHN","1":"CHN","Population":"161315","2":"161315"},{"Name":"Huizhou","0":"Huizhou","CountryCode":"CHN","1":"CHN","Population":"161023","2":"161023"},{"Name":"Jinmen","0":"Jinmen","CountryCode":"CHN","1":"CHN","Population":"160794","2":"160794"},{"Name":"Sanming","0":"Sanming","CountryCode":"CHN","1":"CHN","Population":"160691","2":"160691"},{"Name":"Ulanhot","0":"Ulanhot","CountryCode":"CHN","1":"CHN","Population":"159538","2":"159538"},{"Name":"Korla","0":"Korla","CountryCode":"CHN","1":"CHN","Population":"159344","2":"159344"},{"Name":"Wanxian","0":"Wanxian","CountryCode":"CHN","1":"CHN","Population":"156823","2":"156823"},{"Name":"Rui\u00b4an","0":"Rui\u00b4an","CountryCode":"CHN","1":"CHN","Population":"156468","2":"156468"},{"Name":"Zhoushan","0":"Zhoushan","CountryCode":"CHN","1":"CHN","Population":"156317","2":"156317"},{"Name":"Liangcheng","0":"Liangcheng","CountryCode":"CHN","1":"CHN","Population":"156307","2":"156307"},{"Name":"Jiaozhou","0":"Jiaozhou","CountryCode":"CHN","1":"CHN","Population":"153364","2":"153364"},{"Name":"Taizhou","0":"Taizhou","CountryCode":"CHN","1":"CHN","Population":"152442","2":"152442"},{"Name":"Suzhou","0":"Suzhou","CountryCode":"CHN","1":"CHN","Population":"151862","2":"151862"},{"Name":"Yichun","0":"Yichun","CountryCode":"CHN","1":"CHN","Population":"151585","2":"151585"},{"Name":"Taonan","0":"Taonan","CountryCode":"CHN","1":"CHN","Population":"150168","2":"150168"},{"Name":"Pingdu","0":"Pingdu","CountryCode":"CHN","1":"CHN","Population":"150123","2":"150123"},{"Name":"Ji\u00b4an","0":"Ji\u00b4an","CountryCode":"CHN","1":"CHN","Population":"148583","2":"148583"},{"Name":"Longkou","0":"Longkou","CountryCode":"CHN","1":"CHN","Population":"148362","2":"148362"},{"Name":"Langfang","0":"Langfang","CountryCode":"CHN","1":"CHN","Population":"148105","2":"148105"},{"Name":"Zhoukou","0":"Zhoukou","CountryCode":"CHN","1":"CHN","Population":"146288","2":"146288"},{"Name":"Suining","0":"Suining","CountryCode":"CHN","1":"CHN","Population":"146086","2":"146086"},{"Name":"Yulin","0":"Yulin","CountryCode":"CHN","1":"CHN","Population":"144467","2":"144467"},{"Name":"Jinhua","0":"Jinhua","CountryCode":"CHN","1":"CHN","Population":"144280","2":"144280"},{"Name":"Liu\u00b4an","0":"Liu\u00b4an","CountryCode":"CHN","1":"CHN","Population":"144248","2":"144248"},{"Name":"Shuangcheng","0":"Shuangcheng","CountryCode":"CHN","1":"CHN","Population":"142659","2":"142659"},{"Name":"Suizhou","0":"Suizhou","CountryCode":"CHN","1":"CHN","Population":"142302","2":"142302"},{"Name":"Ankang","0":"Ankang","CountryCode":"CHN","1":"CHN","Population":"142170","2":"142170"},{"Name":"Weinan","0":"Weinan","CountryCode":"CHN","1":"CHN","Population":"140169","2":"140169"},{"Name":"Longjing","0":"Longjing","CountryCode":"CHN","1":"CHN","Population":"139417","2":"139417"},{"Name":"Da\u00b4an","0":"Da\u00b4an","CountryCode":"CHN","1":"CHN","Population":"138963","2":"138963"},{"Name":"Lengshuijiang","0":"Lengshuijiang","CountryCode":"CHN","1":"CHN","Population":"137994","2":"137994"},{"Name":"Laiyang","0":"Laiyang","CountryCode":"CHN","1":"CHN","Population":"137080","2":"137080"},{"Name":"Xianning","0":"Xianning","CountryCode":"CHN","1":"CHN","Population":"136811","2":"136811"},{"Name":"Dali","0":"Dali","CountryCode":"CHN","1":"CHN","Population":"136554","2":"136554"},{"Name":"Anda","0":"Anda","CountryCode":"CHN","1":"CHN","Population":"136446","2":"136446"},{"Name":"Jincheng","0":"Jincheng","CountryCode":"CHN","1":"CHN","Population":"136396","2":"136396"},{"Name":"Longyan","0":"Longyan","CountryCode":"CHN","1":"CHN","Population":"134481","2":"134481"},{"Name":"Xichang","0":"Xichang","CountryCode":"CHN","1":"CHN","Population":"134419","2":"134419"},{"Name":"Wendeng","0":"Wendeng","CountryCode":"CHN","1":"CHN","Population":"133910","2":"133910"},{"Name":"Hailun","0":"Hailun","CountryCode":"CHN","1":"CHN","Population":"133565","2":"133565"},{"Name":"Binzhou","0":"Binzhou","CountryCode":"CHN","1":"CHN","Population":"133555","2":"133555"},{"Name":"Linhe","0":"Linhe","CountryCode":"CHN","1":"CHN","Population":"133183","2":"133183"},{"Name":"Wuwei","0":"Wuwei","CountryCode":"CHN","1":"CHN","Population":"133101","2":"133101"},{"Name":"Duyun","0":"Duyun","CountryCode":"CHN","1":"CHN","Population":"132971","2":"132971"},{"Name":"Mishan","0":"Mishan","CountryCode":"CHN","1":"CHN","Population":"132744","2":"132744"},{"Name":"Shangrao","0":"Shangrao","CountryCode":"CHN","1":"CHN","Population":"132455","2":"132455"},{"Name":"Changji","0":"Changji","CountryCode":"CHN","1":"CHN","Population":"132260","2":"132260"},{"Name":"Meixian","0":"Meixian","CountryCode":"CHN","1":"CHN","Population":"132156","2":"132156"},{"Name":"Yushu","0":"Yushu","CountryCode":"CHN","1":"CHN","Population":"131861","2":"131861"},{"Name":"Tiefa","0":"Tiefa","CountryCode":"CHN","1":"CHN","Population":"131807","2":"131807"},{"Name":"Huai\u00b4an","0":"Huai\u00b4an","CountryCode":"CHN","1":"CHN","Population":"131149","2":"131149"},{"Name":"Leiyang","0":"Leiyang","CountryCode":"CHN","1":"CHN","Population":"130115","2":"130115"},{"Name":"Zalantun","0":"Zalantun","CountryCode":"CHN","1":"CHN","Population":"130031","2":"130031"},{"Name":"Weihai","0":"Weihai","CountryCode":"CHN","1":"CHN","Population":"128888","2":"128888"},{"Name":"Loudi","0":"Loudi","CountryCode":"CHN","1":"CHN","Population":"128418","2":"128418"},{"Name":"Qingzhou","0":"Qingzhou","CountryCode":"CHN","1":"CHN","Population":"128258","2":"128258"},{"Name":"Qidong","0":"Qidong","CountryCode":"CHN","1":"CHN","Population":"126872","2":"126872"},{"Name":"Huaihua","0":"Huaihua","CountryCode":"CHN","1":"CHN","Population":"126785","2":"126785"},{"Name":"Luohe","0":"Luohe","CountryCode":"CHN","1":"CHN","Population":"126438","2":"126438"},{"Name":"Chuzhou","0":"Chuzhou","CountryCode":"CHN","1":"CHN","Population":"125341","2":"125341"},{"Name":"Kaiyuan","0":"Kaiyuan","CountryCode":"CHN","1":"CHN","Population":"124219","2":"124219"},{"Name":"Linqing","0":"Linqing","CountryCode":"CHN","1":"CHN","Population":"123958","2":"123958"},{"Name":"Chaohu","0":"Chaohu","CountryCode":"CHN","1":"CHN","Population":"123676","2":"123676"},{"Name":"Laohekou","0":"Laohekou","CountryCode":"CHN","1":"CHN","Population":"123366","2":"123366"},{"Name":"Dujiangyan","0":"Dujiangyan","CountryCode":"CHN","1":"CHN","Population":"123357","2":"123357"},{"Name":"Zhumadian","0":"Zhumadian","CountryCode":"CHN","1":"CHN","Population":"123232","2":"123232"},{"Name":"Linchuan","0":"Linchuan","CountryCode":"CHN","1":"CHN","Population":"121949","2":"121949"},{"Name":"Jiaonan","0":"Jiaonan","CountryCode":"CHN","1":"CHN","Population":"121397","2":"121397"},{"Name":"Sanmenxia","0":"Sanmenxia","CountryCode":"CHN","1":"CHN","Population":"120523","2":"120523"},{"Name":"Heyuan","0":"Heyuan","CountryCode":"CHN","1":"CHN","Population":"120101","2":"120101"},{"Name":"Manzhouli","0":"Manzhouli","CountryCode":"CHN","1":"CHN","Population":"120023","2":"120023"},{"Name":"Lhasa","0":"Lhasa","CountryCode":"CHN","1":"CHN","Population":"120000","2":"120000"},{"Name":"Lianyuan","0":"Lianyuan","CountryCode":"CHN","1":"CHN","Population":"118858","2":"118858"},{"Name":"Kuytun","0":"Kuytun","CountryCode":"CHN","1":"CHN","Population":"118553","2":"118553"},{"Name":"Puqi","0":"Puqi","CountryCode":"CHN","1":"CHN","Population":"117264","2":"117264"},{"Name":"Hongjiang","0":"Hongjiang","CountryCode":"CHN","1":"CHN","Population":"116188","2":"116188"},{"Name":"Qinzhou","0":"Qinzhou","CountryCode":"CHN","1":"CHN","Population":"114586","2":"114586"},{"Name":"Renqiu","0":"Renqiu","CountryCode":"CHN","1":"CHN","Population":"114256","2":"114256"},{"Name":"Yuyao","0":"Yuyao","CountryCode":"CHN","1":"CHN","Population":"114065","2":"114065"},{"Name":"Guigang","0":"Guigang","CountryCode":"CHN","1":"CHN","Population":"114025","2":"114025"},{"Name":"Kaili","0":"Kaili","CountryCode":"CHN","1":"CHN","Population":"113958","2":"113958"},{"Name":"Yan\u00b4an","0":"Yan\u00b4an","CountryCode":"CHN","1":"CHN","Population":"113277","2":"113277"},{"Name":"Beihai","0":"Beihai","CountryCode":"CHN","1":"CHN","Population":"112673","2":"112673"},{"Name":"Xuangzhou","0":"Xuangzhou","CountryCode":"CHN","1":"CHN","Population":"112673","2":"112673"},{"Name":"Quzhou","0":"Quzhou","CountryCode":"CHN","1":"CHN","Population":"112373","2":"112373"},{"Name":"Yong\u00b4an","0":"Yong\u00b4an","CountryCode":"CHN","1":"CHN","Population":"111762","2":"111762"},{"Name":"Zixing","0":"Zixing","CountryCode":"CHN","1":"CHN","Population":"110048","2":"110048"},{"Name":"Liyang","0":"Liyang","CountryCode":"CHN","1":"CHN","Population":"109520","2":"109520"},{"Name":"Yizheng","0":"Yizheng","CountryCode":"CHN","1":"CHN","Population":"109268","2":"109268"},{"Name":"Yumen","0":"Yumen","CountryCode":"CHN","1":"CHN","Population":"109234","2":"109234"},{"Name":"Liling","0":"Liling","CountryCode":"CHN","1":"CHN","Population":"108504","2":"108504"},{"Name":"Yuncheng","0":"Yuncheng","CountryCode":"CHN","1":"CHN","Population":"108359","2":"108359"},{"Name":"Shanwei","0":"Shanwei","CountryCode":"CHN","1":"CHN","Population":"107847","2":"107847"},{"Name":"Cixi","0":"Cixi","CountryCode":"CHN","1":"CHN","Population":"107329","2":"107329"},{"Name":"Yuanjiang","0":"Yuanjiang","CountryCode":"CHN","1":"CHN","Population":"107004","2":"107004"},{"Name":"Bozhou","0":"Bozhou","CountryCode":"CHN","1":"CHN","Population":"106346","2":"106346"},{"Name":"Jinchang","0":"Jinchang","CountryCode":"CHN","1":"CHN","Population":"105287","2":"105287"},{"Name":"Fu\u00b4an","0":"Fu\u00b4an","CountryCode":"CHN","1":"CHN","Population":"105265","2":"105265"},{"Name":"Suqian","0":"Suqian","CountryCode":"CHN","1":"CHN","Population":"105021","2":"105021"},{"Name":"Shishou","0":"Shishou","CountryCode":"CHN","1":"CHN","Population":"104571","2":"104571"},{"Name":"Hengshui","0":"Hengshui","CountryCode":"CHN","1":"CHN","Population":"104269","2":"104269"},{"Name":"Danjiangkou","0":"Danjiangkou","CountryCode":"CHN","1":"CHN","Population":"103211","2":"103211"},{"Name":"Fujin","0":"Fujin","CountryCode":"CHN","1":"CHN","Population":"103104","2":"103104"},{"Name":"Sanya","0":"Sanya","CountryCode":"CHN","1":"CHN","Population":"102820","2":"102820"},{"Name":"Guangshui","0":"Guangshui","CountryCode":"CHN","1":"CHN","Population":"102770","2":"102770"},{"Name":"Huangshan","0":"Huangshan","CountryCode":"CHN","1":"CHN","Population":"102628","2":"102628"},{"Name":"Xingcheng","0":"Xingcheng","CountryCode":"CHN","1":"CHN","Population":"102384","2":"102384"},{"Name":"Zhucheng","0":"Zhucheng","CountryCode":"CHN","1":"CHN","Population":"102134","2":"102134"},{"Name":"Kunshan","0":"Kunshan","CountryCode":"CHN","1":"CHN","Population":"102052","2":"102052"},{"Name":"Haining","0":"Haining","CountryCode":"CHN","1":"CHN","Population":"100478","2":"100478"},{"Name":"Pingliang","0":"Pingliang","CountryCode":"CHN","1":"CHN","Population":"99265","2":"99265"},{"Name":"Fuqing","0":"Fuqing","CountryCode":"CHN","1":"CHN","Population":"99193","2":"99193"},{"Name":"Xinzhou","0":"Xinzhou","CountryCode":"CHN","1":"CHN","Population":"98667","2":"98667"},{"Name":"Jieyang","0":"Jieyang","CountryCode":"CHN","1":"CHN","Population":"98531","2":"98531"},{"Name":"Zhangjiagang","0":"Zhangjiagang","CountryCode":"CHN","1":"CHN","Population":"97994","2":"97994"},{"Name":"Tong Xian","0":"Tong Xian","CountryCode":"CHN","1":"CHN","Population":"97168","2":"97168"},{"Name":"Ya\u00b4an","0":"Ya\u00b4an","CountryCode":"CHN","1":"CHN","Population":"95900","2":"95900"},{"Name":"Jinzhou","0":"Jinzhou","CountryCode":"CHN","1":"CHN","Population":"95761","2":"95761"},{"Name":"Emeishan","0":"Emeishan","CountryCode":"CHN","1":"CHN","Population":"94000","2":"94000"},{"Name":"Enshi","0":"Enshi","CountryCode":"CHN","1":"CHN","Population":"93056","2":"93056"},{"Name":"Bose","0":"Bose","CountryCode":"CHN","1":"CHN","Population":"93009","2":"93009"},{"Name":"Yuzhou","0":"Yuzhou","CountryCode":"CHN","1":"CHN","Population":"92889","2":"92889"},{"Name":"Kaiyuan","0":"Kaiyuan","CountryCode":"CHN","1":"CHN","Population":"91999","2":"91999"},{"Name":"Tumen","0":"Tumen","CountryCode":"CHN","1":"CHN","Population":"91471","2":"91471"},{"Name":"Putian","0":"Putian","CountryCode":"CHN","1":"CHN","Population":"91030","2":"91030"},{"Name":"Linhai","0":"Linhai","CountryCode":"CHN","1":"CHN","Population":"90870","2":"90870"},{"Name":"Xilin Hot","0":"Xilin Hot","CountryCode":"CHN","1":"CHN","Population":"90646","2":"90646"},{"Name":"Shaowu","0":"Shaowu","CountryCode":"CHN","1":"CHN","Population":"90286","2":"90286"},{"Name":"Junan","0":"Junan","CountryCode":"CHN","1":"CHN","Population":"90222","2":"90222"},{"Name":"Huaying","0":"Huaying","CountryCode":"CHN","1":"CHN","Population":"89400","2":"89400"},{"Name":"Pingyi","0":"Pingyi","CountryCode":"CHN","1":"CHN","Population":"89373","2":"89373"},{"Name":"Huangyan","0":"Huangyan","CountryCode":"CHN","1":"CHN","Population":"89288","2":"89288"},{"Name":"Bishkek","0":"Bishkek","CountryCode":"KGZ","1":"KGZ","Population":"589400","2":"589400"},{"Name":"Osh","0":"Osh","CountryCode":"KGZ","1":"KGZ","Population":"222700","2":"222700"},{"Name":"Bikenibeu","0":"Bikenibeu","CountryCode":"KIR","1":"KIR","Population":"5055","2":"5055"},{"Name":"Bairiki","0":"Bairiki","CountryCode":"KIR","1":"KIR","Population":"2226","2":"2226"},{"Name":"Santaf\u00e9 de Bogot\u00e1","0":"Santaf\u00e9 de Bogot\u00e1","CountryCode":"COL","1":"COL","Population":"6260862","2":"6260862"},{"Name":"Cali","0":"Cali","CountryCode":"COL","1":"COL","Population":"2077386","2":"2077386"},{"Name":"Medell\u00edn","0":"Medell\u00edn","CountryCode":"COL","1":"COL","Population":"1861265","2":"1861265"},{"Name":"Barranquilla","0":"Barranquilla","CountryCode":"COL","1":"COL","Population":"1223260","2":"1223260"},{"Name":"Cartagena","0":"Cartagena","CountryCode":"COL","1":"COL","Population":"805757","2":"805757"},{"Name":"C\u00facuta","0":"C\u00facuta","CountryCode":"COL","1":"COL","Population":"606932","2":"606932"},{"Name":"Bucaramanga","0":"Bucaramanga","CountryCode":"COL","1":"COL","Population":"515555","2":"515555"},{"Name":"Ibagu\u00e9","0":"Ibagu\u00e9","CountryCode":"COL","1":"COL","Population":"393664","2":"393664"},{"Name":"Pereira","0":"Pereira","CountryCode":"COL","1":"COL","Population":"381725","2":"381725"},{"Name":"Santa Marta","0":"Santa Marta","CountryCode":"COL","1":"COL","Population":"359147","2":"359147"},{"Name":"Manizales","0":"Manizales","CountryCode":"COL","1":"COL","Population":"337580","2":"337580"},{"Name":"Bello","0":"Bello","CountryCode":"COL","1":"COL","Population":"333470","2":"333470"},{"Name":"Pasto","0":"Pasto","CountryCode":"COL","1":"COL","Population":"332396","2":"332396"},{"Name":"Neiva","0":"Neiva","CountryCode":"COL","1":"COL","Population":"300052","2":"300052"},{"Name":"Soledad","0":"Soledad","CountryCode":"COL","1":"COL","Population":"295058","2":"295058"},{"Name":"Armenia","0":"Armenia","CountryCode":"COL","1":"COL","Population":"288977","2":"288977"},{"Name":"Villavicencio","0":"Villavicencio","CountryCode":"COL","1":"COL","Population":"273140","2":"273140"},{"Name":"Soacha","0":"Soacha","CountryCode":"COL","1":"COL","Population":"272058","2":"272058"},{"Name":"Valledupar","0":"Valledupar","CountryCode":"COL","1":"COL","Population":"263247","2":"263247"},{"Name":"Monter\u00eda","0":"Monter\u00eda","CountryCode":"COL","1":"COL","Population":"248245","2":"248245"},{"Name":"Itag\u00fc\u00ed","0":"Itag\u00fc\u00ed","CountryCode":"COL","1":"COL","Population":"228985","2":"228985"},{"Name":"Palmira","0":"Palmira","CountryCode":"COL","1":"COL","Population":"226509","2":"226509"},{"Name":"Buenaventura","0":"Buenaventura","CountryCode":"COL","1":"COL","Population":"224336","2":"224336"},{"Name":"Floridablanca","0":"Floridablanca","CountryCode":"COL","1":"COL","Population":"221913","2":"221913"},{"Name":"Sincelejo","0":"Sincelejo","CountryCode":"COL","1":"COL","Population":"220704","2":"220704"},{"Name":"Popay\u00e1n","0":"Popay\u00e1n","CountryCode":"COL","1":"COL","Population":"200719","2":"200719"},{"Name":"Barrancabermeja","0":"Barrancabermeja","CountryCode":"COL","1":"COL","Population":"178020","2":"178020"},{"Name":"Dos Quebradas","0":"Dos Quebradas","CountryCode":"COL","1":"COL","Population":"159363","2":"159363"},{"Name":"Tulu\u00e1","0":"Tulu\u00e1","CountryCode":"COL","1":"COL","Population":"152488","2":"152488"},{"Name":"Envigado","0":"Envigado","CountryCode":"COL","1":"COL","Population":"135848","2":"135848"},{"Name":"Cartago","0":"Cartago","CountryCode":"COL","1":"COL","Population":"125884","2":"125884"},{"Name":"Girardot","0":"Girardot","CountryCode":"COL","1":"COL","Population":"110963","2":"110963"},{"Name":"Buga","0":"Buga","CountryCode":"COL","1":"COL","Population":"110699","2":"110699"},{"Name":"Tunja","0":"Tunja","CountryCode":"COL","1":"COL","Population":"109740","2":"109740"},{"Name":"Florencia","0":"Florencia","CountryCode":"COL","1":"COL","Population":"108574","2":"108574"},{"Name":"Maicao","0":"Maicao","CountryCode":"COL","1":"COL","Population":"108053","2":"108053"},{"Name":"Sogamoso","0":"Sogamoso","CountryCode":"COL","1":"COL","Population":"107728","2":"107728"},{"Name":"Giron","0":"Giron","CountryCode":"COL","1":"COL","Population":"90688","2":"90688"},{"Name":"Moroni","0":"Moroni","CountryCode":"COM","1":"COM","Population":"36000","2":"36000"},{"Name":"Brazzaville","0":"Brazzaville","CountryCode":"COG","1":"COG","Population":"950000","2":"950000"},{"Name":"Pointe-Noire","0":"Pointe-Noire","CountryCode":"COG","1":"COG","Population":"500000","2":"500000"},{"Name":"Kinshasa","0":"Kinshasa","CountryCode":"COD","1":"COD","Population":"5064000","2":"5064000"},{"Name":"Lubumbashi","0":"Lubumbashi","CountryCode":"COD","1":"COD","Population":"851381","2":"851381"},{"Name":"Mbuji-Mayi","0":"Mbuji-Mayi","CountryCode":"COD","1":"COD","Population":"806475","2":"806475"},{"Name":"Kolwezi","0":"Kolwezi","CountryCode":"COD","1":"COD","Population":"417810","2":"417810"},{"Name":"Kisangani","0":"Kisangani","CountryCode":"COD","1":"COD","Population":"417517","2":"417517"},{"Name":"Kananga","0":"Kananga","CountryCode":"COD","1":"COD","Population":"393030","2":"393030"},{"Name":"Likasi","0":"Likasi","CountryCode":"COD","1":"COD","Population":"299118","2":"299118"},{"Name":"Bukavu","0":"Bukavu","CountryCode":"COD","1":"COD","Population":"201569","2":"201569"},{"Name":"Kikwit","0":"Kikwit","CountryCode":"COD","1":"COD","Population":"182142","2":"182142"},{"Name":"Tshikapa","0":"Tshikapa","CountryCode":"COD","1":"COD","Population":"180860","2":"180860"},{"Name":"Matadi","0":"Matadi","CountryCode":"COD","1":"COD","Population":"172730","2":"172730"},{"Name":"Mbandaka","0":"Mbandaka","CountryCode":"COD","1":"COD","Population":"169841","2":"169841"},{"Name":"Mwene-Ditu","0":"Mwene-Ditu","CountryCode":"COD","1":"COD","Population":"137459","2":"137459"},{"Name":"Boma","0":"Boma","CountryCode":"COD","1":"COD","Population":"135284","2":"135284"},{"Name":"Uvira","0":"Uvira","CountryCode":"COD","1":"COD","Population":"115590","2":"115590"},{"Name":"Butembo","0":"Butembo","CountryCode":"COD","1":"COD","Population":"109406","2":"109406"},{"Name":"Goma","0":"Goma","CountryCode":"COD","1":"COD","Population":"109094","2":"109094"},{"Name":"Kalemie","0":"Kalemie","CountryCode":"COD","1":"COD","Population":"101309","2":"101309"},{"Name":"Bantam","0":"Bantam","CountryCode":"CCK","1":"CCK","Population":"503","2":"503"},{"Name":"West Island","0":"West Island","CountryCode":"CCK","1":"CCK","Population":"167","2":"167"},{"Name":"Pyongyang","0":"Pyongyang","CountryCode":"PRK","1":"PRK","Population":"2484000","2":"2484000"},{"Name":"Hamhung","0":"Hamhung","CountryCode":"PRK","1":"PRK","Population":"709730","2":"709730"},{"Name":"Chongjin","0":"Chongjin","CountryCode":"PRK","1":"PRK","Population":"582480","2":"582480"},{"Name":"Nampo","0":"Nampo","CountryCode":"PRK","1":"PRK","Population":"566200","2":"566200"},{"Name":"Sinuiju","0":"Sinuiju","CountryCode":"PRK","1":"PRK","Population":"326011","2":"326011"},{"Name":"Wonsan","0":"Wonsan","CountryCode":"PRK","1":"PRK","Population":"300148","2":"300148"},{"Name":"Phyongsong","0":"Phyongsong","CountryCode":"PRK","1":"PRK","Population":"272934","2":"272934"},{"Name":"Sariwon","0":"Sariwon","CountryCode":"PRK","1":"PRK","Population":"254146","2":"254146"},{"Name":"Haeju","0":"Haeju","CountryCode":"PRK","1":"PRK","Population":"229172","2":"229172"},{"Name":"Kanggye","0":"Kanggye","CountryCode":"PRK","1":"PRK","Population":"223410","2":"223410"},{"Name":"Kimchaek","0":"Kimchaek","CountryCode":"PRK","1":"PRK","Population":"179000","2":"179000"},{"Name":"Hyesan","0":"Hyesan","CountryCode":"PRK","1":"PRK","Population":"178020","2":"178020"},{"Name":"Kaesong","0":"Kaesong","CountryCode":"PRK","1":"PRK","Population":"171500","2":"171500"},{"Name":"Seoul","0":"Seoul","CountryCode":"KOR","1":"KOR","Population":"9981619","2":"9981619"},{"Name":"Pusan","0":"Pusan","CountryCode":"KOR","1":"KOR","Population":"3804522","2":"3804522"},{"Name":"Inchon","0":"Inchon","CountryCode":"KOR","1":"KOR","Population":"2559424","2":"2559424"},{"Name":"Taegu","0":"Taegu","CountryCode":"KOR","1":"KOR","Population":"2548568","2":"2548568"},{"Name":"Taejon","0":"Taejon","CountryCode":"KOR","1":"KOR","Population":"1425835","2":"1425835"},{"Name":"Kwangju","0":"Kwangju","CountryCode":"KOR","1":"KOR","Population":"1368341","2":"1368341"},{"Name":"Ulsan","0":"Ulsan","CountryCode":"KOR","1":"KOR","Population":"1084891","2":"1084891"},{"Name":"Songnam","0":"Songnam","CountryCode":"KOR","1":"KOR","Population":"869094","2":"869094"},{"Name":"Puchon","0":"Puchon","CountryCode":"KOR","1":"KOR","Population":"779412","2":"779412"},{"Name":"Suwon","0":"Suwon","CountryCode":"KOR","1":"KOR","Population":"755550","2":"755550"},{"Name":"Anyang","0":"Anyang","CountryCode":"KOR","1":"KOR","Population":"591106","2":"591106"},{"Name":"Chonju","0":"Chonju","CountryCode":"KOR","1":"KOR","Population":"563153","2":"563153"},{"Name":"Chongju","0":"Chongju","CountryCode":"KOR","1":"KOR","Population":"531376","2":"531376"},{"Name":"Koyang","0":"Koyang","CountryCode":"KOR","1":"KOR","Population":"518282","2":"518282"},{"Name":"Ansan","0":"Ansan","CountryCode":"KOR","1":"KOR","Population":"510314","2":"510314"},{"Name":"Pohang","0":"Pohang","CountryCode":"KOR","1":"KOR","Population":"508899","2":"508899"},{"Name":"Chang-won","0":"Chang-won","CountryCode":"KOR","1":"KOR","Population":"481694","2":"481694"},{"Name":"Masan","0":"Masan","CountryCode":"KOR","1":"KOR","Population":"441242","2":"441242"},{"Name":"Kwangmyong","0":"Kwangmyong","CountryCode":"KOR","1":"KOR","Population":"350914","2":"350914"},{"Name":"Chonan","0":"Chonan","CountryCode":"KOR","1":"KOR","Population":"330259","2":"330259"},{"Name":"Chinju","0":"Chinju","CountryCode":"KOR","1":"KOR","Population":"329886","2":"329886"},{"Name":"Iksan","0":"Iksan","CountryCode":"KOR","1":"KOR","Population":"322685","2":"322685"},{"Name":"Pyongtaek","0":"Pyongtaek","CountryCode":"KOR","1":"KOR","Population":"312927","2":"312927"},{"Name":"Kumi","0":"Kumi","CountryCode":"KOR","1":"KOR","Population":"311431","2":"311431"},{"Name":"Uijongbu","0":"Uijongbu","CountryCode":"KOR","1":"KOR","Population":"276111","2":"276111"},{"Name":"Kyongju","0":"Kyongju","CountryCode":"KOR","1":"KOR","Population":"272968","2":"272968"},{"Name":"Kunsan","0":"Kunsan","CountryCode":"KOR","1":"KOR","Population":"266569","2":"266569"},{"Name":"Cheju","0":"Cheju","CountryCode":"KOR","1":"KOR","Population":"258511","2":"258511"},{"Name":"Kimhae","0":"Kimhae","CountryCode":"KOR","1":"KOR","Population":"256370","2":"256370"},{"Name":"Sunchon","0":"Sunchon","CountryCode":"KOR","1":"KOR","Population":"249263","2":"249263"},{"Name":"Mokpo","0":"Mokpo","CountryCode":"KOR","1":"KOR","Population":"247452","2":"247452"},{"Name":"Yong-in","0":"Yong-in","CountryCode":"KOR","1":"KOR","Population":"242643","2":"242643"},{"Name":"Wonju","0":"Wonju","CountryCode":"KOR","1":"KOR","Population":"237460","2":"237460"},{"Name":"Kunpo","0":"Kunpo","CountryCode":"KOR","1":"KOR","Population":"235233","2":"235233"},{"Name":"Chunchon","0":"Chunchon","CountryCode":"KOR","1":"KOR","Population":"234528","2":"234528"},{"Name":"Namyangju","0":"Namyangju","CountryCode":"KOR","1":"KOR","Population":"229060","2":"229060"},{"Name":"Kangnung","0":"Kangnung","CountryCode":"KOR","1":"KOR","Population":"220403","2":"220403"},{"Name":"Chungju","0":"Chungju","CountryCode":"KOR","1":"KOR","Population":"205206","2":"205206"},{"Name":"Andong","0":"Andong","CountryCode":"KOR","1":"KOR","Population":"188443","2":"188443"},{"Name":"Yosu","0":"Yosu","CountryCode":"KOR","1":"KOR","Population":"183596","2":"183596"},{"Name":"Kyongsan","0":"Kyongsan","CountryCode":"KOR","1":"KOR","Population":"173746","2":"173746"},{"Name":"Paju","0":"Paju","CountryCode":"KOR","1":"KOR","Population":"163379","2":"163379"},{"Name":"Yangsan","0":"Yangsan","CountryCode":"KOR","1":"KOR","Population":"163351","2":"163351"},{"Name":"Ichon","0":"Ichon","CountryCode":"KOR","1":"KOR","Population":"155332","2":"155332"},{"Name":"Asan","0":"Asan","CountryCode":"KOR","1":"KOR","Population":"154663","2":"154663"},{"Name":"Koje","0":"Koje","CountryCode":"KOR","1":"KOR","Population":"147562","2":"147562"},{"Name":"Kimchon","0":"Kimchon","CountryCode":"KOR","1":"KOR","Population":"147027","2":"147027"},{"Name":"Nonsan","0":"Nonsan","CountryCode":"KOR","1":"KOR","Population":"146619","2":"146619"},{"Name":"Kuri","0":"Kuri","CountryCode":"KOR","1":"KOR","Population":"142173","2":"142173"},{"Name":"Chong-up","0":"Chong-up","CountryCode":"KOR","1":"KOR","Population":"139111","2":"139111"},{"Name":"Chechon","0":"Chechon","CountryCode":"KOR","1":"KOR","Population":"137070","2":"137070"},{"Name":"Sosan","0":"Sosan","CountryCode":"KOR","1":"KOR","Population":"134746","2":"134746"},{"Name":"Shihung","0":"Shihung","CountryCode":"KOR","1":"KOR","Population":"133443","2":"133443"},{"Name":"Tong-yong","0":"Tong-yong","CountryCode":"KOR","1":"KOR","Population":"131717","2":"131717"},{"Name":"Kongju","0":"Kongju","CountryCode":"KOR","1":"KOR","Population":"131229","2":"131229"},{"Name":"Yongju","0":"Yongju","CountryCode":"KOR","1":"KOR","Population":"131097","2":"131097"},{"Name":"Chinhae","0":"Chinhae","CountryCode":"KOR","1":"KOR","Population":"125997","2":"125997"},{"Name":"Sangju","0":"Sangju","CountryCode":"KOR","1":"KOR","Population":"124116","2":"124116"},{"Name":"Poryong","0":"Poryong","CountryCode":"KOR","1":"KOR","Population":"122604","2":"122604"},{"Name":"Kwang-yang","0":"Kwang-yang","CountryCode":"KOR","1":"KOR","Population":"122052","2":"122052"},{"Name":"Miryang","0":"Miryang","CountryCode":"KOR","1":"KOR","Population":"121501","2":"121501"},{"Name":"Hanam","0":"Hanam","CountryCode":"KOR","1":"KOR","Population":"115812","2":"115812"},{"Name":"Kimje","0":"Kimje","CountryCode":"KOR","1":"KOR","Population":"115427","2":"115427"},{"Name":"Yongchon","0":"Yongchon","CountryCode":"KOR","1":"KOR","Population":"113511","2":"113511"},{"Name":"Sachon","0":"Sachon","CountryCode":"KOR","1":"KOR","Population":"113494","2":"113494"},{"Name":"Uiwang","0":"Uiwang","CountryCode":"KOR","1":"KOR","Population":"108788","2":"108788"},{"Name":"Naju","0":"Naju","CountryCode":"KOR","1":"KOR","Population":"107831","2":"107831"},{"Name":"Namwon","0":"Namwon","CountryCode":"KOR","1":"KOR","Population":"103544","2":"103544"},{"Name":"Tonghae","0":"Tonghae","CountryCode":"KOR","1":"KOR","Population":"95472","2":"95472"},{"Name":"Mun-gyong","0":"Mun-gyong","CountryCode":"KOR","1":"KOR","Population":"92239","2":"92239"},{"Name":"Athenai","0":"Athenai","CountryCode":"GRC","1":"GRC","Population":"772072","2":"772072"},{"Name":"Thessaloniki","0":"Thessaloniki","CountryCode":"GRC","1":"GRC","Population":"383967","2":"383967"},{"Name":"Pireus","0":"Pireus","CountryCode":"GRC","1":"GRC","Population":"182671","2":"182671"},{"Name":"Patras","0":"Patras","CountryCode":"GRC","1":"GRC","Population":"153344","2":"153344"},{"Name":"Peristerion","0":"Peristerion","CountryCode":"GRC","1":"GRC","Population":"137288","2":"137288"},{"Name":"Herakleion","0":"Herakleion","CountryCode":"GRC","1":"GRC","Population":"116178","2":"116178"},{"Name":"Kallithea","0":"Kallithea","CountryCode":"GRC","1":"GRC","Population":"114233","2":"114233"},{"Name":"Larisa","0":"Larisa","CountryCode":"GRC","1":"GRC","Population":"113090","2":"113090"},{"Name":"Zagreb","0":"Zagreb","CountryCode":"HRV","1":"HRV","Population":"706770","2":"706770"},{"Name":"Split","0":"Split","CountryCode":"HRV","1":"HRV","Population":"189388","2":"189388"},{"Name":"Rijeka","0":"Rijeka","CountryCode":"HRV","1":"HRV","Population":"167964","2":"167964"},{"Name":"Osijek","0":"Osijek","CountryCode":"HRV","1":"HRV","Population":"104761","2":"104761"},{"Name":"La Habana","0":"La Habana","CountryCode":"CUB","1":"CUB","Population":"2256000","2":"2256000"},{"Name":"Santiago de Cuba","0":"Santiago de Cuba","CountryCode":"CUB","1":"CUB","Population":"433180","2":"433180"},{"Name":"Camag\u00fcey","0":"Camag\u00fcey","CountryCode":"CUB","1":"CUB","Population":"298726","2":"298726"},{"Name":"Holgu\u00edn","0":"Holgu\u00edn","CountryCode":"CUB","1":"CUB","Population":"249492","2":"249492"},{"Name":"Santa Clara","0":"Santa Clara","CountryCode":"CUB","1":"CUB","Population":"207350","2":"207350"},{"Name":"Guant\u00e1namo","0":"Guant\u00e1namo","CountryCode":"CUB","1":"CUB","Population":"205078","2":"205078"},{"Name":"Pinar del R\u00edo","0":"Pinar del R\u00edo","CountryCode":"CUB","1":"CUB","Population":"142100","2":"142100"},{"Name":"Bayamo","0":"Bayamo","CountryCode":"CUB","1":"CUB","Population":"141000","2":"141000"},{"Name":"Cienfuegos","0":"Cienfuegos","CountryCode":"CUB","1":"CUB","Population":"132770","2":"132770"},{"Name":"Victoria de las Tunas","0":"Victoria de las Tunas","CountryCode":"CUB","1":"CUB","Population":"132350","2":"132350"},{"Name":"Matanzas","0":"Matanzas","CountryCode":"CUB","1":"CUB","Population":"123273","2":"123273"},{"Name":"Manzanillo","0":"Manzanillo","CountryCode":"CUB","1":"CUB","Population":"109350","2":"109350"},{"Name":"Sancti-Sp\u00edritus","0":"Sancti-Sp\u00edritus","CountryCode":"CUB","1":"CUB","Population":"100751","2":"100751"},{"Name":"Ciego de \u00c1vila","0":"Ciego de \u00c1vila","CountryCode":"CUB","1":"CUB","Population":"98505","2":"98505"},{"Name":"al-Salimiya","0":"al-Salimiya","CountryCode":"KWT","1":"KWT","Population":"130215","2":"130215"},{"Name":"Jalib al-Shuyukh","0":"Jalib al-Shuyukh","CountryCode":"KWT","1":"KWT","Population":"102178","2":"102178"},{"Name":"Kuwait","0":"Kuwait","CountryCode":"KWT","1":"KWT","Population":"28859","2":"28859"},{"Name":"Nicosia","0":"Nicosia","CountryCode":"CYP","1":"CYP","Population":"195000","2":"195000"},{"Name":"Limassol","0":"Limassol","CountryCode":"CYP","1":"CYP","Population":"154400","2":"154400"},{"Name":"Vientiane","0":"Vientiane","CountryCode":"LAO","1":"LAO","Population":"531800","2":"531800"},{"Name":"Savannakhet","0":"Savannakhet","CountryCode":"LAO","1":"LAO","Population":"96652","2":"96652"},{"Name":"Riga","0":"Riga","CountryCode":"LVA","1":"LVA","Population":"764328","2":"764328"},{"Name":"Daugavpils","0":"Daugavpils","CountryCode":"LVA","1":"LVA","Population":"114829","2":"114829"},{"Name":"Liepaja","0":"Liepaja","CountryCode":"LVA","1":"LVA","Population":"89439","2":"89439"},{"Name":"Maseru","0":"Maseru","CountryCode":"LSO","1":"LSO","Population":"297000","2":"297000"},{"Name":"Beirut","0":"Beirut","CountryCode":"LBN","1":"LBN","Population":"1100000","2":"1100000"},{"Name":"Tripoli","0":"Tripoli","CountryCode":"LBN","1":"LBN","Population":"240000","2":"240000"},{"Name":"Monrovia","0":"Monrovia","CountryCode":"LBR","1":"LBR","Population":"850000","2":"850000"},{"Name":"Tripoli","0":"Tripoli","CountryCode":"LBY","1":"LBY","Population":"1682000","2":"1682000"},{"Name":"Bengasi","0":"Bengasi","CountryCode":"LBY","1":"LBY","Population":"804000","2":"804000"},{"Name":"Misrata","0":"Misrata","CountryCode":"LBY","1":"LBY","Population":"121669","2":"121669"},{"Name":"al-Zawiya","0":"al-Zawiya","CountryCode":"LBY","1":"LBY","Population":"89338","2":"89338"},{"Name":"Schaan","0":"Schaan","CountryCode":"LIE","1":"LIE","Population":"5346","2":"5346"},{"Name":"Vaduz","0":"Vaduz","CountryCode":"LIE","1":"LIE","Population":"5043","2":"5043"},{"Name":"Vilnius","0":"Vilnius","CountryCode":"LTU","1":"LTU","Population":"577969","2":"577969"},{"Name":"Kaunas","0":"Kaunas","CountryCode":"LTU","1":"LTU","Population":"412639","2":"412639"},{"Name":"Klaipeda","0":"Klaipeda","CountryCode":"LTU","1":"LTU","Population":"202451","2":"202451"},{"Name":"\u0160iauliai","0":"\u0160iauliai","CountryCode":"LTU","1":"LTU","Population":"146563","2":"146563"},{"Name":"Panevezys","0":"Panevezys","CountryCode":"LTU","1":"LTU","Population":"133695","2":"133695"},{"Name":"Luxembourg [Luxemburg\/L\u00ebtzebuerg]","0":"Luxembourg [Luxemburg\/L\u00ebtzebuerg]","CountryCode":"LUX","1":"LUX","Population":"80700","2":"80700"},{"Name":"El-Aai\u00fan","0":"El-Aai\u00fan","CountryCode":"ESH","1":"ESH","Population":"169000","2":"169000"},{"Name":"Macao","0":"Macao","CountryCode":"MAC","1":"MAC","Population":"437500","2":"437500"},{"Name":"Antananarivo","0":"Antananarivo","CountryCode":"MDG","1":"MDG","Population":"675669","2":"675669"},{"Name":"Toamasina","0":"Toamasina","CountryCode":"MDG","1":"MDG","Population":"127441","2":"127441"},{"Name":"Antsirab\u00e9","0":"Antsirab\u00e9","CountryCode":"MDG","1":"MDG","Population":"120239","2":"120239"},{"Name":"Mahajanga","0":"Mahajanga","CountryCode":"MDG","1":"MDG","Population":"100807","2":"100807"},{"Name":"Fianarantsoa","0":"Fianarantsoa","CountryCode":"MDG","1":"MDG","Population":"99005","2":"99005"},{"Name":"Skopje","0":"Skopje","CountryCode":"MKD","1":"MKD","Population":"444299","2":"444299"},{"Name":"Blantyre","0":"Blantyre","CountryCode":"MWI","1":"MWI","Population":"478155","2":"478155"},{"Name":"Lilongwe","0":"Lilongwe","CountryCode":"MWI","1":"MWI","Population":"435964","2":"435964"},{"Name":"Male","0":"Male","CountryCode":"MDV","1":"MDV","Population":"71000","2":"71000"},{"Name":"Kuala Lumpur","0":"Kuala Lumpur","CountryCode":"MYS","1":"MYS","Population":"1297526","2":"1297526"},{"Name":"Ipoh","0":"Ipoh","CountryCode":"MYS","1":"MYS","Population":"382853","2":"382853"},{"Name":"Johor Baharu","0":"Johor Baharu","CountryCode":"MYS","1":"MYS","Population":"328436","2":"328436"},{"Name":"Petaling Jaya","0":"Petaling Jaya","CountryCode":"MYS","1":"MYS","Population":"254350","2":"254350"},{"Name":"Kelang","0":"Kelang","CountryCode":"MYS","1":"MYS","Population":"243355","2":"243355"},{"Name":"Kuala Terengganu","0":"Kuala Terengganu","CountryCode":"MYS","1":"MYS","Population":"228119","2":"228119"},{"Name":"Pinang","0":"Pinang","CountryCode":"MYS","1":"MYS","Population":"219603","2":"219603"},{"Name":"Kota Bharu","0":"Kota Bharu","CountryCode":"MYS","1":"MYS","Population":"219582","2":"219582"},{"Name":"Kuantan","0":"Kuantan","CountryCode":"MYS","1":"MYS","Population":"199484","2":"199484"},{"Name":"Taiping","0":"Taiping","CountryCode":"MYS","1":"MYS","Population":"183261","2":"183261"},{"Name":"Seremban","0":"Seremban","CountryCode":"MYS","1":"MYS","Population":"182869","2":"182869"},{"Name":"Kuching","0":"Kuching","CountryCode":"MYS","1":"MYS","Population":"148059","2":"148059"},{"Name":"Sibu","0":"Sibu","CountryCode":"MYS","1":"MYS","Population":"126381","2":"126381"},{"Name":"Sandakan","0":"Sandakan","CountryCode":"MYS","1":"MYS","Population":"125841","2":"125841"},{"Name":"Alor Setar","0":"Alor Setar","CountryCode":"MYS","1":"MYS","Population":"124412","2":"124412"},{"Name":"Selayang Baru","0":"Selayang Baru","CountryCode":"MYS","1":"MYS","Population":"124228","2":"124228"},{"Name":"Sungai Petani","0":"Sungai Petani","CountryCode":"MYS","1":"MYS","Population":"114763","2":"114763"},{"Name":"Shah Alam","0":"Shah Alam","CountryCode":"MYS","1":"MYS","Population":"102019","2":"102019"},{"Name":"Bamako","0":"Bamako","CountryCode":"MLI","1":"MLI","Population":"809552","2":"809552"},{"Name":"Birkirkara","0":"Birkirkara","CountryCode":"MLT","1":"MLT","Population":"21445","2":"21445"},{"Name":"Valletta","0":"Valletta","CountryCode":"MLT","1":"MLT","Population":"7073","2":"7073"},{"Name":"Casablanca","0":"Casablanca","CountryCode":"MAR","1":"MAR","Population":"2940623","2":"2940623"},{"Name":"Rabat","0":"Rabat","CountryCode":"MAR","1":"MAR","Population":"623457","2":"623457"},{"Name":"Marrakech","0":"Marrakech","CountryCode":"MAR","1":"MAR","Population":"621914","2":"621914"},{"Name":"F\u00e8s","0":"F\u00e8s","CountryCode":"MAR","1":"MAR","Population":"541162","2":"541162"},{"Name":"Tanger","0":"Tanger","CountryCode":"MAR","1":"MAR","Population":"521735","2":"521735"},{"Name":"Sal\u00e9","0":"Sal\u00e9","CountryCode":"MAR","1":"MAR","Population":"504420","2":"504420"},{"Name":"Mekn\u00e8s","0":"Mekn\u00e8s","CountryCode":"MAR","1":"MAR","Population":"460000","2":"460000"},{"Name":"Oujda","0":"Oujda","CountryCode":"MAR","1":"MAR","Population":"365382","2":"365382"},{"Name":"K\u00e9nitra","0":"K\u00e9nitra","CountryCode":"MAR","1":"MAR","Population":"292600","2":"292600"},{"Name":"T\u00e9touan","0":"T\u00e9touan","CountryCode":"MAR","1":"MAR","Population":"277516","2":"277516"},{"Name":"Safi","0":"Safi","CountryCode":"MAR","1":"MAR","Population":"262300","2":"262300"},{"Name":"Agadir","0":"Agadir","CountryCode":"MAR","1":"MAR","Population":"155244","2":"155244"},{"Name":"Mohammedia","0":"Mohammedia","CountryCode":"MAR","1":"MAR","Population":"154706","2":"154706"},{"Name":"Khouribga","0":"Khouribga","CountryCode":"MAR","1":"MAR","Population":"152090","2":"152090"},{"Name":"Beni-Mellal","0":"Beni-Mellal","CountryCode":"MAR","1":"MAR","Population":"140212","2":"140212"},{"Name":"T\u00e9mara","0":"T\u00e9mara","CountryCode":"MAR","1":"MAR","Population":"126303","2":"126303"},{"Name":"El Jadida","0":"El Jadida","CountryCode":"MAR","1":"MAR","Population":"119083","2":"119083"},{"Name":"Nador","0":"Nador","CountryCode":"MAR","1":"MAR","Population":"112450","2":"112450"},{"Name":"Ksar el Kebir","0":"Ksar el Kebir","CountryCode":"MAR","1":"MAR","Population":"107065","2":"107065"},{"Name":"Settat","0":"Settat","CountryCode":"MAR","1":"MAR","Population":"96200","2":"96200"},{"Name":"Taza","0":"Taza","CountryCode":"MAR","1":"MAR","Population":"92700","2":"92700"},{"Name":"El Araich","0":"El Araich","CountryCode":"MAR","1":"MAR","Population":"90400","2":"90400"},{"Name":"Dalap-Uliga-Darrit","0":"Dalap-Uliga-Darrit","CountryCode":"MHL","1":"MHL","Population":"28000","2":"28000"},{"Name":"Fort-de-France","0":"Fort-de-France","CountryCode":"MTQ","1":"MTQ","Population":"94050","2":"94050"},{"Name":"Nouakchott","0":"Nouakchott","CountryCode":"MRT","1":"MRT","Population":"667300","2":"667300"},{"Name":"Nou\u00e2dhibou","0":"Nou\u00e2dhibou","CountryCode":"MRT","1":"MRT","Population":"97600","2":"97600"},{"Name":"Port-Louis","0":"Port-Louis","CountryCode":"MUS","1":"MUS","Population":"138200","2":"138200"},{"Name":"Beau Bassin-Rose Hill","0":"Beau Bassin-Rose Hill","CountryCode":"MUS","1":"MUS","Population":"100616","2":"100616"},{"Name":"Vacoas-Phoenix","0":"Vacoas-Phoenix","CountryCode":"MUS","1":"MUS","Population":"98464","2":"98464"},{"Name":"Mamoutzou","0":"Mamoutzou","CountryCode":"MYT","1":"MYT","Population":"12000","2":"12000"},{"Name":"Ciudad de M\u00e9xico","0":"Ciudad de M\u00e9xico","CountryCode":"MEX","1":"MEX","Population":"8591309","2":"8591309"},{"Name":"Guadalajara","0":"Guadalajara","CountryCode":"MEX","1":"MEX","Population":"1647720","2":"1647720"},{"Name":"Ecatepec de Morelos","0":"Ecatepec de Morelos","CountryCode":"MEX","1":"MEX","Population":"1620303","2":"1620303"},{"Name":"Puebla","0":"Puebla","CountryCode":"MEX","1":"MEX","Population":"1346176","2":"1346176"},{"Name":"Nezahualc\u00f3yotl","0":"Nezahualc\u00f3yotl","CountryCode":"MEX","1":"MEX","Population":"1224924","2":"1224924"},{"Name":"Ju\u00e1rez","0":"Ju\u00e1rez","CountryCode":"MEX","1":"MEX","Population":"1217818","2":"1217818"},{"Name":"Tijuana","0":"Tijuana","CountryCode":"MEX","1":"MEX","Population":"1212232","2":"1212232"},{"Name":"Le\u00f3n","0":"Le\u00f3n","CountryCode":"MEX","1":"MEX","Population":"1133576","2":"1133576"},{"Name":"Monterrey","0":"Monterrey","CountryCode":"MEX","1":"MEX","Population":"1108499","2":"1108499"},{"Name":"Zapopan","0":"Zapopan","CountryCode":"MEX","1":"MEX","Population":"1002239","2":"1002239"},{"Name":"Naucalpan de Ju\u00e1rez","0":"Naucalpan de Ju\u00e1rez","CountryCode":"MEX","1":"MEX","Population":"857511","2":"857511"},{"Name":"Mexicali","0":"Mexicali","CountryCode":"MEX","1":"MEX","Population":"764902","2":"764902"},{"Name":"Culiac\u00e1n","0":"Culiac\u00e1n","CountryCode":"MEX","1":"MEX","Population":"744859","2":"744859"},{"Name":"Acapulco de Ju\u00e1rez","0":"Acapulco de Ju\u00e1rez","CountryCode":"MEX","1":"MEX","Population":"721011","2":"721011"},{"Name":"Tlalnepantla de Baz","0":"Tlalnepantla de Baz","CountryCode":"MEX","1":"MEX","Population":"720755","2":"720755"},{"Name":"M\u00e9rida","0":"M\u00e9rida","CountryCode":"MEX","1":"MEX","Population":"703324","2":"703324"},{"Name":"Chihuahua","0":"Chihuahua","CountryCode":"MEX","1":"MEX","Population":"670208","2":"670208"},{"Name":"San Luis Potos\u00ed","0":"San Luis Potos\u00ed","CountryCode":"MEX","1":"MEX","Population":"669353","2":"669353"},{"Name":"Guadalupe","0":"Guadalupe","CountryCode":"MEX","1":"MEX","Population":"668780","2":"668780"},{"Name":"Toluca","0":"Toluca","CountryCode":"MEX","1":"MEX","Population":"665617","2":"665617"},{"Name":"Aguascalientes","0":"Aguascalientes","CountryCode":"MEX","1":"MEX","Population":"643360","2":"643360"},{"Name":"Quer\u00e9taro","0":"Quer\u00e9taro","CountryCode":"MEX","1":"MEX","Population":"639839","2":"639839"},{"Name":"Morelia","0":"Morelia","CountryCode":"MEX","1":"MEX","Population":"619958","2":"619958"},{"Name":"Hermosillo","0":"Hermosillo","CountryCode":"MEX","1":"MEX","Population":"608697","2":"608697"},{"Name":"Saltillo","0":"Saltillo","CountryCode":"MEX","1":"MEX","Population":"577352","2":"577352"},{"Name":"Torre\u00f3n","0":"Torre\u00f3n","CountryCode":"MEX","1":"MEX","Population":"529093","2":"529093"},{"Name":"Centro (Villahermosa)","0":"Centro (Villahermosa)","CountryCode":"MEX","1":"MEX","Population":"519873","2":"519873"},{"Name":"San Nicol\u00e1s de los Garza","0":"San Nicol\u00e1s de los Garza","CountryCode":"MEX","1":"MEX","Population":"495540","2":"495540"},{"Name":"Durango","0":"Durango","CountryCode":"MEX","1":"MEX","Population":"490524","2":"490524"},{"Name":"Chimalhuac\u00e1n","0":"Chimalhuac\u00e1n","CountryCode":"MEX","1":"MEX","Population":"490245","2":"490245"},{"Name":"Tlaquepaque","0":"Tlaquepaque","CountryCode":"MEX","1":"MEX","Population":"475472","2":"475472"},{"Name":"Atizap\u00e1n de Zaragoza","0":"Atizap\u00e1n de Zaragoza","CountryCode":"MEX","1":"MEX","Population":"467262","2":"467262"},{"Name":"Veracruz","0":"Veracruz","CountryCode":"MEX","1":"MEX","Population":"457119","2":"457119"},{"Name":"Cuautitl\u00e1n Izcalli","0":"Cuautitl\u00e1n Izcalli","CountryCode":"MEX","1":"MEX","Population":"452976","2":"452976"},{"Name":"Irapuato","0":"Irapuato","CountryCode":"MEX","1":"MEX","Population":"440039","2":"440039"},{"Name":"Tuxtla Guti\u00e9rrez","0":"Tuxtla Guti\u00e9rrez","CountryCode":"MEX","1":"MEX","Population":"433544","2":"433544"},{"Name":"Tultitl\u00e1n","0":"Tultitl\u00e1n","CountryCode":"MEX","1":"MEX","Population":"432411","2":"432411"},{"Name":"Reynosa","0":"Reynosa","CountryCode":"MEX","1":"MEX","Population":"419776","2":"419776"},{"Name":"Benito Ju\u00e1rez","0":"Benito Ju\u00e1rez","CountryCode":"MEX","1":"MEX","Population":"419276","2":"419276"},{"Name":"Matamoros","0":"Matamoros","CountryCode":"MEX","1":"MEX","Population":"416428","2":"416428"},{"Name":"Xalapa","0":"Xalapa","CountryCode":"MEX","1":"MEX","Population":"390058","2":"390058"},{"Name":"Celaya","0":"Celaya","CountryCode":"MEX","1":"MEX","Population":"382140","2":"382140"},{"Name":"Mazatl\u00e1n","0":"Mazatl\u00e1n","CountryCode":"MEX","1":"MEX","Population":"380265","2":"380265"},{"Name":"Ensenada","0":"Ensenada","CountryCode":"MEX","1":"MEX","Population":"369573","2":"369573"},{"Name":"Ahome","0":"Ahome","CountryCode":"MEX","1":"MEX","Population":"358663","2":"358663"},{"Name":"Cajeme","0":"Cajeme","CountryCode":"MEX","1":"MEX","Population":"355679","2":"355679"},{"Name":"Cuernavaca","0":"Cuernavaca","CountryCode":"MEX","1":"MEX","Population":"337966","2":"337966"},{"Name":"Tonal\u00e1","0":"Tonal\u00e1","CountryCode":"MEX","1":"MEX","Population":"336109","2":"336109"},{"Name":"Valle de Chalco Solidaridad","0":"Valle de Chalco Solidaridad","CountryCode":"MEX","1":"MEX","Population":"323113","2":"323113"},{"Name":"Nuevo Laredo","0":"Nuevo Laredo","CountryCode":"MEX","1":"MEX","Population":"310277","2":"310277"},{"Name":"Tepic","0":"Tepic","CountryCode":"MEX","1":"MEX","Population":"305025","2":"305025"},{"Name":"Tampico","0":"Tampico","CountryCode":"MEX","1":"MEX","Population":"294789","2":"294789"},{"Name":"Ixtapaluca","0":"Ixtapaluca","CountryCode":"MEX","1":"MEX","Population":"293160","2":"293160"},{"Name":"Apodaca","0":"Apodaca","CountryCode":"MEX","1":"MEX","Population":"282941","2":"282941"},{"Name":"Guasave","0":"Guasave","CountryCode":"MEX","1":"MEX","Population":"277201","2":"277201"},{"Name":"G\u00f3mez Palacio","0":"G\u00f3mez Palacio","CountryCode":"MEX","1":"MEX","Population":"272806","2":"272806"},{"Name":"Tapachula","0":"Tapachula","CountryCode":"MEX","1":"MEX","Population":"271141","2":"271141"},{"Name":"Nicol\u00e1s Romero","0":"Nicol\u00e1s Romero","CountryCode":"MEX","1":"MEX","Population":"269393","2":"269393"},{"Name":"Coatzacoalcos","0":"Coatzacoalcos","CountryCode":"MEX","1":"MEX","Population":"267037","2":"267037"},{"Name":"Uruapan","0":"Uruapan","CountryCode":"MEX","1":"MEX","Population":"265211","2":"265211"},{"Name":"Victoria","0":"Victoria","CountryCode":"MEX","1":"MEX","Population":"262686","2":"262686"},{"Name":"Oaxaca de Ju\u00e1rez","0":"Oaxaca de Ju\u00e1rez","CountryCode":"MEX","1":"MEX","Population":"256848","2":"256848"},{"Name":"Coacalco de Berrioz\u00e1bal","0":"Coacalco de Berrioz\u00e1bal","CountryCode":"MEX","1":"MEX","Population":"252270","2":"252270"},{"Name":"Pachuca de Soto","0":"Pachuca de Soto","CountryCode":"MEX","1":"MEX","Population":"244688","2":"244688"},{"Name":"General Escobedo","0":"General Escobedo","CountryCode":"MEX","1":"MEX","Population":"232961","2":"232961"},{"Name":"Salamanca","0":"Salamanca","CountryCode":"MEX","1":"MEX","Population":"226864","2":"226864"},{"Name":"Santa Catarina","0":"Santa Catarina","CountryCode":"MEX","1":"MEX","Population":"226573","2":"226573"},{"Name":"Tehuac\u00e1n","0":"Tehuac\u00e1n","CountryCode":"MEX","1":"MEX","Population":"225943","2":"225943"},{"Name":"Chalco","0":"Chalco","CountryCode":"MEX","1":"MEX","Population":"222201","2":"222201"},{"Name":"C\u00e1rdenas","0":"C\u00e1rdenas","CountryCode":"MEX","1":"MEX","Population":"216903","2":"216903"},{"Name":"Campeche","0":"Campeche","CountryCode":"MEX","1":"MEX","Population":"216735","2":"216735"},{"Name":"La Paz","0":"La Paz","CountryCode":"MEX","1":"MEX","Population":"213045","2":"213045"},{"Name":"Oth\u00f3n P. Blanco (Chetumal)","0":"Oth\u00f3n P. Blanco (Chetumal)","CountryCode":"MEX","1":"MEX","Population":"208014","2":"208014"},{"Name":"Texcoco","0":"Texcoco","CountryCode":"MEX","1":"MEX","Population":"203681","2":"203681"},{"Name":"La Paz","0":"La Paz","CountryCode":"MEX","1":"MEX","Population":"196708","2":"196708"},{"Name":"Metepec","0":"Metepec","CountryCode":"MEX","1":"MEX","Population":"194265","2":"194265"},{"Name":"Monclova","0":"Monclova","CountryCode":"MEX","1":"MEX","Population":"193657","2":"193657"},{"Name":"Huixquilucan","0":"Huixquilucan","CountryCode":"MEX","1":"MEX","Population":"193156","2":"193156"},{"Name":"Chilpancingo de los Bravo","0":"Chilpancingo de los Bravo","CountryCode":"MEX","1":"MEX","Population":"192509","2":"192509"},{"Name":"Puerto Vallarta","0":"Puerto Vallarta","CountryCode":"MEX","1":"MEX","Population":"183741","2":"183741"},{"Name":"Fresnillo","0":"Fresnillo","CountryCode":"MEX","1":"MEX","Population":"182744","2":"182744"},{"Name":"Ciudad Madero","0":"Ciudad Madero","CountryCode":"MEX","1":"MEX","Population":"182012","2":"182012"},{"Name":"Soledad de Graciano S\u00e1nchez","0":"Soledad de Graciano S\u00e1nchez","CountryCode":"MEX","1":"MEX","Population":"179956","2":"179956"},{"Name":"San Juan del R\u00edo","0":"San Juan del R\u00edo","CountryCode":"MEX","1":"MEX","Population":"179300","2":"179300"},{"Name":"San Felipe del Progreso","0":"San Felipe del Progreso","CountryCode":"MEX","1":"MEX","Population":"177330","2":"177330"},{"Name":"C\u00f3rdoba","0":"C\u00f3rdoba","CountryCode":"MEX","1":"MEX","Population":"176952","2":"176952"},{"Name":"Tec\u00e1mac","0":"Tec\u00e1mac","CountryCode":"MEX","1":"MEX","Population":"172410","2":"172410"},{"Name":"Ocosingo","0":"Ocosingo","CountryCode":"MEX","1":"MEX","Population":"171495","2":"171495"},{"Name":"Carmen","0":"Carmen","CountryCode":"MEX","1":"MEX","Population":"171367","2":"171367"},{"Name":"L\u00e1zaro C\u00e1rdenas","0":"L\u00e1zaro C\u00e1rdenas","CountryCode":"MEX","1":"MEX","Population":"170878","2":"170878"},{"Name":"Jiutepec","0":"Jiutepec","CountryCode":"MEX","1":"MEX","Population":"170428","2":"170428"},{"Name":"Papantla","0":"Papantla","CountryCode":"MEX","1":"MEX","Population":"170123","2":"170123"},{"Name":"Comalcalco","0":"Comalcalco","CountryCode":"MEX","1":"MEX","Population":"164640","2":"164640"},{"Name":"Zamora","0":"Zamora","CountryCode":"MEX","1":"MEX","Population":"161191","2":"161191"},{"Name":"Nogales","0":"Nogales","CountryCode":"MEX","1":"MEX","Population":"159103","2":"159103"},{"Name":"Huimanguillo","0":"Huimanguillo","CountryCode":"MEX","1":"MEX","Population":"158335","2":"158335"},{"Name":"Cuautla","0":"Cuautla","CountryCode":"MEX","1":"MEX","Population":"153132","2":"153132"},{"Name":"Minatitl\u00e1n","0":"Minatitl\u00e1n","CountryCode":"MEX","1":"MEX","Population":"152983","2":"152983"},{"Name":"Poza Rica de Hidalgo","0":"Poza Rica de Hidalgo","CountryCode":"MEX","1":"MEX","Population":"152678","2":"152678"},{"Name":"Ciudad Valles","0":"Ciudad Valles","CountryCode":"MEX","1":"MEX","Population":"146411","2":"146411"},{"Name":"Navolato","0":"Navolato","CountryCode":"MEX","1":"MEX","Population":"145396","2":"145396"},{"Name":"San Luis R\u00edo Colorado","0":"San Luis R\u00edo Colorado","CountryCode":"MEX","1":"MEX","Population":"145276","2":"145276"},{"Name":"P\u00e9njamo","0":"P\u00e9njamo","CountryCode":"MEX","1":"MEX","Population":"143927","2":"143927"},{"Name":"San Andr\u00e9s Tuxtla","0":"San Andr\u00e9s Tuxtla","CountryCode":"MEX","1":"MEX","Population":"142251","2":"142251"},{"Name":"Guanajuato","0":"Guanajuato","CountryCode":"MEX","1":"MEX","Population":"141215","2":"141215"},{"Name":"Navojoa","0":"Navojoa","CountryCode":"MEX","1":"MEX","Population":"140495","2":"140495"},{"Name":"Zit\u00e1cuaro","0":"Zit\u00e1cuaro","CountryCode":"MEX","1":"MEX","Population":"137970","2":"137970"},{"Name":"Boca del R\u00edo","0":"Boca del R\u00edo","CountryCode":"MEX","1":"MEX","Population":"135721","2":"135721"},{"Name":"Allende","0":"Allende","CountryCode":"MEX","1":"MEX","Population":"134645","2":"134645"},{"Name":"Silao","0":"Silao","CountryCode":"MEX","1":"MEX","Population":"134037","2":"134037"},{"Name":"Macuspana","0":"Macuspana","CountryCode":"MEX","1":"MEX","Population":"133795","2":"133795"},{"Name":"San Juan Bautista Tuxtepec","0":"San Juan Bautista Tuxtepec","CountryCode":"MEX","1":"MEX","Population":"133675","2":"133675"},{"Name":"San Crist\u00f3bal de las Casas","0":"San Crist\u00f3bal de las Casas","CountryCode":"MEX","1":"MEX","Population":"132317","2":"132317"},{"Name":"Valle de Santiago","0":"Valle de Santiago","CountryCode":"MEX","1":"MEX","Population":"130557","2":"130557"},{"Name":"Guaymas","0":"Guaymas","CountryCode":"MEX","1":"MEX","Population":"130108","2":"130108"},{"Name":"Colima","0":"Colima","CountryCode":"MEX","1":"MEX","Population":"129454","2":"129454"},{"Name":"Dolores Hidalgo","0":"Dolores Hidalgo","CountryCode":"MEX","1":"MEX","Population":"128675","2":"128675"},{"Name":"Lagos de Moreno","0":"Lagos de Moreno","CountryCode":"MEX","1":"MEX","Population":"127949","2":"127949"},{"Name":"Piedras Negras","0":"Piedras Negras","CountryCode":"MEX","1":"MEX","Population":"127898","2":"127898"},{"Name":"Altamira","0":"Altamira","CountryCode":"MEX","1":"MEX","Population":"127490","2":"127490"},{"Name":"T\u00faxpam","0":"T\u00faxpam","CountryCode":"MEX","1":"MEX","Population":"126475","2":"126475"},{"Name":"San Pedro Garza Garc\u00eda","0":"San Pedro Garza Garc\u00eda","CountryCode":"MEX","1":"MEX","Population":"126147","2":"126147"},{"Name":"Cuauht\u00e9moc","0":"Cuauht\u00e9moc","CountryCode":"MEX","1":"MEX","Population":"124279","2":"124279"},{"Name":"Manzanillo","0":"Manzanillo","CountryCode":"MEX","1":"MEX","Population":"124014","2":"124014"},{"Name":"Iguala de la Independencia","0":"Iguala de la Independencia","CountryCode":"MEX","1":"MEX","Population":"123883","2":"123883"},{"Name":"Zacatecas","0":"Zacatecas","CountryCode":"MEX","1":"MEX","Population":"123700","2":"123700"},{"Name":"Tlajomulco de Z\u00fa\u00f1iga","0":"Tlajomulco de Z\u00fa\u00f1iga","CountryCode":"MEX","1":"MEX","Population":"123220","2":"123220"},{"Name":"Tulancingo de Bravo","0":"Tulancingo de Bravo","CountryCode":"MEX","1":"MEX","Population":"121946","2":"121946"},{"Name":"Zinacantepec","0":"Zinacantepec","CountryCode":"MEX","1":"MEX","Population":"121715","2":"121715"},{"Name":"San Mart\u00edn Texmelucan","0":"San Mart\u00edn Texmelucan","CountryCode":"MEX","1":"MEX","Population":"121093","2":"121093"},{"Name":"Tepatitl\u00e1n de Morelos","0":"Tepatitl\u00e1n de Morelos","CountryCode":"MEX","1":"MEX","Population":"118948","2":"118948"},{"Name":"Mart\u00ednez de la Torre","0":"Mart\u00ednez de la Torre","CountryCode":"MEX","1":"MEX","Population":"118815","2":"118815"},{"Name":"Orizaba","0":"Orizaba","CountryCode":"MEX","1":"MEX","Population":"118488","2":"118488"},{"Name":"Apatzing\u00e1n","0":"Apatzing\u00e1n","CountryCode":"MEX","1":"MEX","Population":"117849","2":"117849"},{"Name":"Atlixco","0":"Atlixco","CountryCode":"MEX","1":"MEX","Population":"117019","2":"117019"},{"Name":"Delicias","0":"Delicias","CountryCode":"MEX","1":"MEX","Population":"116132","2":"116132"},{"Name":"Ixtlahuaca","0":"Ixtlahuaca","CountryCode":"MEX","1":"MEX","Population":"115548","2":"115548"},{"Name":"El Mante","0":"El Mante","CountryCode":"MEX","1":"MEX","Population":"112453","2":"112453"},{"Name":"Lerdo","0":"Lerdo","CountryCode":"MEX","1":"MEX","Population":"112272","2":"112272"},{"Name":"Almoloya de Ju\u00e1rez","0":"Almoloya de Ju\u00e1rez","CountryCode":"MEX","1":"MEX","Population":"110550","2":"110550"},{"Name":"Ac\u00e1mbaro","0":"Ac\u00e1mbaro","CountryCode":"MEX","1":"MEX","Population":"110487","2":"110487"},{"Name":"Acu\u00f1a","0":"Acu\u00f1a","CountryCode":"MEX","1":"MEX","Population":"110388","2":"110388"},{"Name":"Guadalupe","0":"Guadalupe","CountryCode":"MEX","1":"MEX","Population":"108881","2":"108881"},{"Name":"Huejutla de Reyes","0":"Huejutla de Reyes","CountryCode":"MEX","1":"MEX","Population":"108017","2":"108017"},{"Name":"Hidalgo","0":"Hidalgo","CountryCode":"MEX","1":"MEX","Population":"106198","2":"106198"},{"Name":"Los Cabos","0":"Los Cabos","CountryCode":"MEX","1":"MEX","Population":"105199","2":"105199"},{"Name":"Comit\u00e1n de Dom\u00ednguez","0":"Comit\u00e1n de Dom\u00ednguez","CountryCode":"MEX","1":"MEX","Population":"104986","2":"104986"},{"Name":"Cunduac\u00e1n","0":"Cunduac\u00e1n","CountryCode":"MEX","1":"MEX","Population":"104164","2":"104164"},{"Name":"R\u00edo Bravo","0":"R\u00edo Bravo","CountryCode":"MEX","1":"MEX","Population":"103901","2":"103901"},{"Name":"Temapache","0":"Temapache","CountryCode":"MEX","1":"MEX","Population":"102824","2":"102824"},{"Name":"Chilapa de Alvarez","0":"Chilapa de Alvarez","CountryCode":"MEX","1":"MEX","Population":"102716","2":"102716"},{"Name":"Hidalgo del Parral","0":"Hidalgo del Parral","CountryCode":"MEX","1":"MEX","Population":"100881","2":"100881"},{"Name":"San Francisco del Rinc\u00f3n","0":"San Francisco del Rinc\u00f3n","CountryCode":"MEX","1":"MEX","Population":"100149","2":"100149"},{"Name":"Taxco de Alarc\u00f3n","0":"Taxco de Alarc\u00f3n","CountryCode":"MEX","1":"MEX","Population":"99907","2":"99907"},{"Name":"Zumpango","0":"Zumpango","CountryCode":"MEX","1":"MEX","Population":"99781","2":"99781"},{"Name":"San Pedro Cholula","0":"San Pedro Cholula","CountryCode":"MEX","1":"MEX","Population":"99734","2":"99734"},{"Name":"Lerma","0":"Lerma","CountryCode":"MEX","1":"MEX","Population":"99714","2":"99714"},{"Name":"Tecom\u00e1n","0":"Tecom\u00e1n","CountryCode":"MEX","1":"MEX","Population":"99296","2":"99296"},{"Name":"Las Margaritas","0":"Las Margaritas","CountryCode":"MEX","1":"MEX","Population":"97389","2":"97389"},{"Name":"Cosoleacaque","0":"Cosoleacaque","CountryCode":"MEX","1":"MEX","Population":"97199","2":"97199"},{"Name":"San Luis de la Paz","0":"San Luis de la Paz","CountryCode":"MEX","1":"MEX","Population":"96763","2":"96763"},{"Name":"Jos\u00e9 Azueta","0":"Jos\u00e9 Azueta","CountryCode":"MEX","1":"MEX","Population":"95448","2":"95448"},{"Name":"Santiago Ixcuintla","0":"Santiago Ixcuintla","CountryCode":"MEX","1":"MEX","Population":"95311","2":"95311"},{"Name":"San Felipe","0":"San Felipe","CountryCode":"MEX","1":"MEX","Population":"95305","2":"95305"},{"Name":"Tejupilco","0":"Tejupilco","CountryCode":"MEX","1":"MEX","Population":"94934","2":"94934"},{"Name":"Tantoyuca","0":"Tantoyuca","CountryCode":"MEX","1":"MEX","Population":"94709","2":"94709"},{"Name":"Salvatierra","0":"Salvatierra","CountryCode":"MEX","1":"MEX","Population":"94322","2":"94322"},{"Name":"Tultepec","0":"Tultepec","CountryCode":"MEX","1":"MEX","Population":"93364","2":"93364"},{"Name":"Temixco","0":"Temixco","CountryCode":"MEX","1":"MEX","Population":"92686","2":"92686"},{"Name":"Matamoros","0":"Matamoros","CountryCode":"MEX","1":"MEX","Population":"91858","2":"91858"},{"Name":"P\u00e1nuco","0":"P\u00e1nuco","CountryCode":"MEX","1":"MEX","Population":"90551","2":"90551"},{"Name":"El Fuerte","0":"El Fuerte","CountryCode":"MEX","1":"MEX","Population":"89556","2":"89556"},{"Name":"Tierra Blanca","0":"Tierra Blanca","CountryCode":"MEX","1":"MEX","Population":"89143","2":"89143"},{"Name":"Weno","0":"Weno","CountryCode":"FSM","1":"FSM","Population":"22000","2":"22000"},{"Name":"Palikir","0":"Palikir","CountryCode":"FSM","1":"FSM","Population":"8600","2":"8600"},{"Name":"Chisinau","0":"Chisinau","CountryCode":"MDA","1":"MDA","Population":"719900","2":"719900"},{"Name":"Tiraspol","0":"Tiraspol","CountryCode":"MDA","1":"MDA","Population":"194300","2":"194300"},{"Name":"Balti","0":"Balti","CountryCode":"MDA","1":"MDA","Population":"153400","2":"153400"},{"Name":"Bender (T\u00eeghina)","0":"Bender (T\u00eeghina)","CountryCode":"MDA","1":"MDA","Population":"125700","2":"125700"},{"Name":"Monte-Carlo","0":"Monte-Carlo","CountryCode":"MCO","1":"MCO","Population":"13154","2":"13154"},{"Name":"Monaco-Ville","0":"Monaco-Ville","CountryCode":"MCO","1":"MCO","Population":"1234","2":"1234"},{"Name":"Ulan Bator","0":"Ulan Bator","CountryCode":"MNG","1":"MNG","Population":"773700","2":"773700"},{"Name":"Plymouth","0":"Plymouth","CountryCode":"MSR","1":"MSR","Population":"2000","2":"2000"},{"Name":"Maputo","0":"Maputo","CountryCode":"MOZ","1":"MOZ","Population":"1018938","2":"1018938"},{"Name":"Matola","0":"Matola","CountryCode":"MOZ","1":"MOZ","Population":"424662","2":"424662"},{"Name":"Beira","0":"Beira","CountryCode":"MOZ","1":"MOZ","Population":"397368","2":"397368"},{"Name":"Nampula","0":"Nampula","CountryCode":"MOZ","1":"MOZ","Population":"303346","2":"303346"},{"Name":"Chimoio","0":"Chimoio","CountryCode":"MOZ","1":"MOZ","Population":"171056","2":"171056"},{"Name":"Na\u00e7ala-Porto","0":"Na\u00e7ala-Porto","CountryCode":"MOZ","1":"MOZ","Population":"158248","2":"158248"},{"Name":"Quelimane","0":"Quelimane","CountryCode":"MOZ","1":"MOZ","Population":"150116","2":"150116"},{"Name":"Mocuba","0":"Mocuba","CountryCode":"MOZ","1":"MOZ","Population":"124700","2":"124700"},{"Name":"Tete","0":"Tete","CountryCode":"MOZ","1":"MOZ","Population":"101984","2":"101984"},{"Name":"Xai-Xai","0":"Xai-Xai","CountryCode":"MOZ","1":"MOZ","Population":"99442","2":"99442"},{"Name":"Gurue","0":"Gurue","CountryCode":"MOZ","1":"MOZ","Population":"99300","2":"99300"},{"Name":"Maxixe","0":"Maxixe","CountryCode":"MOZ","1":"MOZ","Population":"93985","2":"93985"},{"Name":"Rangoon (Yangon)","0":"Rangoon (Yangon)","CountryCode":"MMR","1":"MMR","Population":"3361700","2":"3361700"},{"Name":"Mandalay","0":"Mandalay","CountryCode":"MMR","1":"MMR","Population":"885300","2":"885300"},{"Name":"Moulmein (Mawlamyine)","0":"Moulmein (Mawlamyine)","CountryCode":"MMR","1":"MMR","Population":"307900","2":"307900"},{"Name":"Pegu (Bago)","0":"Pegu (Bago)","CountryCode":"MMR","1":"MMR","Population":"190900","2":"190900"},{"Name":"Bassein (Pathein)","0":"Bassein (Pathein)","CountryCode":"MMR","1":"MMR","Population":"183900","2":"183900"},{"Name":"Monywa","0":"Monywa","CountryCode":"MMR","1":"MMR","Population":"138600","2":"138600"},{"Name":"Sittwe (Akyab)","0":"Sittwe (Akyab)","CountryCode":"MMR","1":"MMR","Population":"137600","2":"137600"},{"Name":"Taunggyi (Taunggye)","0":"Taunggyi (Taunggye)","CountryCode":"MMR","1":"MMR","Population":"131500","2":"131500"},{"Name":"Meikhtila","0":"Meikhtila","CountryCode":"MMR","1":"MMR","Population":"129700","2":"129700"},{"Name":"Mergui (Myeik)","0":"Mergui (Myeik)","CountryCode":"MMR","1":"MMR","Population":"122700","2":"122700"},{"Name":"Lashio (Lasho)","0":"Lashio (Lasho)","CountryCode":"MMR","1":"MMR","Population":"107600","2":"107600"},{"Name":"Prome (Pyay)","0":"Prome (Pyay)","CountryCode":"MMR","1":"MMR","Population":"105700","2":"105700"},{"Name":"Henzada (Hinthada)","0":"Henzada (Hinthada)","CountryCode":"MMR","1":"MMR","Population":"104700","2":"104700"},{"Name":"Myingyan","0":"Myingyan","CountryCode":"MMR","1":"MMR","Population":"103600","2":"103600"},{"Name":"Tavoy (Dawei)","0":"Tavoy (Dawei)","CountryCode":"MMR","1":"MMR","Population":"96800","2":"96800"},{"Name":"Pagakku (Pakokku)","0":"Pagakku (Pakokku)","CountryCode":"MMR","1":"MMR","Population":"94800","2":"94800"},{"Name":"Windhoek","0":"Windhoek","CountryCode":"NAM","1":"NAM","Population":"169000","2":"169000"},{"Name":"Yangor","0":"Yangor","CountryCode":"NRU","1":"NRU","Population":"4050","2":"4050"},{"Name":"Yaren","0":"Yaren","CountryCode":"NRU","1":"NRU","Population":"559","2":"559"},{"Name":"Kathmandu","0":"Kathmandu","CountryCode":"NPL","1":"NPL","Population":"591835","2":"591835"},{"Name":"Biratnagar","0":"Biratnagar","CountryCode":"NPL","1":"NPL","Population":"157764","2":"157764"},{"Name":"Pokhara","0":"Pokhara","CountryCode":"NPL","1":"NPL","Population":"146318","2":"146318"},{"Name":"Lalitapur","0":"Lalitapur","CountryCode":"NPL","1":"NPL","Population":"145847","2":"145847"},{"Name":"Birgunj","0":"Birgunj","CountryCode":"NPL","1":"NPL","Population":"90639","2":"90639"},{"Name":"Managua","0":"Managua","CountryCode":"NIC","1":"NIC","Population":"959000","2":"959000"},{"Name":"Le\u00f3n","0":"Le\u00f3n","CountryCode":"NIC","1":"NIC","Population":"123865","2":"123865"},{"Name":"Chinandega","0":"Chinandega","CountryCode":"NIC","1":"NIC","Population":"97387","2":"97387"},{"Name":"Masaya","0":"Masaya","CountryCode":"NIC","1":"NIC","Population":"88971","2":"88971"},{"Name":"Niamey","0":"Niamey","CountryCode":"NER","1":"NER","Population":"420000","2":"420000"},{"Name":"Zinder","0":"Zinder","CountryCode":"NER","1":"NER","Population":"120892","2":"120892"},{"Name":"Maradi","0":"Maradi","CountryCode":"NER","1":"NER","Population":"112965","2":"112965"},{"Name":"Lagos","0":"Lagos","CountryCode":"NGA","1":"NGA","Population":"1518000","2":"1518000"},{"Name":"Ibadan","0":"Ibadan","CountryCode":"NGA","1":"NGA","Population":"1432000","2":"1432000"},{"Name":"Ogbomosho","0":"Ogbomosho","CountryCode":"NGA","1":"NGA","Population":"730000","2":"730000"},{"Name":"Kano","0":"Kano","CountryCode":"NGA","1":"NGA","Population":"674100","2":"674100"},{"Name":"Oshogbo","0":"Oshogbo","CountryCode":"NGA","1":"NGA","Population":"476800","2":"476800"},{"Name":"Ilorin","0":"Ilorin","CountryCode":"NGA","1":"NGA","Population":"475800","2":"475800"},{"Name":"Abeokuta","0":"Abeokuta","CountryCode":"NGA","1":"NGA","Population":"427400","2":"427400"},{"Name":"Port Harcourt","0":"Port Harcourt","CountryCode":"NGA","1":"NGA","Population":"410000","2":"410000"},{"Name":"Zaria","0":"Zaria","CountryCode":"NGA","1":"NGA","Population":"379200","2":"379200"},{"Name":"Ilesha","0":"Ilesha","CountryCode":"NGA","1":"NGA","Population":"378400","2":"378400"},{"Name":"Onitsha","0":"Onitsha","CountryCode":"NGA","1":"NGA","Population":"371900","2":"371900"},{"Name":"Iwo","0":"Iwo","CountryCode":"NGA","1":"NGA","Population":"362000","2":"362000"},{"Name":"Ado-Ekiti","0":"Ado-Ekiti","CountryCode":"NGA","1":"NGA","Population":"359400","2":"359400"},{"Name":"Abuja","0":"Abuja","CountryCode":"NGA","1":"NGA","Population":"350100","2":"350100"},{"Name":"Kaduna","0":"Kaduna","CountryCode":"NGA","1":"NGA","Population":"342200","2":"342200"},{"Name":"Mushin","0":"Mushin","CountryCode":"NGA","1":"NGA","Population":"333200","2":"333200"},{"Name":"Maiduguri","0":"Maiduguri","CountryCode":"NGA","1":"NGA","Population":"320000","2":"320000"},{"Name":"Enugu","0":"Enugu","CountryCode":"NGA","1":"NGA","Population":"316100","2":"316100"},{"Name":"Ede","0":"Ede","CountryCode":"NGA","1":"NGA","Population":"307100","2":"307100"},{"Name":"Aba","0":"Aba","CountryCode":"NGA","1":"NGA","Population":"298900","2":"298900"},{"Name":"Ife","0":"Ife","CountryCode":"NGA","1":"NGA","Population":"296800","2":"296800"},{"Name":"Ila","0":"Ila","CountryCode":"NGA","1":"NGA","Population":"264000","2":"264000"},{"Name":"Oyo","0":"Oyo","CountryCode":"NGA","1":"NGA","Population":"256400","2":"256400"},{"Name":"Ikerre","0":"Ikerre","CountryCode":"NGA","1":"NGA","Population":"244600","2":"244600"},{"Name":"Benin City","0":"Benin City","CountryCode":"NGA","1":"NGA","Population":"229400","2":"229400"},{"Name":"Iseyin","0":"Iseyin","CountryCode":"NGA","1":"NGA","Population":"217300","2":"217300"},{"Name":"Katsina","0":"Katsina","CountryCode":"NGA","1":"NGA","Population":"206500","2":"206500"},{"Name":"Jos","0":"Jos","CountryCode":"NGA","1":"NGA","Population":"206300","2":"206300"},{"Name":"Sokoto","0":"Sokoto","CountryCode":"NGA","1":"NGA","Population":"204900","2":"204900"},{"Name":"Ilobu","0":"Ilobu","CountryCode":"NGA","1":"NGA","Population":"199000","2":"199000"},{"Name":"Offa","0":"Offa","CountryCode":"NGA","1":"NGA","Population":"197200","2":"197200"},{"Name":"Ikorodu","0":"Ikorodu","CountryCode":"NGA","1":"NGA","Population":"184900","2":"184900"},{"Name":"Ilawe-Ekiti","0":"Ilawe-Ekiti","CountryCode":"NGA","1":"NGA","Population":"184500","2":"184500"},{"Name":"Owo","0":"Owo","CountryCode":"NGA","1":"NGA","Population":"183500","2":"183500"},{"Name":"Ikirun","0":"Ikirun","CountryCode":"NGA","1":"NGA","Population":"181400","2":"181400"},{"Name":"Shaki","0":"Shaki","CountryCode":"NGA","1":"NGA","Population":"174500","2":"174500"},{"Name":"Calabar","0":"Calabar","CountryCode":"NGA","1":"NGA","Population":"174400","2":"174400"},{"Name":"Ondo","0":"Ondo","CountryCode":"NGA","1":"NGA","Population":"173600","2":"173600"},{"Name":"Akure","0":"Akure","CountryCode":"NGA","1":"NGA","Population":"162300","2":"162300"},{"Name":"Gusau","0":"Gusau","CountryCode":"NGA","1":"NGA","Population":"158000","2":"158000"},{"Name":"Ijebu-Ode","0":"Ijebu-Ode","CountryCode":"NGA","1":"NGA","Population":"156400","2":"156400"},{"Name":"Effon-Alaiye","0":"Effon-Alaiye","CountryCode":"NGA","1":"NGA","Population":"153100","2":"153100"},{"Name":"Kumo","0":"Kumo","CountryCode":"NGA","1":"NGA","Population":"148000","2":"148000"},{"Name":"Shomolu","0":"Shomolu","CountryCode":"NGA","1":"NGA","Population":"147700","2":"147700"},{"Name":"Oka-Akoko","0":"Oka-Akoko","CountryCode":"NGA","1":"NGA","Population":"142900","2":"142900"},{"Name":"Ikare","0":"Ikare","CountryCode":"NGA","1":"NGA","Population":"140800","2":"140800"},{"Name":"Sapele","0":"Sapele","CountryCode":"NGA","1":"NGA","Population":"139200","2":"139200"},{"Name":"Deba Habe","0":"Deba Habe","CountryCode":"NGA","1":"NGA","Population":"138600","2":"138600"},{"Name":"Minna","0":"Minna","CountryCode":"NGA","1":"NGA","Population":"136900","2":"136900"},{"Name":"Warri","0":"Warri","CountryCode":"NGA","1":"NGA","Population":"126100","2":"126100"},{"Name":"Bida","0":"Bida","CountryCode":"NGA","1":"NGA","Population":"125500","2":"125500"},{"Name":"Ikire","0":"Ikire","CountryCode":"NGA","1":"NGA","Population":"123300","2":"123300"},{"Name":"Makurdi","0":"Makurdi","CountryCode":"NGA","1":"NGA","Population":"123100","2":"123100"},{"Name":"Lafia","0":"Lafia","CountryCode":"NGA","1":"NGA","Population":"122500","2":"122500"},{"Name":"Inisa","0":"Inisa","CountryCode":"NGA","1":"NGA","Population":"119800","2":"119800"},{"Name":"Shagamu","0":"Shagamu","CountryCode":"NGA","1":"NGA","Population":"117200","2":"117200"},{"Name":"Awka","0":"Awka","CountryCode":"NGA","1":"NGA","Population":"111200","2":"111200"},{"Name":"Gombe","0":"Gombe","CountryCode":"NGA","1":"NGA","Population":"107800","2":"107800"},{"Name":"Igboho","0":"Igboho","CountryCode":"NGA","1":"NGA","Population":"106800","2":"106800"},{"Name":"Ejigbo","0":"Ejigbo","CountryCode":"NGA","1":"NGA","Population":"105900","2":"105900"},{"Name":"Agege","0":"Agege","CountryCode":"NGA","1":"NGA","Population":"105000","2":"105000"},{"Name":"Ise-Ekiti","0":"Ise-Ekiti","CountryCode":"NGA","1":"NGA","Population":"103400","2":"103400"},{"Name":"Ugep","0":"Ugep","CountryCode":"NGA","1":"NGA","Population":"102600","2":"102600"},{"Name":"Epe","0":"Epe","CountryCode":"NGA","1":"NGA","Population":"101000","2":"101000"},{"Name":"Alofi","0":"Alofi","CountryCode":"NIU","1":"NIU","Population":"682","2":"682"},{"Name":"Kingston","0":"Kingston","CountryCode":"NFK","1":"NFK","Population":"800","2":"800"},{"Name":"Oslo","0":"Oslo","CountryCode":"NOR","1":"NOR","Population":"508726","2":"508726"},{"Name":"Bergen","0":"Bergen","CountryCode":"NOR","1":"NOR","Population":"230948","2":"230948"},{"Name":"Trondheim","0":"Trondheim","CountryCode":"NOR","1":"NOR","Population":"150166","2":"150166"},{"Name":"Stavanger","0":"Stavanger","CountryCode":"NOR","1":"NOR","Population":"108848","2":"108848"},{"Name":"B\u00e6rum","0":"B\u00e6rum","CountryCode":"NOR","1":"NOR","Population":"101340","2":"101340"},{"Name":"Abidjan","0":"Abidjan","CountryCode":"CIV","1":"CIV","Population":"2500000","2":"2500000"},{"Name":"Bouak\u00e9","0":"Bouak\u00e9","CountryCode":"CIV","1":"CIV","Population":"329850","2":"329850"},{"Name":"Yamoussoukro","0":"Yamoussoukro","CountryCode":"CIV","1":"CIV","Population":"130000","2":"130000"},{"Name":"Daloa","0":"Daloa","CountryCode":"CIV","1":"CIV","Population":"121842","2":"121842"},{"Name":"Korhogo","0":"Korhogo","CountryCode":"CIV","1":"CIV","Population":"109445","2":"109445"},{"Name":"al-Sib","0":"al-Sib","CountryCode":"OMN","1":"OMN","Population":"155000","2":"155000"},{"Name":"Salala","0":"Salala","CountryCode":"OMN","1":"OMN","Population":"131813","2":"131813"},{"Name":"Bawshar","0":"Bawshar","CountryCode":"OMN","1":"OMN","Population":"107500","2":"107500"},{"Name":"Suhar","0":"Suhar","CountryCode":"OMN","1":"OMN","Population":"90814","2":"90814"},{"Name":"Masqat","0":"Masqat","CountryCode":"OMN","1":"OMN","Population":"51969","2":"51969"},{"Name":"Karachi","0":"Karachi","CountryCode":"PAK","1":"PAK","Population":"9269265","2":"9269265"},{"Name":"Lahore","0":"Lahore","CountryCode":"PAK","1":"PAK","Population":"5063499","2":"5063499"},{"Name":"Faisalabad","0":"Faisalabad","CountryCode":"PAK","1":"PAK","Population":"1977246","2":"1977246"},{"Name":"Rawalpindi","0":"Rawalpindi","CountryCode":"PAK","1":"PAK","Population":"1406214","2":"1406214"},{"Name":"Multan","0":"Multan","CountryCode":"PAK","1":"PAK","Population":"1182441","2":"1182441"},{"Name":"Hyderabad","0":"Hyderabad","CountryCode":"PAK","1":"PAK","Population":"1151274","2":"1151274"},{"Name":"Gujranwala","0":"Gujranwala","CountryCode":"PAK","1":"PAK","Population":"1124749","2":"1124749"},{"Name":"Peshawar","0":"Peshawar","CountryCode":"PAK","1":"PAK","Population":"988005","2":"988005"},{"Name":"Quetta","0":"Quetta","CountryCode":"PAK","1":"PAK","Population":"560307","2":"560307"},{"Name":"Islamabad","0":"Islamabad","CountryCode":"PAK","1":"PAK","Population":"524500","2":"524500"},{"Name":"Sargodha","0":"Sargodha","CountryCode":"PAK","1":"PAK","Population":"455360","2":"455360"},{"Name":"Sialkot","0":"Sialkot","CountryCode":"PAK","1":"PAK","Population":"417597","2":"417597"},{"Name":"Bahawalpur","0":"Bahawalpur","CountryCode":"PAK","1":"PAK","Population":"403408","2":"403408"},{"Name":"Sukkur","0":"Sukkur","CountryCode":"PAK","1":"PAK","Population":"329176","2":"329176"},{"Name":"Jhang","0":"Jhang","CountryCode":"PAK","1":"PAK","Population":"292214","2":"292214"},{"Name":"Sheikhupura","0":"Sheikhupura","CountryCode":"PAK","1":"PAK","Population":"271875","2":"271875"},{"Name":"Larkana","0":"Larkana","CountryCode":"PAK","1":"PAK","Population":"270366","2":"270366"},{"Name":"Gujrat","0":"Gujrat","CountryCode":"PAK","1":"PAK","Population":"250121","2":"250121"},{"Name":"Mardan","0":"Mardan","CountryCode":"PAK","1":"PAK","Population":"244511","2":"244511"},{"Name":"Kasur","0":"Kasur","CountryCode":"PAK","1":"PAK","Population":"241649","2":"241649"},{"Name":"Rahim Yar Khan","0":"Rahim Yar Khan","CountryCode":"PAK","1":"PAK","Population":"228479","2":"228479"},{"Name":"Sahiwal","0":"Sahiwal","CountryCode":"PAK","1":"PAK","Population":"207388","2":"207388"},{"Name":"Okara","0":"Okara","CountryCode":"PAK","1":"PAK","Population":"200901","2":"200901"},{"Name":"Wah","0":"Wah","CountryCode":"PAK","1":"PAK","Population":"198400","2":"198400"},{"Name":"Dera Ghazi Khan","0":"Dera Ghazi Khan","CountryCode":"PAK","1":"PAK","Population":"188100","2":"188100"},{"Name":"Mirpur Khas","0":"Mirpur Khas","CountryCode":"PAK","1":"PAK","Population":"184500","2":"184500"},{"Name":"Nawabshah","0":"Nawabshah","CountryCode":"PAK","1":"PAK","Population":"183100","2":"183100"},{"Name":"Mingora","0":"Mingora","CountryCode":"PAK","1":"PAK","Population":"174500","2":"174500"},{"Name":"Chiniot","0":"Chiniot","CountryCode":"PAK","1":"PAK","Population":"169300","2":"169300"},{"Name":"Kamoke","0":"Kamoke","CountryCode":"PAK","1":"PAK","Population":"151000","2":"151000"},{"Name":"Mandi Burewala","0":"Mandi Burewala","CountryCode":"PAK","1":"PAK","Population":"149900","2":"149900"},{"Name":"Jhelum","0":"Jhelum","CountryCode":"PAK","1":"PAK","Population":"145800","2":"145800"},{"Name":"Sadiqabad","0":"Sadiqabad","CountryCode":"PAK","1":"PAK","Population":"141500","2":"141500"},{"Name":"Jacobabad","0":"Jacobabad","CountryCode":"PAK","1":"PAK","Population":"137700","2":"137700"},{"Name":"Shikarpur","0":"Shikarpur","CountryCode":"PAK","1":"PAK","Population":"133300","2":"133300"},{"Name":"Khanewal","0":"Khanewal","CountryCode":"PAK","1":"PAK","Population":"133000","2":"133000"},{"Name":"Hafizabad","0":"Hafizabad","CountryCode":"PAK","1":"PAK","Population":"130200","2":"130200"},{"Name":"Kohat","0":"Kohat","CountryCode":"PAK","1":"PAK","Population":"125300","2":"125300"},{"Name":"Muzaffargarh","0":"Muzaffargarh","CountryCode":"PAK","1":"PAK","Population":"121600","2":"121600"},{"Name":"Khanpur","0":"Khanpur","CountryCode":"PAK","1":"PAK","Population":"117800","2":"117800"},{"Name":"Gojra","0":"Gojra","CountryCode":"PAK","1":"PAK","Population":"115000","2":"115000"},{"Name":"Bahawalnagar","0":"Bahawalnagar","CountryCode":"PAK","1":"PAK","Population":"109600","2":"109600"},{"Name":"Muridke","0":"Muridke","CountryCode":"PAK","1":"PAK","Population":"108600","2":"108600"},{"Name":"Pak Pattan","0":"Pak Pattan","CountryCode":"PAK","1":"PAK","Population":"107800","2":"107800"},{"Name":"Abottabad","0":"Abottabad","CountryCode":"PAK","1":"PAK","Population":"106000","2":"106000"},{"Name":"Tando Adam","0":"Tando Adam","CountryCode":"PAK","1":"PAK","Population":"103400","2":"103400"},{"Name":"Jaranwala","0":"Jaranwala","CountryCode":"PAK","1":"PAK","Population":"103300","2":"103300"},{"Name":"Khairpur","0":"Khairpur","CountryCode":"PAK","1":"PAK","Population":"102200","2":"102200"},{"Name":"Chishtian Mandi","0":"Chishtian Mandi","CountryCode":"PAK","1":"PAK","Population":"101700","2":"101700"},{"Name":"Daska","0":"Daska","CountryCode":"PAK","1":"PAK","Population":"101500","2":"101500"},{"Name":"Dadu","0":"Dadu","CountryCode":"PAK","1":"PAK","Population":"98600","2":"98600"},{"Name":"Mandi Bahauddin","0":"Mandi Bahauddin","CountryCode":"PAK","1":"PAK","Population":"97300","2":"97300"},{"Name":"Ahmadpur East","0":"Ahmadpur East","CountryCode":"PAK","1":"PAK","Population":"96000","2":"96000"},{"Name":"Kamalia","0":"Kamalia","CountryCode":"PAK","1":"PAK","Population":"95300","2":"95300"},{"Name":"Khuzdar","0":"Khuzdar","CountryCode":"PAK","1":"PAK","Population":"93100","2":"93100"},{"Name":"Vihari","0":"Vihari","CountryCode":"PAK","1":"PAK","Population":"92300","2":"92300"},{"Name":"Dera Ismail Khan","0":"Dera Ismail Khan","CountryCode":"PAK","1":"PAK","Population":"90400","2":"90400"},{"Name":"Wazirabad","0":"Wazirabad","CountryCode":"PAK","1":"PAK","Population":"89700","2":"89700"},{"Name":"Nowshera","0":"Nowshera","CountryCode":"PAK","1":"PAK","Population":"89400","2":"89400"},{"Name":"Koror","0":"Koror","CountryCode":"PLW","1":"PLW","Population":"12000","2":"12000"},{"Name":"Ciudad de Panam\u00e1","0":"Ciudad de Panam\u00e1","CountryCode":"PAN","1":"PAN","Population":"471373","2":"471373"},{"Name":"San Miguelito","0":"San Miguelito","CountryCode":"PAN","1":"PAN","Population":"315382","2":"315382"},{"Name":"Port Moresby","0":"Port Moresby","CountryCode":"PNG","1":"PNG","Population":"247000","2":"247000"},{"Name":"Asunci\u00f3n","0":"Asunci\u00f3n","CountryCode":"PRY","1":"PRY","Population":"557776","2":"557776"},{"Name":"Ciudad del Este","0":"Ciudad del Este","CountryCode":"PRY","1":"PRY","Population":"133881","2":"133881"},{"Name":"San Lorenzo","0":"San Lorenzo","CountryCode":"PRY","1":"PRY","Population":"133395","2":"133395"},{"Name":"Lambar\u00e9","0":"Lambar\u00e9","CountryCode":"PRY","1":"PRY","Population":"99681","2":"99681"},{"Name":"Fernando de la Mora","0":"Fernando de la Mora","CountryCode":"PRY","1":"PRY","Population":"95287","2":"95287"},{"Name":"Lima","0":"Lima","CountryCode":"PER","1":"PER","Population":"6464693","2":"6464693"},{"Name":"Arequipa","0":"Arequipa","CountryCode":"PER","1":"PER","Population":"762000","2":"762000"},{"Name":"Trujillo","0":"Trujillo","CountryCode":"PER","1":"PER","Population":"652000","2":"652000"},{"Name":"Chiclayo","0":"Chiclayo","CountryCode":"PER","1":"PER","Population":"517000","2":"517000"},{"Name":"Callao","0":"Callao","CountryCode":"PER","1":"PER","Population":"424294","2":"424294"},{"Name":"Iquitos","0":"Iquitos","CountryCode":"PER","1":"PER","Population":"367000","2":"367000"},{"Name":"Chimbote","0":"Chimbote","CountryCode":"PER","1":"PER","Population":"336000","2":"336000"},{"Name":"Huancayo","0":"Huancayo","CountryCode":"PER","1":"PER","Population":"327000","2":"327000"},{"Name":"Piura","0":"Piura","CountryCode":"PER","1":"PER","Population":"325000","2":"325000"},{"Name":"Cusco","0":"Cusco","CountryCode":"PER","1":"PER","Population":"291000","2":"291000"},{"Name":"Pucallpa","0":"Pucallpa","CountryCode":"PER","1":"PER","Population":"220866","2":"220866"},{"Name":"Tacna","0":"Tacna","CountryCode":"PER","1":"PER","Population":"215683","2":"215683"},{"Name":"Ica","0":"Ica","CountryCode":"PER","1":"PER","Population":"194820","2":"194820"},{"Name":"Sullana","0":"Sullana","CountryCode":"PER","1":"PER","Population":"147361","2":"147361"},{"Name":"Juliaca","0":"Juliaca","CountryCode":"PER","1":"PER","Population":"142576","2":"142576"},{"Name":"Hu\u00e1nuco","0":"Hu\u00e1nuco","CountryCode":"PER","1":"PER","Population":"129688","2":"129688"},{"Name":"Ayacucho","0":"Ayacucho","CountryCode":"PER","1":"PER","Population":"118960","2":"118960"},{"Name":"Chincha Alta","0":"Chincha Alta","CountryCode":"PER","1":"PER","Population":"110016","2":"110016"},{"Name":"Cajamarca","0":"Cajamarca","CountryCode":"PER","1":"PER","Population":"108009","2":"108009"},{"Name":"Puno","0":"Puno","CountryCode":"PER","1":"PER","Population":"101578","2":"101578"},{"Name":"Ventanilla","0":"Ventanilla","CountryCode":"PER","1":"PER","Population":"101056","2":"101056"},{"Name":"Castilla","0":"Castilla","CountryCode":"PER","1":"PER","Population":"90642","2":"90642"},{"Name":"Adamstown","0":"Adamstown","CountryCode":"PCN","1":"PCN","Population":"42","2":"42"},{"Name":"Garapan","0":"Garapan","CountryCode":"MNP","1":"MNP","Population":"9200","2":"9200"},{"Name":"Lisboa","0":"Lisboa","CountryCode":"PRT","1":"PRT","Population":"563210","2":"563210"},{"Name":"Porto","0":"Porto","CountryCode":"PRT","1":"PRT","Population":"273060","2":"273060"},{"Name":"Amadora","0":"Amadora","CountryCode":"PRT","1":"PRT","Population":"122106","2":"122106"},{"Name":"Co\u00edmbra","0":"Co\u00edmbra","CountryCode":"PRT","1":"PRT","Population":"96100","2":"96100"},{"Name":"Braga","0":"Braga","CountryCode":"PRT","1":"PRT","Population":"90535","2":"90535"},{"Name":"San Juan","0":"San Juan","CountryCode":"PRI","1":"PRI","Population":"434374","2":"434374"},{"Name":"Bayam\u00f3n","0":"Bayam\u00f3n","CountryCode":"PRI","1":"PRI","Population":"224044","2":"224044"},{"Name":"Ponce","0":"Ponce","CountryCode":"PRI","1":"PRI","Population":"186475","2":"186475"},{"Name":"Carolina","0":"Carolina","CountryCode":"PRI","1":"PRI","Population":"186076","2":"186076"},{"Name":"Caguas","0":"Caguas","CountryCode":"PRI","1":"PRI","Population":"140502","2":"140502"},{"Name":"Arecibo","0":"Arecibo","CountryCode":"PRI","1":"PRI","Population":"100131","2":"100131"},{"Name":"Guaynabo","0":"Guaynabo","CountryCode":"PRI","1":"PRI","Population":"100053","2":"100053"},{"Name":"Mayag\u00fcez","0":"Mayag\u00fcez","CountryCode":"PRI","1":"PRI","Population":"98434","2":"98434"},{"Name":"Toa Baja","0":"Toa Baja","CountryCode":"PRI","1":"PRI","Population":"94085","2":"94085"},{"Name":"Warszawa","0":"Warszawa","CountryCode":"POL","1":"POL","Population":"1615369","2":"1615369"},{"Name":"L\u00f3dz","0":"L\u00f3dz","CountryCode":"POL","1":"POL","Population":"800110","2":"800110"},{"Name":"Krak\u00f3w","0":"Krak\u00f3w","CountryCode":"POL","1":"POL","Population":"738150","2":"738150"},{"Name":"Wroclaw","0":"Wroclaw","CountryCode":"POL","1":"POL","Population":"636765","2":"636765"},{"Name":"Poznan","0":"Poznan","CountryCode":"POL","1":"POL","Population":"576899","2":"576899"},{"Name":"Gdansk","0":"Gdansk","CountryCode":"POL","1":"POL","Population":"458988","2":"458988"},{"Name":"Szczecin","0":"Szczecin","CountryCode":"POL","1":"POL","Population":"416988","2":"416988"},{"Name":"Bydgoszcz","0":"Bydgoszcz","CountryCode":"POL","1":"POL","Population":"386855","2":"386855"},{"Name":"Lublin","0":"Lublin","CountryCode":"POL","1":"POL","Population":"356251","2":"356251"},{"Name":"Katowice","0":"Katowice","CountryCode":"POL","1":"POL","Population":"345934","2":"345934"},{"Name":"Bialystok","0":"Bialystok","CountryCode":"POL","1":"POL","Population":"283937","2":"283937"},{"Name":"Czestochowa","0":"Czestochowa","CountryCode":"POL","1":"POL","Population":"257812","2":"257812"},{"Name":"Gdynia","0":"Gdynia","CountryCode":"POL","1":"POL","Population":"253521","2":"253521"},{"Name":"Sosnowiec","0":"Sosnowiec","CountryCode":"POL","1":"POL","Population":"244102","2":"244102"},{"Name":"Radom","0":"Radom","CountryCode":"POL","1":"POL","Population":"232262","2":"232262"},{"Name":"Kielce","0":"Kielce","CountryCode":"POL","1":"POL","Population":"212383","2":"212383"},{"Name":"Gliwice","0":"Gliwice","CountryCode":"POL","1":"POL","Population":"212164","2":"212164"},{"Name":"Torun","0":"Torun","CountryCode":"POL","1":"POL","Population":"206158","2":"206158"},{"Name":"Bytom","0":"Bytom","CountryCode":"POL","1":"POL","Population":"205560","2":"205560"},{"Name":"Zabrze","0":"Zabrze","CountryCode":"POL","1":"POL","Population":"200177","2":"200177"},{"Name":"Bielsko-Biala","0":"Bielsko-Biala","CountryCode":"POL","1":"POL","Population":"180307","2":"180307"},{"Name":"Olsztyn","0":"Olsztyn","CountryCode":"POL","1":"POL","Population":"170904","2":"170904"},{"Name":"Rzesz\u00f3w","0":"Rzesz\u00f3w","CountryCode":"POL","1":"POL","Population":"162049","2":"162049"},{"Name":"Ruda Slaska","0":"Ruda Slaska","CountryCode":"POL","1":"POL","Population":"159665","2":"159665"},{"Name":"Rybnik","0":"Rybnik","CountryCode":"POL","1":"POL","Population":"144582","2":"144582"},{"Name":"Walbrzych","0":"Walbrzych","CountryCode":"POL","1":"POL","Population":"136923","2":"136923"},{"Name":"Tychy","0":"Tychy","CountryCode":"POL","1":"POL","Population":"133178","2":"133178"},{"Name":"Dabrowa G\u00f3rnicza","0":"Dabrowa G\u00f3rnicza","CountryCode":"POL","1":"POL","Population":"131037","2":"131037"},{"Name":"Plock","0":"Plock","CountryCode":"POL","1":"POL","Population":"131011","2":"131011"},{"Name":"Elblag","0":"Elblag","CountryCode":"POL","1":"POL","Population":"129782","2":"129782"},{"Name":"Opole","0":"Opole","CountryCode":"POL","1":"POL","Population":"129553","2":"129553"},{"Name":"Gorz\u00f3w Wielkopolski","0":"Gorz\u00f3w Wielkopolski","CountryCode":"POL","1":"POL","Population":"126019","2":"126019"},{"Name":"Wloclawek","0":"Wloclawek","CountryCode":"POL","1":"POL","Population":"123373","2":"123373"},{"Name":"Chorz\u00f3w","0":"Chorz\u00f3w","CountryCode":"POL","1":"POL","Population":"121708","2":"121708"},{"Name":"Tarn\u00f3w","0":"Tarn\u00f3w","CountryCode":"POL","1":"POL","Population":"121494","2":"121494"},{"Name":"Zielona G\u00f3ra","0":"Zielona G\u00f3ra","CountryCode":"POL","1":"POL","Population":"118182","2":"118182"},{"Name":"Koszalin","0":"Koszalin","CountryCode":"POL","1":"POL","Population":"112375","2":"112375"},{"Name":"Legnica","0":"Legnica","CountryCode":"POL","1":"POL","Population":"109335","2":"109335"},{"Name":"Kalisz","0":"Kalisz","CountryCode":"POL","1":"POL","Population":"106641","2":"106641"},{"Name":"Grudziadz","0":"Grudziadz","CountryCode":"POL","1":"POL","Population":"102434","2":"102434"},{"Name":"Slupsk","0":"Slupsk","CountryCode":"POL","1":"POL","Population":"102370","2":"102370"},{"Name":"Jastrzebie-Zdr\u00f3j","0":"Jastrzebie-Zdr\u00f3j","CountryCode":"POL","1":"POL","Population":"102294","2":"102294"},{"Name":"Jaworzno","0":"Jaworzno","CountryCode":"POL","1":"POL","Population":"97929","2":"97929"},{"Name":"Jelenia G\u00f3ra","0":"Jelenia G\u00f3ra","CountryCode":"POL","1":"POL","Population":"93901","2":"93901"},{"Name":"Malabo","0":"Malabo","CountryCode":"GNQ","1":"GNQ","Population":"40000","2":"40000"},{"Name":"Doha","0":"Doha","CountryCode":"QAT","1":"QAT","Population":"355000","2":"355000"},{"Name":"Paris","0":"Paris","CountryCode":"FRA","1":"FRA","Population":"2125246","2":"2125246"},{"Name":"Marseille","0":"Marseille","CountryCode":"FRA","1":"FRA","Population":"798430","2":"798430"},{"Name":"Lyon","0":"Lyon","CountryCode":"FRA","1":"FRA","Population":"445452","2":"445452"},{"Name":"Toulouse","0":"Toulouse","CountryCode":"FRA","1":"FRA","Population":"390350","2":"390350"},{"Name":"Nice","0":"Nice","CountryCode":"FRA","1":"FRA","Population":"342738","2":"342738"},{"Name":"Nantes","0":"Nantes","CountryCode":"FRA","1":"FRA","Population":"270251","2":"270251"},{"Name":"Strasbourg","0":"Strasbourg","CountryCode":"FRA","1":"FRA","Population":"264115","2":"264115"},{"Name":"Montpellier","0":"Montpellier","CountryCode":"FRA","1":"FRA","Population":"225392","2":"225392"},{"Name":"Bordeaux","0":"Bordeaux","CountryCode":"FRA","1":"FRA","Population":"215363","2":"215363"},{"Name":"Rennes","0":"Rennes","CountryCode":"FRA","1":"FRA","Population":"206229","2":"206229"},{"Name":"Le Havre","0":"Le Havre","CountryCode":"FRA","1":"FRA","Population":"190905","2":"190905"},{"Name":"Reims","0":"Reims","CountryCode":"FRA","1":"FRA","Population":"187206","2":"187206"},{"Name":"Lille","0":"Lille","CountryCode":"FRA","1":"FRA","Population":"184657","2":"184657"},{"Name":"St-\u00c9tienne","0":"St-\u00c9tienne","CountryCode":"FRA","1":"FRA","Population":"180210","2":"180210"},{"Name":"Toulon","0":"Toulon","CountryCode":"FRA","1":"FRA","Population":"160639","2":"160639"},{"Name":"Grenoble","0":"Grenoble","CountryCode":"FRA","1":"FRA","Population":"153317","2":"153317"},{"Name":"Angers","0":"Angers","CountryCode":"FRA","1":"FRA","Population":"151279","2":"151279"},{"Name":"Dijon","0":"Dijon","CountryCode":"FRA","1":"FRA","Population":"149867","2":"149867"},{"Name":"Brest","0":"Brest","CountryCode":"FRA","1":"FRA","Population":"149634","2":"149634"},{"Name":"Le Mans","0":"Le Mans","CountryCode":"FRA","1":"FRA","Population":"146105","2":"146105"},{"Name":"Clermont-Ferrand","0":"Clermont-Ferrand","CountryCode":"FRA","1":"FRA","Population":"137140","2":"137140"},{"Name":"Amiens","0":"Amiens","CountryCode":"FRA","1":"FRA","Population":"135501","2":"135501"},{"Name":"Aix-en-Provence","0":"Aix-en-Provence","CountryCode":"FRA","1":"FRA","Population":"134222","2":"134222"},{"Name":"Limoges","0":"Limoges","CountryCode":"FRA","1":"FRA","Population":"133968","2":"133968"},{"Name":"N\u00eemes","0":"N\u00eemes","CountryCode":"FRA","1":"FRA","Population":"133424","2":"133424"},{"Name":"Tours","0":"Tours","CountryCode":"FRA","1":"FRA","Population":"132820","2":"132820"},{"Name":"Villeurbanne","0":"Villeurbanne","CountryCode":"FRA","1":"FRA","Population":"124215","2":"124215"},{"Name":"Metz","0":"Metz","CountryCode":"FRA","1":"FRA","Population":"123776","2":"123776"},{"Name":"Besan\u00e7on","0":"Besan\u00e7on","CountryCode":"FRA","1":"FRA","Population":"117733","2":"117733"},{"Name":"Caen","0":"Caen","CountryCode":"FRA","1":"FRA","Population":"113987","2":"113987"},{"Name":"Orl\u00e9ans","0":"Orl\u00e9ans","CountryCode":"FRA","1":"FRA","Population":"113126","2":"113126"},{"Name":"Mulhouse","0":"Mulhouse","CountryCode":"FRA","1":"FRA","Population":"110359","2":"110359"},{"Name":"Rouen","0":"Rouen","CountryCode":"FRA","1":"FRA","Population":"106592","2":"106592"},{"Name":"Boulogne-Billancourt","0":"Boulogne-Billancourt","CountryCode":"FRA","1":"FRA","Population":"106367","2":"106367"},{"Name":"Perpignan","0":"Perpignan","CountryCode":"FRA","1":"FRA","Population":"105115","2":"105115"},{"Name":"Nancy","0":"Nancy","CountryCode":"FRA","1":"FRA","Population":"103605","2":"103605"},{"Name":"Roubaix","0":"Roubaix","CountryCode":"FRA","1":"FRA","Population":"96984","2":"96984"},{"Name":"Argenteuil","0":"Argenteuil","CountryCode":"FRA","1":"FRA","Population":"93961","2":"93961"},{"Name":"Tourcoing","0":"Tourcoing","CountryCode":"FRA","1":"FRA","Population":"93540","2":"93540"},{"Name":"Montreuil","0":"Montreuil","CountryCode":"FRA","1":"FRA","Population":"90674","2":"90674"},{"Name":"Cayenne","0":"Cayenne","CountryCode":"GUF","1":"GUF","Population":"50699","2":"50699"},{"Name":"Faaa","0":"Faaa","CountryCode":"PYF","1":"PYF","Population":"25888","2":"25888"},{"Name":"Papeete","0":"Papeete","CountryCode":"PYF","1":"PYF","Population":"25553","2":"25553"},{"Name":"Saint-Denis","0":"Saint-Denis","CountryCode":"REU","1":"REU","Population":"131480","2":"131480"},{"Name":"Bucuresti","0":"Bucuresti","CountryCode":"ROM","1":"ROM","Population":"2016131","2":"2016131"},{"Name":"Iasi","0":"Iasi","CountryCode":"ROM","1":"ROM","Population":"348070","2":"348070"},{"Name":"Constanta","0":"Constanta","CountryCode":"ROM","1":"ROM","Population":"342264","2":"342264"},{"Name":"Cluj-Napoca","0":"Cluj-Napoca","CountryCode":"ROM","1":"ROM","Population":"332498","2":"332498"},{"Name":"Galati","0":"Galati","CountryCode":"ROM","1":"ROM","Population":"330276","2":"330276"},{"Name":"Timisoara","0":"Timisoara","CountryCode":"ROM","1":"ROM","Population":"324304","2":"324304"},{"Name":"Brasov","0":"Brasov","CountryCode":"ROM","1":"ROM","Population":"314225","2":"314225"},{"Name":"Craiova","0":"Craiova","CountryCode":"ROM","1":"ROM","Population":"313530","2":"313530"},{"Name":"Ploiesti","0":"Ploiesti","CountryCode":"ROM","1":"ROM","Population":"251348","2":"251348"},{"Name":"Braila","0":"Braila","CountryCode":"ROM","1":"ROM","Population":"233756","2":"233756"},{"Name":"Oradea","0":"Oradea","CountryCode":"ROM","1":"ROM","Population":"222239","2":"222239"},{"Name":"Bacau","0":"Bacau","CountryCode":"ROM","1":"ROM","Population":"209235","2":"209235"},{"Name":"Pitesti","0":"Pitesti","CountryCode":"ROM","1":"ROM","Population":"187170","2":"187170"},{"Name":"Arad","0":"Arad","CountryCode":"ROM","1":"ROM","Population":"184408","2":"184408"},{"Name":"Sibiu","0":"Sibiu","CountryCode":"ROM","1":"ROM","Population":"169611","2":"169611"},{"Name":"T\u00e2rgu Mures","0":"T\u00e2rgu Mures","CountryCode":"ROM","1":"ROM","Population":"165153","2":"165153"},{"Name":"Baia Mare","0":"Baia Mare","CountryCode":"ROM","1":"ROM","Population":"149665","2":"149665"},{"Name":"Buzau","0":"Buzau","CountryCode":"ROM","1":"ROM","Population":"148372","2":"148372"},{"Name":"Satu Mare","0":"Satu Mare","CountryCode":"ROM","1":"ROM","Population":"130059","2":"130059"},{"Name":"Botosani","0":"Botosani","CountryCode":"ROM","1":"ROM","Population":"128730","2":"128730"},{"Name":"Piatra Neamt","0":"Piatra Neamt","CountryCode":"ROM","1":"ROM","Population":"125070","2":"125070"},{"Name":"R\u00e2mnicu V\u00e2lcea","0":"R\u00e2mnicu V\u00e2lcea","CountryCode":"ROM","1":"ROM","Population":"119741","2":"119741"},{"Name":"Suceava","0":"Suceava","CountryCode":"ROM","1":"ROM","Population":"118549","2":"118549"},{"Name":"Drobeta-Turnu Severin","0":"Drobeta-Turnu Severin","CountryCode":"ROM","1":"ROM","Population":"117865","2":"117865"},{"Name":"T\u00e2rgoviste","0":"T\u00e2rgoviste","CountryCode":"ROM","1":"ROM","Population":"98980","2":"98980"},{"Name":"Focsani","0":"Focsani","CountryCode":"ROM","1":"ROM","Population":"98979","2":"98979"},{"Name":"T\u00e2rgu Jiu","0":"T\u00e2rgu Jiu","CountryCode":"ROM","1":"ROM","Population":"98524","2":"98524"},{"Name":"Tulcea","0":"Tulcea","CountryCode":"ROM","1":"ROM","Population":"96278","2":"96278"},{"Name":"Resita","0":"Resita","CountryCode":"ROM","1":"ROM","Population":"93976","2":"93976"},{"Name":"Kigali","0":"Kigali","CountryCode":"RWA","1":"RWA","Population":"286000","2":"286000"},{"Name":"Stockholm","0":"Stockholm","CountryCode":"SWE","1":"SWE","Population":"750348","2":"750348"},{"Name":"Gothenburg [G\u00f6teborg]","0":"Gothenburg [G\u00f6teborg]","CountryCode":"SWE","1":"SWE","Population":"466990","2":"466990"},{"Name":"Malm\u00f6","0":"Malm\u00f6","CountryCode":"SWE","1":"SWE","Population":"259579","2":"259579"},{"Name":"Uppsala","0":"Uppsala","CountryCode":"SWE","1":"SWE","Population":"189569","2":"189569"},{"Name":"Link\u00f6ping","0":"Link\u00f6ping","CountryCode":"SWE","1":"SWE","Population":"133168","2":"133168"},{"Name":"V\u00e4ster\u00e5s","0":"V\u00e4ster\u00e5s","CountryCode":"SWE","1":"SWE","Population":"126328","2":"126328"},{"Name":"\u00d6rebro","0":"\u00d6rebro","CountryCode":"SWE","1":"SWE","Population":"124207","2":"124207"},{"Name":"Norrk\u00f6ping","0":"Norrk\u00f6ping","CountryCode":"SWE","1":"SWE","Population":"122199","2":"122199"},{"Name":"Helsingborg","0":"Helsingborg","CountryCode":"SWE","1":"SWE","Population":"117737","2":"117737"},{"Name":"J\u00f6nk\u00f6ping","0":"J\u00f6nk\u00f6ping","CountryCode":"SWE","1":"SWE","Population":"117095","2":"117095"},{"Name":"Ume\u00e5","0":"Ume\u00e5","CountryCode":"SWE","1":"SWE","Population":"104512","2":"104512"},{"Name":"Lund","0":"Lund","CountryCode":"SWE","1":"SWE","Population":"98948","2":"98948"},{"Name":"Bor\u00e5s","0":"Bor\u00e5s","CountryCode":"SWE","1":"SWE","Population":"96883","2":"96883"},{"Name":"Sundsvall","0":"Sundsvall","CountryCode":"SWE","1":"SWE","Population":"93126","2":"93126"},{"Name":"G\u00e4vle","0":"G\u00e4vle","CountryCode":"SWE","1":"SWE","Population":"90742","2":"90742"},{"Name":"Jamestown","0":"Jamestown","CountryCode":"SHN","1":"SHN","Population":"1500","2":"1500"},{"Name":"Basseterre","0":"Basseterre","CountryCode":"KNA","1":"KNA","Population":"11600","2":"11600"},{"Name":"Castries","0":"Castries","CountryCode":"LCA","1":"LCA","Population":"2301","2":"2301"},{"Name":"Kingstown","0":"Kingstown","CountryCode":"VCT","1":"VCT","Population":"17100","2":"17100"},{"Name":"Saint-Pierre","0":"Saint-Pierre","CountryCode":"SPM","1":"SPM","Population":"5808","2":"5808"},{"Name":"Berlin","0":"Berlin","CountryCode":"DEU","1":"DEU","Population":"3386667","2":"3386667"},{"Name":"Hamburg","0":"Hamburg","CountryCode":"DEU","1":"DEU","Population":"1704735","2":"1704735"},{"Name":"Munich [M\u00fcnchen]","0":"Munich [M\u00fcnchen]","CountryCode":"DEU","1":"DEU","Population":"1194560","2":"1194560"},{"Name":"K\u00f6ln","0":"K\u00f6ln","CountryCode":"DEU","1":"DEU","Population":"962507","2":"962507"},{"Name":"Frankfurt am Main","0":"Frankfurt am Main","CountryCode":"DEU","1":"DEU","Population":"643821","2":"643821"},{"Name":"Essen","0":"Essen","CountryCode":"DEU","1":"DEU","Population":"599515","2":"599515"},{"Name":"Dortmund","0":"Dortmund","CountryCode":"DEU","1":"DEU","Population":"590213","2":"590213"},{"Name":"Stuttgart","0":"Stuttgart","CountryCode":"DEU","1":"DEU","Population":"582443","2":"582443"},{"Name":"D\u00fcsseldorf","0":"D\u00fcsseldorf","CountryCode":"DEU","1":"DEU","Population":"568855","2":"568855"},{"Name":"Bremen","0":"Bremen","CountryCode":"DEU","1":"DEU","Population":"540330","2":"540330"},{"Name":"Duisburg","0":"Duisburg","CountryCode":"DEU","1":"DEU","Population":"519793","2":"519793"},{"Name":"Hannover","0":"Hannover","CountryCode":"DEU","1":"DEU","Population":"514718","2":"514718"},{"Name":"Leipzig","0":"Leipzig","CountryCode":"DEU","1":"DEU","Population":"489532","2":"489532"},{"Name":"N\u00fcrnberg","0":"N\u00fcrnberg","CountryCode":"DEU","1":"DEU","Population":"486628","2":"486628"},{"Name":"Dresden","0":"Dresden","CountryCode":"DEU","1":"DEU","Population":"476668","2":"476668"},{"Name":"Bochum","0":"Bochum","CountryCode":"DEU","1":"DEU","Population":"392830","2":"392830"},{"Name":"Wuppertal","0":"Wuppertal","CountryCode":"DEU","1":"DEU","Population":"368993","2":"368993"},{"Name":"Bielefeld","0":"Bielefeld","CountryCode":"DEU","1":"DEU","Population":"321125","2":"321125"},{"Name":"Mannheim","0":"Mannheim","CountryCode":"DEU","1":"DEU","Population":"307730","2":"307730"},{"Name":"Bonn","0":"Bonn","CountryCode":"DEU","1":"DEU","Population":"301048","2":"301048"},{"Name":"Gelsenkirchen","0":"Gelsenkirchen","CountryCode":"DEU","1":"DEU","Population":"281979","2":"281979"},{"Name":"Karlsruhe","0":"Karlsruhe","CountryCode":"DEU","1":"DEU","Population":"277204","2":"277204"},{"Name":"Wiesbaden","0":"Wiesbaden","CountryCode":"DEU","1":"DEU","Population":"268716","2":"268716"},{"Name":"M\u00fcnster","0":"M\u00fcnster","CountryCode":"DEU","1":"DEU","Population":"264670","2":"264670"},{"Name":"M\u00f6nchengladbach","0":"M\u00f6nchengladbach","CountryCode":"DEU","1":"DEU","Population":"263697","2":"263697"},{"Name":"Chemnitz","0":"Chemnitz","CountryCode":"DEU","1":"DEU","Population":"263222","2":"263222"},{"Name":"Augsburg","0":"Augsburg","CountryCode":"DEU","1":"DEU","Population":"254867","2":"254867"},{"Name":"Halle\/Saale","0":"Halle\/Saale","CountryCode":"DEU","1":"DEU","Population":"254360","2":"254360"},{"Name":"Braunschweig","0":"Braunschweig","CountryCode":"DEU","1":"DEU","Population":"246322","2":"246322"},{"Name":"Aachen","0":"Aachen","CountryCode":"DEU","1":"DEU","Population":"243825","2":"243825"},{"Name":"Krefeld","0":"Krefeld","CountryCode":"DEU","1":"DEU","Population":"241769","2":"241769"},{"Name":"Magdeburg","0":"Magdeburg","CountryCode":"DEU","1":"DEU","Population":"235073","2":"235073"},{"Name":"Kiel","0":"Kiel","CountryCode":"DEU","1":"DEU","Population":"233795","2":"233795"},{"Name":"Oberhausen","0":"Oberhausen","CountryCode":"DEU","1":"DEU","Population":"222349","2":"222349"},{"Name":"L\u00fcbeck","0":"L\u00fcbeck","CountryCode":"DEU","1":"DEU","Population":"213326","2":"213326"},{"Name":"Hagen","0":"Hagen","CountryCode":"DEU","1":"DEU","Population":"205201","2":"205201"},{"Name":"Rostock","0":"Rostock","CountryCode":"DEU","1":"DEU","Population":"203279","2":"203279"},{"Name":"Freiburg im Breisgau","0":"Freiburg im Breisgau","CountryCode":"DEU","1":"DEU","Population":"202455","2":"202455"},{"Name":"Erfurt","0":"Erfurt","CountryCode":"DEU","1":"DEU","Population":"201267","2":"201267"},{"Name":"Kassel","0":"Kassel","CountryCode":"DEU","1":"DEU","Population":"196211","2":"196211"},{"Name":"Saarbr\u00fccken","0":"Saarbr\u00fccken","CountryCode":"DEU","1":"DEU","Population":"183836","2":"183836"},{"Name":"Mainz","0":"Mainz","CountryCode":"DEU","1":"DEU","Population":"183134","2":"183134"},{"Name":"Hamm","0":"Hamm","CountryCode":"DEU","1":"DEU","Population":"181804","2":"181804"},{"Name":"Herne","0":"Herne","CountryCode":"DEU","1":"DEU","Population":"175661","2":"175661"},{"Name":"M\u00fclheim an der Ruhr","0":"M\u00fclheim an der Ruhr","CountryCode":"DEU","1":"DEU","Population":"173895","2":"173895"},{"Name":"Solingen","0":"Solingen","CountryCode":"DEU","1":"DEU","Population":"165583","2":"165583"},{"Name":"Osnabr\u00fcck","0":"Osnabr\u00fcck","CountryCode":"DEU","1":"DEU","Population":"164539","2":"164539"},{"Name":"Ludwigshafen am Rhein","0":"Ludwigshafen am Rhein","CountryCode":"DEU","1":"DEU","Population":"163771","2":"163771"},{"Name":"Leverkusen","0":"Leverkusen","CountryCode":"DEU","1":"DEU","Population":"160841","2":"160841"},{"Name":"Oldenburg","0":"Oldenburg","CountryCode":"DEU","1":"DEU","Population":"154125","2":"154125"},{"Name":"Neuss","0":"Neuss","CountryCode":"DEU","1":"DEU","Population":"149702","2":"149702"},{"Name":"Heidelberg","0":"Heidelberg","CountryCode":"DEU","1":"DEU","Population":"139672","2":"139672"},{"Name":"Darmstadt","0":"Darmstadt","CountryCode":"DEU","1":"DEU","Population":"137776","2":"137776"},{"Name":"Paderborn","0":"Paderborn","CountryCode":"DEU","1":"DEU","Population":"137647","2":"137647"},{"Name":"Potsdam","0":"Potsdam","CountryCode":"DEU","1":"DEU","Population":"128983","2":"128983"},{"Name":"W\u00fcrzburg","0":"W\u00fcrzburg","CountryCode":"DEU","1":"DEU","Population":"127350","2":"127350"},{"Name":"Regensburg","0":"Regensburg","CountryCode":"DEU","1":"DEU","Population":"125236","2":"125236"},{"Name":"Recklinghausen","0":"Recklinghausen","CountryCode":"DEU","1":"DEU","Population":"125022","2":"125022"},{"Name":"G\u00f6ttingen","0":"G\u00f6ttingen","CountryCode":"DEU","1":"DEU","Population":"124775","2":"124775"},{"Name":"Bremerhaven","0":"Bremerhaven","CountryCode":"DEU","1":"DEU","Population":"122735","2":"122735"},{"Name":"Wolfsburg","0":"Wolfsburg","CountryCode":"DEU","1":"DEU","Population":"121954","2":"121954"},{"Name":"Bottrop","0":"Bottrop","CountryCode":"DEU","1":"DEU","Population":"121097","2":"121097"},{"Name":"Remscheid","0":"Remscheid","CountryCode":"DEU","1":"DEU","Population":"120125","2":"120125"},{"Name":"Heilbronn","0":"Heilbronn","CountryCode":"DEU","1":"DEU","Population":"119526","2":"119526"},{"Name":"Pforzheim","0":"Pforzheim","CountryCode":"DEU","1":"DEU","Population":"117227","2":"117227"},{"Name":"Offenbach am Main","0":"Offenbach am Main","CountryCode":"DEU","1":"DEU","Population":"116627","2":"116627"},{"Name":"Ulm","0":"Ulm","CountryCode":"DEU","1":"DEU","Population":"116103","2":"116103"},{"Name":"Ingolstadt","0":"Ingolstadt","CountryCode":"DEU","1":"DEU","Population":"114826","2":"114826"},{"Name":"Gera","0":"Gera","CountryCode":"DEU","1":"DEU","Population":"114718","2":"114718"},{"Name":"Salzgitter","0":"Salzgitter","CountryCode":"DEU","1":"DEU","Population":"112934","2":"112934"},{"Name":"Cottbus","0":"Cottbus","CountryCode":"DEU","1":"DEU","Population":"110894","2":"110894"},{"Name":"Reutlingen","0":"Reutlingen","CountryCode":"DEU","1":"DEU","Population":"110343","2":"110343"},{"Name":"F\u00fcrth","0":"F\u00fcrth","CountryCode":"DEU","1":"DEU","Population":"109771","2":"109771"},{"Name":"Siegen","0":"Siegen","CountryCode":"DEU","1":"DEU","Population":"109225","2":"109225"},{"Name":"Koblenz","0":"Koblenz","CountryCode":"DEU","1":"DEU","Population":"108003","2":"108003"},{"Name":"Moers","0":"Moers","CountryCode":"DEU","1":"DEU","Population":"106837","2":"106837"},{"Name":"Bergisch Gladbach","0":"Bergisch Gladbach","CountryCode":"DEU","1":"DEU","Population":"106150","2":"106150"},{"Name":"Zwickau","0":"Zwickau","CountryCode":"DEU","1":"DEU","Population":"104146","2":"104146"},{"Name":"Hildesheim","0":"Hildesheim","CountryCode":"DEU","1":"DEU","Population":"104013","2":"104013"},{"Name":"Witten","0":"Witten","CountryCode":"DEU","1":"DEU","Population":"103384","2":"103384"},{"Name":"Schwerin","0":"Schwerin","CountryCode":"DEU","1":"DEU","Population":"102878","2":"102878"},{"Name":"Erlangen","0":"Erlangen","CountryCode":"DEU","1":"DEU","Population":"100750","2":"100750"},{"Name":"Kaiserslautern","0":"Kaiserslautern","CountryCode":"DEU","1":"DEU","Population":"100025","2":"100025"},{"Name":"Trier","0":"Trier","CountryCode":"DEU","1":"DEU","Population":"99891","2":"99891"},{"Name":"Jena","0":"Jena","CountryCode":"DEU","1":"DEU","Population":"99779","2":"99779"},{"Name":"Iserlohn","0":"Iserlohn","CountryCode":"DEU","1":"DEU","Population":"99474","2":"99474"},{"Name":"G\u00fctersloh","0":"G\u00fctersloh","CountryCode":"DEU","1":"DEU","Population":"95028","2":"95028"},{"Name":"Marl","0":"Marl","CountryCode":"DEU","1":"DEU","Population":"93735","2":"93735"},{"Name":"L\u00fcnen","0":"L\u00fcnen","CountryCode":"DEU","1":"DEU","Population":"92044","2":"92044"},{"Name":"D\u00fcren","0":"D\u00fcren","CountryCode":"DEU","1":"DEU","Population":"91092","2":"91092"},{"Name":"Ratingen","0":"Ratingen","CountryCode":"DEU","1":"DEU","Population":"90951","2":"90951"},{"Name":"Velbert","0":"Velbert","CountryCode":"DEU","1":"DEU","Population":"89881","2":"89881"},{"Name":"Esslingen am Neckar","0":"Esslingen am Neckar","CountryCode":"DEU","1":"DEU","Population":"89667","2":"89667"},{"Name":"Honiara","0":"Honiara","CountryCode":"SLB","1":"SLB","Population":"50100","2":"50100"},{"Name":"Lusaka","0":"Lusaka","CountryCode":"ZMB","1":"ZMB","Population":"1317000","2":"1317000"},{"Name":"Ndola","0":"Ndola","CountryCode":"ZMB","1":"ZMB","Population":"329200","2":"329200"},{"Name":"Kitwe","0":"Kitwe","CountryCode":"ZMB","1":"ZMB","Population":"288600","2":"288600"},{"Name":"Kabwe","0":"Kabwe","CountryCode":"ZMB","1":"ZMB","Population":"154300","2":"154300"},{"Name":"Chingola","0":"Chingola","CountryCode":"ZMB","1":"ZMB","Population":"142400","2":"142400"},{"Name":"Mufulira","0":"Mufulira","CountryCode":"ZMB","1":"ZMB","Population":"123900","2":"123900"},{"Name":"Luanshya","0":"Luanshya","CountryCode":"ZMB","1":"ZMB","Population":"118100","2":"118100"},{"Name":"Apia","0":"Apia","CountryCode":"WSM","1":"WSM","Population":"35900","2":"35900"},{"Name":"Serravalle","0":"Serravalle","CountryCode":"SMR","1":"SMR","Population":"4802","2":"4802"},{"Name":"San Marino","0":"San Marino","CountryCode":"SMR","1":"SMR","Population":"2294","2":"2294"},{"Name":"S\u00e3o Tom\u00e9","0":"S\u00e3o Tom\u00e9","CountryCode":"STP","1":"STP","Population":"49541","2":"49541"},{"Name":"Riyadh","0":"Riyadh","CountryCode":"SAU","1":"SAU","Population":"3324000","2":"3324000"},{"Name":"Jedda","0":"Jedda","CountryCode":"SAU","1":"SAU","Population":"2046300","2":"2046300"},{"Name":"Mekka","0":"Mekka","CountryCode":"SAU","1":"SAU","Population":"965700","2":"965700"},{"Name":"Medina","0":"Medina","CountryCode":"SAU","1":"SAU","Population":"608300","2":"608300"},{"Name":"al-Dammam","0":"al-Dammam","CountryCode":"SAU","1":"SAU","Population":"482300","2":"482300"},{"Name":"al-Taif","0":"al-Taif","CountryCode":"SAU","1":"SAU","Population":"416100","2":"416100"},{"Name":"Tabuk","0":"Tabuk","CountryCode":"SAU","1":"SAU","Population":"292600","2":"292600"},{"Name":"Burayda","0":"Burayda","CountryCode":"SAU","1":"SAU","Population":"248600","2":"248600"},{"Name":"al-Hufuf","0":"al-Hufuf","CountryCode":"SAU","1":"SAU","Population":"225800","2":"225800"},{"Name":"al-Mubarraz","0":"al-Mubarraz","CountryCode":"SAU","1":"SAU","Population":"219100","2":"219100"},{"Name":"Khamis Mushayt","0":"Khamis Mushayt","CountryCode":"SAU","1":"SAU","Population":"217900","2":"217900"},{"Name":"Hail","0":"Hail","CountryCode":"SAU","1":"SAU","Population":"176800","2":"176800"},{"Name":"al-Kharj","0":"al-Kharj","CountryCode":"SAU","1":"SAU","Population":"152100","2":"152100"},{"Name":"al-Khubar","0":"al-Khubar","CountryCode":"SAU","1":"SAU","Population":"141700","2":"141700"},{"Name":"Jubayl","0":"Jubayl","CountryCode":"SAU","1":"SAU","Population":"140800","2":"140800"},{"Name":"Hafar al-Batin","0":"Hafar al-Batin","CountryCode":"SAU","1":"SAU","Population":"137800","2":"137800"},{"Name":"al-Tuqba","0":"al-Tuqba","CountryCode":"SAU","1":"SAU","Population":"125700","2":"125700"},{"Name":"Yanbu","0":"Yanbu","CountryCode":"SAU","1":"SAU","Population":"119800","2":"119800"},{"Name":"Abha","0":"Abha","CountryCode":"SAU","1":"SAU","Population":"112300","2":"112300"},{"Name":"Ara\u00b4ar","0":"Ara\u00b4ar","CountryCode":"SAU","1":"SAU","Population":"108100","2":"108100"},{"Name":"al-Qatif","0":"al-Qatif","CountryCode":"SAU","1":"SAU","Population":"98900","2":"98900"},{"Name":"al-Hawiya","0":"al-Hawiya","CountryCode":"SAU","1":"SAU","Population":"93900","2":"93900"},{"Name":"Unayza","0":"Unayza","CountryCode":"SAU","1":"SAU","Population":"91100","2":"91100"},{"Name":"Najran","0":"Najran","CountryCode":"SAU","1":"SAU","Population":"91000","2":"91000"},{"Name":"Pikine","0":"Pikine","CountryCode":"SEN","1":"SEN","Population":"855287","2":"855287"},{"Name":"Dakar","0":"Dakar","CountryCode":"SEN","1":"SEN","Population":"785071","2":"785071"},{"Name":"Thi\u00e8s","0":"Thi\u00e8s","CountryCode":"SEN","1":"SEN","Population":"248000","2":"248000"},{"Name":"Kaolack","0":"Kaolack","CountryCode":"SEN","1":"SEN","Population":"199000","2":"199000"},{"Name":"Ziguinchor","0":"Ziguinchor","CountryCode":"SEN","1":"SEN","Population":"192000","2":"192000"},{"Name":"Rufisque","0":"Rufisque","CountryCode":"SEN","1":"SEN","Population":"150000","2":"150000"},{"Name":"Saint-Louis","0":"Saint-Louis","CountryCode":"SEN","1":"SEN","Population":"132400","2":"132400"},{"Name":"Mbour","0":"Mbour","CountryCode":"SEN","1":"SEN","Population":"109300","2":"109300"},{"Name":"Diourbel","0":"Diourbel","CountryCode":"SEN","1":"SEN","Population":"99400","2":"99400"},{"Name":"Victoria","0":"Victoria","CountryCode":"SYC","1":"SYC","Population":"41000","2":"41000"},{"Name":"Freetown","0":"Freetown","CountryCode":"SLE","1":"SLE","Population":"850000","2":"850000"},{"Name":"Singapore","0":"Singapore","CountryCode":"SGP","1":"SGP","Population":"4017733","2":"4017733"},{"Name":"Bratislava","0":"Bratislava","CountryCode":"SVK","1":"SVK","Population":"448292","2":"448292"},{"Name":"Ko\u0161ice","0":"Ko\u0161ice","CountryCode":"SVK","1":"SVK","Population":"241874","2":"241874"},{"Name":"Pre\u0161ov","0":"Pre\u0161ov","CountryCode":"SVK","1":"SVK","Population":"93977","2":"93977"},{"Name":"Ljubljana","0":"Ljubljana","CountryCode":"SVN","1":"SVN","Population":"270986","2":"270986"},{"Name":"Maribor","0":"Maribor","CountryCode":"SVN","1":"SVN","Population":"115532","2":"115532"},{"Name":"Mogadishu","0":"Mogadishu","CountryCode":"SOM","1":"SOM","Population":"997000","2":"997000"},{"Name":"Hargeysa","0":"Hargeysa","CountryCode":"SOM","1":"SOM","Population":"90000","2":"90000"},{"Name":"Kismaayo","0":"Kismaayo","CountryCode":"SOM","1":"SOM","Population":"90000","2":"90000"},{"Name":"Colombo","0":"Colombo","CountryCode":"LKA","1":"LKA","Population":"645000","2":"645000"},{"Name":"Dehiwala","0":"Dehiwala","CountryCode":"LKA","1":"LKA","Population":"203000","2":"203000"},{"Name":"Moratuwa","0":"Moratuwa","CountryCode":"LKA","1":"LKA","Population":"190000","2":"190000"},{"Name":"Jaffna","0":"Jaffna","CountryCode":"LKA","1":"LKA","Population":"149000","2":"149000"},{"Name":"Kandy","0":"Kandy","CountryCode":"LKA","1":"LKA","Population":"140000","2":"140000"},{"Name":"Sri Jayawardenepura Kotte","0":"Sri Jayawardenepura Kotte","CountryCode":"LKA","1":"LKA","Population":"118000","2":"118000"},{"Name":"Negombo","0":"Negombo","CountryCode":"LKA","1":"LKA","Population":"100000","2":"100000"},{"Name":"Omdurman","0":"Omdurman","CountryCode":"SDN","1":"SDN","Population":"1271403","2":"1271403"},{"Name":"Khartum","0":"Khartum","CountryCode":"SDN","1":"SDN","Population":"947483","2":"947483"},{"Name":"Sharq al-Nil","0":"Sharq al-Nil","CountryCode":"SDN","1":"SDN","Population":"700887","2":"700887"},{"Name":"Port Sudan","0":"Port Sudan","CountryCode":"SDN","1":"SDN","Population":"308195","2":"308195"},{"Name":"Kassala","0":"Kassala","CountryCode":"SDN","1":"SDN","Population":"234622","2":"234622"},{"Name":"Obeid","0":"Obeid","CountryCode":"SDN","1":"SDN","Population":"229425","2":"229425"},{"Name":"Nyala","0":"Nyala","CountryCode":"SDN","1":"SDN","Population":"227183","2":"227183"},{"Name":"Wad Madani","0":"Wad Madani","CountryCode":"SDN","1":"SDN","Population":"211362","2":"211362"},{"Name":"al-Qadarif","0":"al-Qadarif","CountryCode":"SDN","1":"SDN","Population":"191164","2":"191164"},{"Name":"Kusti","0":"Kusti","CountryCode":"SDN","1":"SDN","Population":"173599","2":"173599"},{"Name":"al-Fashir","0":"al-Fashir","CountryCode":"SDN","1":"SDN","Population":"141884","2":"141884"},{"Name":"Juba","0":"Juba","CountryCode":"SDN","1":"SDN","Population":"114980","2":"114980"},{"Name":"Helsinki [Helsingfors]","0":"Helsinki [Helsingfors]","CountryCode":"FIN","1":"FIN","Population":"555474","2":"555474"},{"Name":"Espoo","0":"Espoo","CountryCode":"FIN","1":"FIN","Population":"213271","2":"213271"},{"Name":"Tampere","0":"Tampere","CountryCode":"FIN","1":"FIN","Population":"195468","2":"195468"},{"Name":"Vantaa","0":"Vantaa","CountryCode":"FIN","1":"FIN","Population":"178471","2":"178471"},{"Name":"Turku [\u00c5bo]","0":"Turku [\u00c5bo]","CountryCode":"FIN","1":"FIN","Population":"172561","2":"172561"},{"Name":"Oulu","0":"Oulu","CountryCode":"FIN","1":"FIN","Population":"120753","2":"120753"},{"Name":"Lahti","0":"Lahti","CountryCode":"FIN","1":"FIN","Population":"96921","2":"96921"},{"Name":"Paramaribo","0":"Paramaribo","CountryCode":"SUR","1":"SUR","Population":"112000","2":"112000"},{"Name":"Mbabane","0":"Mbabane","CountryCode":"SWZ","1":"SWZ","Population":"61000","2":"61000"},{"Name":"Z\u00fcrich","0":"Z\u00fcrich","CountryCode":"CHE","1":"CHE","Population":"336800","2":"336800"},{"Name":"Geneve","0":"Geneve","CountryCode":"CHE","1":"CHE","Population":"173500","2":"173500"},{"Name":"Basel","0":"Basel","CountryCode":"CHE","1":"CHE","Population":"166700","2":"166700"},{"Name":"Bern","0":"Bern","CountryCode":"CHE","1":"CHE","Population":"122700","2":"122700"},{"Name":"Lausanne","0":"Lausanne","CountryCode":"CHE","1":"CHE","Population":"114500","2":"114500"},{"Name":"Damascus","0":"Damascus","CountryCode":"SYR","1":"SYR","Population":"1347000","2":"1347000"},{"Name":"Aleppo","0":"Aleppo","CountryCode":"SYR","1":"SYR","Population":"1261983","2":"1261983"},{"Name":"Hims","0":"Hims","CountryCode":"SYR","1":"SYR","Population":"507404","2":"507404"},{"Name":"Hama","0":"Hama","CountryCode":"SYR","1":"SYR","Population":"343361","2":"343361"},{"Name":"Latakia","0":"Latakia","CountryCode":"SYR","1":"SYR","Population":"264563","2":"264563"},{"Name":"al-Qamishliya","0":"al-Qamishliya","CountryCode":"SYR","1":"SYR","Population":"144286","2":"144286"},{"Name":"Dayr al-Zawr","0":"Dayr al-Zawr","CountryCode":"SYR","1":"SYR","Population":"140459","2":"140459"},{"Name":"Jaramana","0":"Jaramana","CountryCode":"SYR","1":"SYR","Population":"138469","2":"138469"},{"Name":"Duma","0":"Duma","CountryCode":"SYR","1":"SYR","Population":"131158","2":"131158"},{"Name":"al-Raqqa","0":"al-Raqqa","CountryCode":"SYR","1":"SYR","Population":"108020","2":"108020"},{"Name":"Idlib","0":"Idlib","CountryCode":"SYR","1":"SYR","Population":"91081","2":"91081"},{"Name":"Dushanbe","0":"Dushanbe","CountryCode":"TJK","1":"TJK","Population":"524000","2":"524000"},{"Name":"Khujand","0":"Khujand","CountryCode":"TJK","1":"TJK","Population":"161500","2":"161500"},{"Name":"Taipei","0":"Taipei","CountryCode":"TWN","1":"TWN","Population":"2641312","2":"2641312"},{"Name":"Kaohsiung","0":"Kaohsiung","CountryCode":"TWN","1":"TWN","Population":"1475505","2":"1475505"},{"Name":"Taichung","0":"Taichung","CountryCode":"TWN","1":"TWN","Population":"940589","2":"940589"},{"Name":"Tainan","0":"Tainan","CountryCode":"TWN","1":"TWN","Population":"728060","2":"728060"},{"Name":"Panchiao","0":"Panchiao","CountryCode":"TWN","1":"TWN","Population":"523850","2":"523850"},{"Name":"Chungho","0":"Chungho","CountryCode":"TWN","1":"TWN","Population":"392176","2":"392176"},{"Name":"Keelung (Chilung)","0":"Keelung (Chilung)","CountryCode":"TWN","1":"TWN","Population":"385201","2":"385201"},{"Name":"Sanchung","0":"Sanchung","CountryCode":"TWN","1":"TWN","Population":"380084","2":"380084"},{"Name":"Hsinchuang","0":"Hsinchuang","CountryCode":"TWN","1":"TWN","Population":"365048","2":"365048"},{"Name":"Hsinchu","0":"Hsinchu","CountryCode":"TWN","1":"TWN","Population":"361958","2":"361958"},{"Name":"Chungli","0":"Chungli","CountryCode":"TWN","1":"TWN","Population":"318649","2":"318649"},{"Name":"Fengshan","0":"Fengshan","CountryCode":"TWN","1":"TWN","Population":"318562","2":"318562"},{"Name":"Taoyuan","0":"Taoyuan","CountryCode":"TWN","1":"TWN","Population":"316438","2":"316438"},{"Name":"Chiayi","0":"Chiayi","CountryCode":"TWN","1":"TWN","Population":"265109","2":"265109"},{"Name":"Hsintien","0":"Hsintien","CountryCode":"TWN","1":"TWN","Population":"263603","2":"263603"},{"Name":"Changhwa","0":"Changhwa","CountryCode":"TWN","1":"TWN","Population":"227715","2":"227715"},{"Name":"Yungho","0":"Yungho","CountryCode":"TWN","1":"TWN","Population":"227700","2":"227700"},{"Name":"Tucheng","0":"Tucheng","CountryCode":"TWN","1":"TWN","Population":"224897","2":"224897"},{"Name":"Pingtung","0":"Pingtung","CountryCode":"TWN","1":"TWN","Population":"214727","2":"214727"},{"Name":"Yungkang","0":"Yungkang","CountryCode":"TWN","1":"TWN","Population":"193005","2":"193005"},{"Name":"Pingchen","0":"Pingchen","CountryCode":"TWN","1":"TWN","Population":"188344","2":"188344"},{"Name":"Tali","0":"Tali","CountryCode":"TWN","1":"TWN","Population":"171940","2":"171940"},{"Name":"Taiping","0":"Taiping","CountryCode":"TWN","1":"TWN","Population":"165524","2":"165524"},{"Name":"Pate","0":"Pate","CountryCode":"TWN","1":"TWN","Population":"161700","2":"161700"},{"Name":"Fengyuan","0":"Fengyuan","CountryCode":"TWN","1":"TWN","Population":"161032","2":"161032"},{"Name":"Luchou","0":"Luchou","CountryCode":"TWN","1":"TWN","Population":"160516","2":"160516"},{"Name":"Hsichuh","0":"Hsichuh","CountryCode":"TWN","1":"TWN","Population":"154976","2":"154976"},{"Name":"Shulin","0":"Shulin","CountryCode":"TWN","1":"TWN","Population":"151260","2":"151260"},{"Name":"Yuanlin","0":"Yuanlin","CountryCode":"TWN","1":"TWN","Population":"126402","2":"126402"},{"Name":"Yangmei","0":"Yangmei","CountryCode":"TWN","1":"TWN","Population":"126323","2":"126323"},{"Name":"Taliao","0":"Taliao","CountryCode":"TWN","1":"TWN","Population":"115897","2":"115897"},{"Name":"Kueishan","0":"Kueishan","CountryCode":"TWN","1":"TWN","Population":"112195","2":"112195"},{"Name":"Tanshui","0":"Tanshui","CountryCode":"TWN","1":"TWN","Population":"111882","2":"111882"},{"Name":"Taitung","0":"Taitung","CountryCode":"TWN","1":"TWN","Population":"111039","2":"111039"},{"Name":"Hualien","0":"Hualien","CountryCode":"TWN","1":"TWN","Population":"108407","2":"108407"},{"Name":"Nantou","0":"Nantou","CountryCode":"TWN","1":"TWN","Population":"104723","2":"104723"},{"Name":"Lungtan","0":"Lungtan","CountryCode":"TWN","1":"TWN","Population":"103088","2":"103088"},{"Name":"Touliu","0":"Touliu","CountryCode":"TWN","1":"TWN","Population":"98900","2":"98900"},{"Name":"Tsaotun","0":"Tsaotun","CountryCode":"TWN","1":"TWN","Population":"96800","2":"96800"},{"Name":"Kangshan","0":"Kangshan","CountryCode":"TWN","1":"TWN","Population":"92200","2":"92200"},{"Name":"Ilan","0":"Ilan","CountryCode":"TWN","1":"TWN","Population":"92000","2":"92000"},{"Name":"Miaoli","0":"Miaoli","CountryCode":"TWN","1":"TWN","Population":"90000","2":"90000"},{"Name":"Dar es Salaam","0":"Dar es Salaam","CountryCode":"TZA","1":"TZA","Population":"1747000","2":"1747000"},{"Name":"Dodoma","0":"Dodoma","CountryCode":"TZA","1":"TZA","Population":"189000","2":"189000"},{"Name":"Mwanza","0":"Mwanza","CountryCode":"TZA","1":"TZA","Population":"172300","2":"172300"},{"Name":"Zanzibar","0":"Zanzibar","CountryCode":"TZA","1":"TZA","Population":"157634","2":"157634"},{"Name":"Tanga","0":"Tanga","CountryCode":"TZA","1":"TZA","Population":"137400","2":"137400"},{"Name":"Mbeya","0":"Mbeya","CountryCode":"TZA","1":"TZA","Population":"130800","2":"130800"},{"Name":"Morogoro","0":"Morogoro","CountryCode":"TZA","1":"TZA","Population":"117800","2":"117800"},{"Name":"Arusha","0":"Arusha","CountryCode":"TZA","1":"TZA","Population":"102500","2":"102500"},{"Name":"Moshi","0":"Moshi","CountryCode":"TZA","1":"TZA","Population":"96800","2":"96800"},{"Name":"Tabora","0":"Tabora","CountryCode":"TZA","1":"TZA","Population":"92800","2":"92800"},{"Name":"K\u00f8benhavn","0":"K\u00f8benhavn","CountryCode":"DNK","1":"DNK","Population":"495699","2":"495699"},{"Name":"\u00c5rhus","0":"\u00c5rhus","CountryCode":"DNK","1":"DNK","Population":"284846","2":"284846"},{"Name":"Odense","0":"Odense","CountryCode":"DNK","1":"DNK","Population":"183912","2":"183912"},{"Name":"Aalborg","0":"Aalborg","CountryCode":"DNK","1":"DNK","Population":"161161","2":"161161"},{"Name":"Frederiksberg","0":"Frederiksberg","CountryCode":"DNK","1":"DNK","Population":"90327","2":"90327"},{"Name":"Bangkok","0":"Bangkok","CountryCode":"THA","1":"THA","Population":"6320174","2":"6320174"},{"Name":"Nonthaburi","0":"Nonthaburi","CountryCode":"THA","1":"THA","Population":"292100","2":"292100"},{"Name":"Nakhon Ratchasima","0":"Nakhon Ratchasima","CountryCode":"THA","1":"THA","Population":"181400","2":"181400"},{"Name":"Chiang Mai","0":"Chiang Mai","CountryCode":"THA","1":"THA","Population":"171100","2":"171100"},{"Name":"Udon Thani","0":"Udon Thani","CountryCode":"THA","1":"THA","Population":"158100","2":"158100"},{"Name":"Hat Yai","0":"Hat Yai","CountryCode":"THA","1":"THA","Population":"148632","2":"148632"},{"Name":"Khon Kaen","0":"Khon Kaen","CountryCode":"THA","1":"THA","Population":"126500","2":"126500"},{"Name":"Pak Kret","0":"Pak Kret","CountryCode":"THA","1":"THA","Population":"126055","2":"126055"},{"Name":"Nakhon Sawan","0":"Nakhon Sawan","CountryCode":"THA","1":"THA","Population":"123800","2":"123800"},{"Name":"Ubon Ratchathani","0":"Ubon Ratchathani","CountryCode":"THA","1":"THA","Population":"116300","2":"116300"},{"Name":"Songkhla","0":"Songkhla","CountryCode":"THA","1":"THA","Population":"94900","2":"94900"},{"Name":"Nakhon Pathom","0":"Nakhon Pathom","CountryCode":"THA","1":"THA","Population":"94100","2":"94100"},{"Name":"Lom\u00e9","0":"Lom\u00e9","CountryCode":"TGO","1":"TGO","Population":"375000","2":"375000"},{"Name":"Fakaofo","0":"Fakaofo","CountryCode":"TKL","1":"TKL","Population":"300","2":"300"},{"Name":"Nuku\u00b4alofa","0":"Nuku\u00b4alofa","CountryCode":"TON","1":"TON","Population":"22400","2":"22400"},{"Name":"Chaguanas","0":"Chaguanas","CountryCode":"TTO","1":"TTO","Population":"56601","2":"56601"},{"Name":"Port-of-Spain","0":"Port-of-Spain","CountryCode":"TTO","1":"TTO","Population":"43396","2":"43396"},{"Name":"N\u00b4Djam\u00e9na","0":"N\u00b4Djam\u00e9na","CountryCode":"TCD","1":"TCD","Population":"530965","2":"530965"},{"Name":"Moundou","0":"Moundou","CountryCode":"TCD","1":"TCD","Population":"99500","2":"99500"},{"Name":"Praha","0":"Praha","CountryCode":"CZE","1":"CZE","Population":"1181126","2":"1181126"},{"Name":"Brno","0":"Brno","CountryCode":"CZE","1":"CZE","Population":"381862","2":"381862"},{"Name":"Ostrava","0":"Ostrava","CountryCode":"CZE","1":"CZE","Population":"320041","2":"320041"},{"Name":"Plzen","0":"Plzen","CountryCode":"CZE","1":"CZE","Population":"166759","2":"166759"},{"Name":"Olomouc","0":"Olomouc","CountryCode":"CZE","1":"CZE","Population":"102702","2":"102702"},{"Name":"Liberec","0":"Liberec","CountryCode":"CZE","1":"CZE","Population":"99155","2":"99155"},{"Name":"Cesk\u00e9 Budejovice","0":"Cesk\u00e9 Budejovice","CountryCode":"CZE","1":"CZE","Population":"98186","2":"98186"},{"Name":"Hradec Kr\u00e1lov\u00e9","0":"Hradec Kr\u00e1lov\u00e9","CountryCode":"CZE","1":"CZE","Population":"98080","2":"98080"},{"Name":"\u00dast\u00ed nad Labem","0":"\u00dast\u00ed nad Labem","CountryCode":"CZE","1":"CZE","Population":"95491","2":"95491"},{"Name":"Pardubice","0":"Pardubice","CountryCode":"CZE","1":"CZE","Population":"91309","2":"91309"},{"Name":"Tunis","0":"Tunis","CountryCode":"TUN","1":"TUN","Population":"690600","2":"690600"},{"Name":"Sfax","0":"Sfax","CountryCode":"TUN","1":"TUN","Population":"257800","2":"257800"},{"Name":"Ariana","0":"Ariana","CountryCode":"TUN","1":"TUN","Population":"197000","2":"197000"},{"Name":"Ettadhamen","0":"Ettadhamen","CountryCode":"TUN","1":"TUN","Population":"178600","2":"178600"},{"Name":"Sousse","0":"Sousse","CountryCode":"TUN","1":"TUN","Population":"145900","2":"145900"},{"Name":"Kairouan","0":"Kairouan","CountryCode":"TUN","1":"TUN","Population":"113100","2":"113100"},{"Name":"Biserta","0":"Biserta","CountryCode":"TUN","1":"TUN","Population":"108900","2":"108900"},{"Name":"Gab\u00e8s","0":"Gab\u00e8s","CountryCode":"TUN","1":"TUN","Population":"106600","2":"106600"},{"Name":"Istanbul","0":"Istanbul","CountryCode":"TUR","1":"TUR","Population":"8787958","2":"8787958"},{"Name":"Ankara","0":"Ankara","CountryCode":"TUR","1":"TUR","Population":"3038159","2":"3038159"},{"Name":"Izmir","0":"Izmir","CountryCode":"TUR","1":"TUR","Population":"2130359","2":"2130359"},{"Name":"Adana","0":"Adana","CountryCode":"TUR","1":"TUR","Population":"1131198","2":"1131198"},{"Name":"Bursa","0":"Bursa","CountryCode":"TUR","1":"TUR","Population":"1095842","2":"1095842"},{"Name":"Gaziantep","0":"Gaziantep","CountryCode":"TUR","1":"TUR","Population":"789056","2":"789056"},{"Name":"Konya","0":"Konya","CountryCode":"TUR","1":"TUR","Population":"628364","2":"628364"},{"Name":"Mersin (I\u00e7el)","0":"Mersin (I\u00e7el)","CountryCode":"TUR","1":"TUR","Population":"587212","2":"587212"},{"Name":"Antalya","0":"Antalya","CountryCode":"TUR","1":"TUR","Population":"564914","2":"564914"},{"Name":"Diyarbakir","0":"Diyarbakir","CountryCode":"TUR","1":"TUR","Population":"479884","2":"479884"},{"Name":"Kayseri","0":"Kayseri","CountryCode":"TUR","1":"TUR","Population":"475657","2":"475657"},{"Name":"Eskisehir","0":"Eskisehir","CountryCode":"TUR","1":"TUR","Population":"470781","2":"470781"},{"Name":"Sanliurfa","0":"Sanliurfa","CountryCode":"TUR","1":"TUR","Population":"405905","2":"405905"},{"Name":"Samsun","0":"Samsun","CountryCode":"TUR","1":"TUR","Population":"339871","2":"339871"},{"Name":"Malatya","0":"Malatya","CountryCode":"TUR","1":"TUR","Population":"330312","2":"330312"},{"Name":"Gebze","0":"Gebze","CountryCode":"TUR","1":"TUR","Population":"264170","2":"264170"},{"Name":"Denizli","0":"Denizli","CountryCode":"TUR","1":"TUR","Population":"253848","2":"253848"},{"Name":"Sivas","0":"Sivas","CountryCode":"TUR","1":"TUR","Population":"246642","2":"246642"},{"Name":"Erzurum","0":"Erzurum","CountryCode":"TUR","1":"TUR","Population":"246535","2":"246535"},{"Name":"Tarsus","0":"Tarsus","CountryCode":"TUR","1":"TUR","Population":"246206","2":"246206"},{"Name":"Kahramanmaras","0":"Kahramanmaras","CountryCode":"TUR","1":"TUR","Population":"245772","2":"245772"},{"Name":"El\u00e2zig","0":"El\u00e2zig","CountryCode":"TUR","1":"TUR","Population":"228815","2":"228815"},{"Name":"Van","0":"Van","CountryCode":"TUR","1":"TUR","Population":"219319","2":"219319"},{"Name":"Sultanbeyli","0":"Sultanbeyli","CountryCode":"TUR","1":"TUR","Population":"211068","2":"211068"},{"Name":"Izmit (Kocaeli)","0":"Izmit (Kocaeli)","CountryCode":"TUR","1":"TUR","Population":"210068","2":"210068"},{"Name":"Manisa","0":"Manisa","CountryCode":"TUR","1":"TUR","Population":"207148","2":"207148"},{"Name":"Batman","0":"Batman","CountryCode":"TUR","1":"TUR","Population":"203793","2":"203793"},{"Name":"Balikesir","0":"Balikesir","CountryCode":"TUR","1":"TUR","Population":"196382","2":"196382"},{"Name":"Sakarya (Adapazari)","0":"Sakarya (Adapazari)","CountryCode":"TUR","1":"TUR","Population":"190641","2":"190641"},{"Name":"Iskenderun","0":"Iskenderun","CountryCode":"TUR","1":"TUR","Population":"153022","2":"153022"},{"Name":"Osmaniye","0":"Osmaniye","CountryCode":"TUR","1":"TUR","Population":"146003","2":"146003"},{"Name":"\u00c7orum","0":"\u00c7orum","CountryCode":"TUR","1":"TUR","Population":"145495","2":"145495"},{"Name":"K\u00fctahya","0":"K\u00fctahya","CountryCode":"TUR","1":"TUR","Population":"144761","2":"144761"},{"Name":"Hatay (Antakya)","0":"Hatay (Antakya)","CountryCode":"TUR","1":"TUR","Population":"143982","2":"143982"},{"Name":"Kirikkale","0":"Kirikkale","CountryCode":"TUR","1":"TUR","Population":"142044","2":"142044"},{"Name":"Adiyaman","0":"Adiyaman","CountryCode":"TUR","1":"TUR","Population":"141529","2":"141529"},{"Name":"Trabzon","0":"Trabzon","CountryCode":"TUR","1":"TUR","Population":"138234","2":"138234"},{"Name":"Ordu","0":"Ordu","CountryCode":"TUR","1":"TUR","Population":"133642","2":"133642"},{"Name":"Aydin","0":"Aydin","CountryCode":"TUR","1":"TUR","Population":"128651","2":"128651"},{"Name":"Usak","0":"Usak","CountryCode":"TUR","1":"TUR","Population":"128162","2":"128162"},{"Name":"Edirne","0":"Edirne","CountryCode":"TUR","1":"TUR","Population":"123383","2":"123383"},{"Name":"\u00c7orlu","0":"\u00c7orlu","CountryCode":"TUR","1":"TUR","Population":"123300","2":"123300"},{"Name":"Isparta","0":"Isparta","CountryCode":"TUR","1":"TUR","Population":"121911","2":"121911"},{"Name":"Karab\u00fck","0":"Karab\u00fck","CountryCode":"TUR","1":"TUR","Population":"118285","2":"118285"},{"Name":"Kilis","0":"Kilis","CountryCode":"TUR","1":"TUR","Population":"118245","2":"118245"},{"Name":"Alanya","0":"Alanya","CountryCode":"TUR","1":"TUR","Population":"117300","2":"117300"},{"Name":"Kiziltepe","0":"Kiziltepe","CountryCode":"TUR","1":"TUR","Population":"112000","2":"112000"},{"Name":"Zonguldak","0":"Zonguldak","CountryCode":"TUR","1":"TUR","Population":"111542","2":"111542"},{"Name":"Siirt","0":"Siirt","CountryCode":"TUR","1":"TUR","Population":"107100","2":"107100"},{"Name":"Viransehir","0":"Viransehir","CountryCode":"TUR","1":"TUR","Population":"106400","2":"106400"},{"Name":"Tekirdag","0":"Tekirdag","CountryCode":"TUR","1":"TUR","Population":"106077","2":"106077"},{"Name":"Karaman","0":"Karaman","CountryCode":"TUR","1":"TUR","Population":"104200","2":"104200"},{"Name":"Afyon","0":"Afyon","CountryCode":"TUR","1":"TUR","Population":"103984","2":"103984"},{"Name":"Aksaray","0":"Aksaray","CountryCode":"TUR","1":"TUR","Population":"102681","2":"102681"},{"Name":"Ceyhan","0":"Ceyhan","CountryCode":"TUR","1":"TUR","Population":"102412","2":"102412"},{"Name":"Erzincan","0":"Erzincan","CountryCode":"TUR","1":"TUR","Population":"102304","2":"102304"},{"Name":"Bismil","0":"Bismil","CountryCode":"TUR","1":"TUR","Population":"101400","2":"101400"},{"Name":"Nazilli","0":"Nazilli","CountryCode":"TUR","1":"TUR","Population":"99900","2":"99900"},{"Name":"Tokat","0":"Tokat","CountryCode":"TUR","1":"TUR","Population":"99500","2":"99500"},{"Name":"Kars","0":"Kars","CountryCode":"TUR","1":"TUR","Population":"93000","2":"93000"},{"Name":"Ineg\u00f6l","0":"Ineg\u00f6l","CountryCode":"TUR","1":"TUR","Population":"90500","2":"90500"},{"Name":"Bandirma","0":"Bandirma","CountryCode":"TUR","1":"TUR","Population":"90200","2":"90200"},{"Name":"Ashgabat","0":"Ashgabat","CountryCode":"TKM","1":"TKM","Population":"540600","2":"540600"},{"Name":"Ch\u00e4rjew","0":"Ch\u00e4rjew","CountryCode":"TKM","1":"TKM","Population":"189200","2":"189200"},{"Name":"Dashhowuz","0":"Dashhowuz","CountryCode":"TKM","1":"TKM","Population":"141800","2":"141800"},{"Name":"Mary","0":"Mary","CountryCode":"TKM","1":"TKM","Population":"101000","2":"101000"},{"Name":"Cockburn Town","0":"Cockburn Town","CountryCode":"TCA","1":"TCA","Population":"4800","2":"4800"},{"Name":"Funafuti","0":"Funafuti","CountryCode":"TUV","1":"TUV","Population":"4600","2":"4600"},{"Name":"Kampala","0":"Kampala","CountryCode":"UGA","1":"UGA","Population":"890800","2":"890800"},{"Name":"Kyiv","0":"Kyiv","CountryCode":"UKR","1":"UKR","Population":"2624000","2":"2624000"},{"Name":"Harkova [Harkiv]","0":"Harkova [Harkiv]","CountryCode":"UKR","1":"UKR","Population":"1500000","2":"1500000"},{"Name":"Dnipropetrovsk","0":"Dnipropetrovsk","CountryCode":"UKR","1":"UKR","Population":"1103000","2":"1103000"},{"Name":"Donetsk","0":"Donetsk","CountryCode":"UKR","1":"UKR","Population":"1050000","2":"1050000"},{"Name":"Odesa","0":"Odesa","CountryCode":"UKR","1":"UKR","Population":"1011000","2":"1011000"},{"Name":"Zaporizzja","0":"Zaporizzja","CountryCode":"UKR","1":"UKR","Population":"848000","2":"848000"},{"Name":"Lviv","0":"Lviv","CountryCode":"UKR","1":"UKR","Population":"788000","2":"788000"},{"Name":"Kryvyi Rig","0":"Kryvyi Rig","CountryCode":"UKR","1":"UKR","Population":"703000","2":"703000"},{"Name":"Mykolajiv","0":"Mykolajiv","CountryCode":"UKR","1":"UKR","Population":"508000","2":"508000"},{"Name":"Mariupol","0":"Mariupol","CountryCode":"UKR","1":"UKR","Population":"490000","2":"490000"},{"Name":"Lugansk","0":"Lugansk","CountryCode":"UKR","1":"UKR","Population":"469000","2":"469000"},{"Name":"Vinnytsja","0":"Vinnytsja","CountryCode":"UKR","1":"UKR","Population":"391000","2":"391000"},{"Name":"Makijivka","0":"Makijivka","CountryCode":"UKR","1":"UKR","Population":"384000","2":"384000"},{"Name":"Herson","0":"Herson","CountryCode":"UKR","1":"UKR","Population":"353000","2":"353000"},{"Name":"Sevastopol","0":"Sevastopol","CountryCode":"UKR","1":"UKR","Population":"348000","2":"348000"},{"Name":"Simferopol","0":"Simferopol","CountryCode":"UKR","1":"UKR","Population":"339000","2":"339000"},{"Name":"Pultava [Poltava]","0":"Pultava [Poltava]","CountryCode":"UKR","1":"UKR","Population":"313000","2":"313000"},{"Name":"T\u0161ernigiv","0":"T\u0161ernigiv","CountryCode":"UKR","1":"UKR","Population":"313000","2":"313000"},{"Name":"T\u0161erkasy","0":"T\u0161erkasy","CountryCode":"UKR","1":"UKR","Population":"309000","2":"309000"},{"Name":"Gorlivka","0":"Gorlivka","CountryCode":"UKR","1":"UKR","Population":"299000","2":"299000"},{"Name":"Zytomyr","0":"Zytomyr","CountryCode":"UKR","1":"UKR","Population":"297000","2":"297000"},{"Name":"Sumy","0":"Sumy","CountryCode":"UKR","1":"UKR","Population":"294000","2":"294000"},{"Name":"Dniprodzerzynsk","0":"Dniprodzerzynsk","CountryCode":"UKR","1":"UKR","Population":"270000","2":"270000"},{"Name":"Kirovograd","0":"Kirovograd","CountryCode":"UKR","1":"UKR","Population":"265000","2":"265000"},{"Name":"Hmelnytskyi","0":"Hmelnytskyi","CountryCode":"UKR","1":"UKR","Population":"262000","2":"262000"},{"Name":"T\u0161ernivtsi","0":"T\u0161ernivtsi","CountryCode":"UKR","1":"UKR","Population":"259000","2":"259000"},{"Name":"Rivne","0":"Rivne","CountryCode":"UKR","1":"UKR","Population":"245000","2":"245000"},{"Name":"Krement\u0161uk","0":"Krement\u0161uk","CountryCode":"UKR","1":"UKR","Population":"239000","2":"239000"},{"Name":"Ivano-Frankivsk","0":"Ivano-Frankivsk","CountryCode":"UKR","1":"UKR","Population":"237000","2":"237000"},{"Name":"Ternopil","0":"Ternopil","CountryCode":"UKR","1":"UKR","Population":"236000","2":"236000"},{"Name":"Lutsk","0":"Lutsk","CountryCode":"UKR","1":"UKR","Population":"217000","2":"217000"},{"Name":"Bila Tserkva","0":"Bila Tserkva","CountryCode":"UKR","1":"UKR","Population":"215000","2":"215000"},{"Name":"Kramatorsk","0":"Kramatorsk","CountryCode":"UKR","1":"UKR","Population":"186000","2":"186000"},{"Name":"Melitopol","0":"Melitopol","CountryCode":"UKR","1":"UKR","Population":"169000","2":"169000"},{"Name":"Kert\u0161","0":"Kert\u0161","CountryCode":"UKR","1":"UKR","Population":"162000","2":"162000"},{"Name":"Nikopol","0":"Nikopol","CountryCode":"UKR","1":"UKR","Population":"149000","2":"149000"},{"Name":"Berdjansk","0":"Berdjansk","CountryCode":"UKR","1":"UKR","Population":"130000","2":"130000"},{"Name":"Pavlograd","0":"Pavlograd","CountryCode":"UKR","1":"UKR","Population":"127000","2":"127000"},{"Name":"Sjeverodonetsk","0":"Sjeverodonetsk","CountryCode":"UKR","1":"UKR","Population":"127000","2":"127000"},{"Name":"Slovjansk","0":"Slovjansk","CountryCode":"UKR","1":"UKR","Population":"127000","2":"127000"},{"Name":"Uzgorod","0":"Uzgorod","CountryCode":"UKR","1":"UKR","Population":"127000","2":"127000"},{"Name":"Alt\u0161evsk","0":"Alt\u0161evsk","CountryCode":"UKR","1":"UKR","Population":"119000","2":"119000"},{"Name":"Lysyt\u0161ansk","0":"Lysyt\u0161ansk","CountryCode":"UKR","1":"UKR","Population":"116000","2":"116000"},{"Name":"Jevpatorija","0":"Jevpatorija","CountryCode":"UKR","1":"UKR","Population":"112000","2":"112000"},{"Name":"Kamjanets-Podilskyi","0":"Kamjanets-Podilskyi","CountryCode":"UKR","1":"UKR","Population":"109000","2":"109000"},{"Name":"Jenakijeve","0":"Jenakijeve","CountryCode":"UKR","1":"UKR","Population":"105000","2":"105000"},{"Name":"Krasnyi Lut\u0161","0":"Krasnyi Lut\u0161","CountryCode":"UKR","1":"UKR","Population":"101000","2":"101000"},{"Name":"Stahanov","0":"Stahanov","CountryCode":"UKR","1":"UKR","Population":"101000","2":"101000"},{"Name":"Oleksandrija","0":"Oleksandrija","CountryCode":"UKR","1":"UKR","Population":"99000","2":"99000"},{"Name":"Konotop","0":"Konotop","CountryCode":"UKR","1":"UKR","Population":"96000","2":"96000"},{"Name":"Kostjantynivka","0":"Kostjantynivka","CountryCode":"UKR","1":"UKR","Population":"95000","2":"95000"},{"Name":"Berdyt\u0161iv","0":"Berdyt\u0161iv","CountryCode":"UKR","1":"UKR","Population":"90000","2":"90000"},{"Name":"Izmajil","0":"Izmajil","CountryCode":"UKR","1":"UKR","Population":"90000","2":"90000"},{"Name":"\u0160ostka","0":"\u0160ostka","CountryCode":"UKR","1":"UKR","Population":"90000","2":"90000"},{"Name":"Uman","0":"Uman","CountryCode":"UKR","1":"UKR","Population":"90000","2":"90000"},{"Name":"Brovary","0":"Brovary","CountryCode":"UKR","1":"UKR","Population":"89000","2":"89000"},{"Name":"Mukat\u0161eve","0":"Mukat\u0161eve","CountryCode":"UKR","1":"UKR","Population":"89000","2":"89000"},{"Name":"Budapest","0":"Budapest","CountryCode":"HUN","1":"HUN","Population":"1811552","2":"1811552"},{"Name":"Debrecen","0":"Debrecen","CountryCode":"HUN","1":"HUN","Population":"203648","2":"203648"},{"Name":"Miskolc","0":"Miskolc","CountryCode":"HUN","1":"HUN","Population":"172357","2":"172357"},{"Name":"Szeged","0":"Szeged","CountryCode":"HUN","1":"HUN","Population":"158158","2":"158158"},{"Name":"P\u00e9cs","0":"P\u00e9cs","CountryCode":"HUN","1":"HUN","Population":"157332","2":"157332"},{"Name":"Gy\u00f6r","0":"Gy\u00f6r","CountryCode":"HUN","1":"HUN","Population":"127119","2":"127119"},{"Name":"Nyiregyh\u00e1za","0":"Nyiregyh\u00e1za","CountryCode":"HUN","1":"HUN","Population":"112419","2":"112419"},{"Name":"Kecskem\u00e9t","0":"Kecskem\u00e9t","CountryCode":"HUN","1":"HUN","Population":"105606","2":"105606"},{"Name":"Sz\u00e9kesfeh\u00e9rv\u00e1r","0":"Sz\u00e9kesfeh\u00e9rv\u00e1r","CountryCode":"HUN","1":"HUN","Population":"105119","2":"105119"},{"Name":"Montevideo","0":"Montevideo","CountryCode":"URY","1":"URY","Population":"1236000","2":"1236000"},{"Name":"Noum\u00e9a","0":"Noum\u00e9a","CountryCode":"NCL","1":"NCL","Population":"76293","2":"76293"},{"Name":"Auckland","0":"Auckland","CountryCode":"NZL","1":"NZL","Population":"381800","2":"381800"},{"Name":"Christchurch","0":"Christchurch","CountryCode":"NZL","1":"NZL","Population":"324200","2":"324200"},{"Name":"Manukau","0":"Manukau","CountryCode":"NZL","1":"NZL","Population":"281800","2":"281800"},{"Name":"North Shore","0":"North Shore","CountryCode":"NZL","1":"NZL","Population":"187700","2":"187700"},{"Name":"Waitakere","0":"Waitakere","CountryCode":"NZL","1":"NZL","Population":"170600","2":"170600"},{"Name":"Wellington","0":"Wellington","CountryCode":"NZL","1":"NZL","Population":"166700","2":"166700"},{"Name":"Dunedin","0":"Dunedin","CountryCode":"NZL","1":"NZL","Population":"119600","2":"119600"},{"Name":"Hamilton","0":"Hamilton","CountryCode":"NZL","1":"NZL","Population":"117100","2":"117100"},{"Name":"Lower Hutt","0":"Lower Hutt","CountryCode":"NZL","1":"NZL","Population":"98100","2":"98100"},{"Name":"Toskent","0":"Toskent","CountryCode":"UZB","1":"UZB","Population":"2117500","2":"2117500"},{"Name":"Namangan","0":"Namangan","CountryCode":"UZB","1":"UZB","Population":"370500","2":"370500"},{"Name":"Samarkand","0":"Samarkand","CountryCode":"UZB","1":"UZB","Population":"361800","2":"361800"},{"Name":"Andijon","0":"Andijon","CountryCode":"UZB","1":"UZB","Population":"318600","2":"318600"},{"Name":"Buhoro","0":"Buhoro","CountryCode":"UZB","1":"UZB","Population":"237100","2":"237100"},{"Name":"Karsi","0":"Karsi","CountryCode":"UZB","1":"UZB","Population":"194100","2":"194100"},{"Name":"Nukus","0":"Nukus","CountryCode":"UZB","1":"UZB","Population":"194100","2":"194100"},{"Name":"K\u00fckon","0":"K\u00fckon","CountryCode":"UZB","1":"UZB","Population":"190100","2":"190100"},{"Name":"Fargona","0":"Fargona","CountryCode":"UZB","1":"UZB","Population":"180500","2":"180500"},{"Name":"Circik","0":"Circik","CountryCode":"UZB","1":"UZB","Population":"146400","2":"146400"},{"Name":"Margilon","0":"Margilon","CountryCode":"UZB","1":"UZB","Population":"140800","2":"140800"},{"Name":"\u00dcrgenc","0":"\u00dcrgenc","CountryCode":"UZB","1":"UZB","Population":"138900","2":"138900"},{"Name":"Angren","0":"Angren","CountryCode":"UZB","1":"UZB","Population":"128000","2":"128000"},{"Name":"Cizah","0":"Cizah","CountryCode":"UZB","1":"UZB","Population":"124800","2":"124800"},{"Name":"Navoi","0":"Navoi","CountryCode":"UZB","1":"UZB","Population":"116300","2":"116300"},{"Name":"Olmalik","0":"Olmalik","CountryCode":"UZB","1":"UZB","Population":"114900","2":"114900"},{"Name":"Termiz","0":"Termiz","CountryCode":"UZB","1":"UZB","Population":"109500","2":"109500"},{"Name":"Minsk","0":"Minsk","CountryCode":"BLR","1":"BLR","Population":"1674000","2":"1674000"},{"Name":"Gomel","0":"Gomel","CountryCode":"BLR","1":"BLR","Population":"475000","2":"475000"},{"Name":"Mogiljov","0":"Mogiljov","CountryCode":"BLR","1":"BLR","Population":"356000","2":"356000"},{"Name":"Vitebsk","0":"Vitebsk","CountryCode":"BLR","1":"BLR","Population":"340000","2":"340000"},{"Name":"Grodno","0":"Grodno","CountryCode":"BLR","1":"BLR","Population":"302000","2":"302000"},{"Name":"Brest","0":"Brest","CountryCode":"BLR","1":"BLR","Population":"286000","2":"286000"},{"Name":"Bobruisk","0":"Bobruisk","CountryCode":"BLR","1":"BLR","Population":"221000","2":"221000"},{"Name":"Baranovit\u0161i","0":"Baranovit\u0161i","CountryCode":"BLR","1":"BLR","Population":"167000","2":"167000"},{"Name":"Borisov","0":"Borisov","CountryCode":"BLR","1":"BLR","Population":"151000","2":"151000"},{"Name":"Pinsk","0":"Pinsk","CountryCode":"BLR","1":"BLR","Population":"130000","2":"130000"},{"Name":"Or\u0161a","0":"Or\u0161a","CountryCode":"BLR","1":"BLR","Population":"124000","2":"124000"},{"Name":"Mozyr","0":"Mozyr","CountryCode":"BLR","1":"BLR","Population":"110000","2":"110000"},{"Name":"Novopolotsk","0":"Novopolotsk","CountryCode":"BLR","1":"BLR","Population":"106000","2":"106000"},{"Name":"Lida","0":"Lida","CountryCode":"BLR","1":"BLR","Population":"101000","2":"101000"},{"Name":"Soligorsk","0":"Soligorsk","CountryCode":"BLR","1":"BLR","Population":"101000","2":"101000"},{"Name":"Molodet\u0161no","0":"Molodet\u0161no","CountryCode":"BLR","1":"BLR","Population":"97000","2":"97000"},{"Name":"Mata-Utu","0":"Mata-Utu","CountryCode":"WLF","1":"WLF","Population":"1137","2":"1137"},{"Name":"Port-Vila","0":"Port-Vila","CountryCode":"VUT","1":"VUT","Population":"33700","2":"33700"},{"Name":"Citt\u00e0 del Vaticano","0":"Citt\u00e0 del Vaticano","CountryCode":"VAT","1":"VAT","Population":"455","2":"455"},{"Name":"Caracas","0":"Caracas","CountryCode":"VEN","1":"VEN","Population":"1975294","2":"1975294"},{"Name":"Maraca\u00edbo","0":"Maraca\u00edbo","CountryCode":"VEN","1":"VEN","Population":"1304776","2":"1304776"},{"Name":"Barquisimeto","0":"Barquisimeto","CountryCode":"VEN","1":"VEN","Population":"877239","2":"877239"},{"Name":"Valencia","0":"Valencia","CountryCode":"VEN","1":"VEN","Population":"794246","2":"794246"},{"Name":"Ciudad Guayana","0":"Ciudad Guayana","CountryCode":"VEN","1":"VEN","Population":"663713","2":"663713"},{"Name":"Petare","0":"Petare","CountryCode":"VEN","1":"VEN","Population":"488868","2":"488868"},{"Name":"Maracay","0":"Maracay","CountryCode":"VEN","1":"VEN","Population":"444443","2":"444443"},{"Name":"Barcelona","0":"Barcelona","CountryCode":"VEN","1":"VEN","Population":"322267","2":"322267"},{"Name":"Matur\u00edn","0":"Matur\u00edn","CountryCode":"VEN","1":"VEN","Population":"319726","2":"319726"},{"Name":"San Crist\u00f3bal","0":"San Crist\u00f3bal","CountryCode":"VEN","1":"VEN","Population":"319373","2":"319373"},{"Name":"Ciudad Bol\u00edvar","0":"Ciudad Bol\u00edvar","CountryCode":"VEN","1":"VEN","Population":"301107","2":"301107"},{"Name":"Cuman\u00e1","0":"Cuman\u00e1","CountryCode":"VEN","1":"VEN","Population":"293105","2":"293105"},{"Name":"M\u00e9rida","0":"M\u00e9rida","CountryCode":"VEN","1":"VEN","Population":"224887","2":"224887"},{"Name":"Cabimas","0":"Cabimas","CountryCode":"VEN","1":"VEN","Population":"221329","2":"221329"},{"Name":"Barinas","0":"Barinas","CountryCode":"VEN","1":"VEN","Population":"217831","2":"217831"},{"Name":"Turmero","0":"Turmero","CountryCode":"VEN","1":"VEN","Population":"217499","2":"217499"},{"Name":"Baruta","0":"Baruta","CountryCode":"VEN","1":"VEN","Population":"207290","2":"207290"},{"Name":"Puerto Cabello","0":"Puerto Cabello","CountryCode":"VEN","1":"VEN","Population":"187722","2":"187722"},{"Name":"Santa Ana de Coro","0":"Santa Ana de Coro","CountryCode":"VEN","1":"VEN","Population":"185766","2":"185766"},{"Name":"Los Teques","0":"Los Teques","CountryCode":"VEN","1":"VEN","Population":"178784","2":"178784"},{"Name":"Punto Fijo","0":"Punto Fijo","CountryCode":"VEN","1":"VEN","Population":"167215","2":"167215"},{"Name":"Guarenas","0":"Guarenas","CountryCode":"VEN","1":"VEN","Population":"165889","2":"165889"},{"Name":"Acarigua","0":"Acarigua","CountryCode":"VEN","1":"VEN","Population":"158954","2":"158954"},{"Name":"Puerto La Cruz","0":"Puerto La Cruz","CountryCode":"VEN","1":"VEN","Population":"155700","2":"155700"},{"Name":"Ciudad Losada","0":"Ciudad Losada","CountryCode":"VEN","1":"VEN","Population":"134501","2":"134501"},{"Name":"Guacara","0":"Guacara","CountryCode":"VEN","1":"VEN","Population":"131334","2":"131334"},{"Name":"Valera","0":"Valera","CountryCode":"VEN","1":"VEN","Population":"130281","2":"130281"},{"Name":"Guanare","0":"Guanare","CountryCode":"VEN","1":"VEN","Population":"125621","2":"125621"},{"Name":"Car\u00fapano","0":"Car\u00fapano","CountryCode":"VEN","1":"VEN","Population":"119639","2":"119639"},{"Name":"Catia La Mar","0":"Catia La Mar","CountryCode":"VEN","1":"VEN","Population":"117012","2":"117012"},{"Name":"El Tigre","0":"El Tigre","CountryCode":"VEN","1":"VEN","Population":"116256","2":"116256"},{"Name":"Guatire","0":"Guatire","CountryCode":"VEN","1":"VEN","Population":"109121","2":"109121"},{"Name":"Calabozo","0":"Calabozo","CountryCode":"VEN","1":"VEN","Population":"107146","2":"107146"},{"Name":"Pozuelos","0":"Pozuelos","CountryCode":"VEN","1":"VEN","Population":"105690","2":"105690"},{"Name":"Ciudad Ojeda","0":"Ciudad Ojeda","CountryCode":"VEN","1":"VEN","Population":"99354","2":"99354"},{"Name":"Ocumare del Tuy","0":"Ocumare del Tuy","CountryCode":"VEN","1":"VEN","Population":"97168","2":"97168"},{"Name":"Valle de la Pascua","0":"Valle de la Pascua","CountryCode":"VEN","1":"VEN","Population":"95927","2":"95927"},{"Name":"Araure","0":"Araure","CountryCode":"VEN","1":"VEN","Population":"94269","2":"94269"},{"Name":"San Fernando de Apure","0":"San Fernando de Apure","CountryCode":"VEN","1":"VEN","Population":"93809","2":"93809"},{"Name":"San Felipe","0":"San Felipe","CountryCode":"VEN","1":"VEN","Population":"90940","2":"90940"},{"Name":"El Lim\u00f3n","0":"El Lim\u00f3n","CountryCode":"VEN","1":"VEN","Population":"90000","2":"90000"},{"Name":"Moscow","0":"Moscow","CountryCode":"RUS","1":"RUS","Population":"8389200","2":"8389200"},{"Name":"St Petersburg","0":"St Petersburg","CountryCode":"RUS","1":"RUS","Population":"4694000","2":"4694000"},{"Name":"Novosibirsk","0":"Novosibirsk","CountryCode":"RUS","1":"RUS","Population":"1398800","2":"1398800"},{"Name":"Nizni Novgorod","0":"Nizni Novgorod","CountryCode":"RUS","1":"RUS","Population":"1357000","2":"1357000"},{"Name":"Jekaterinburg","0":"Jekaterinburg","CountryCode":"RUS","1":"RUS","Population":"1266300","2":"1266300"},{"Name":"Samara","0":"Samara","CountryCode":"RUS","1":"RUS","Population":"1156100","2":"1156100"},{"Name":"Omsk","0":"Omsk","CountryCode":"RUS","1":"RUS","Population":"1148900","2":"1148900"},{"Name":"Kazan","0":"Kazan","CountryCode":"RUS","1":"RUS","Population":"1101000","2":"1101000"},{"Name":"Ufa","0":"Ufa","CountryCode":"RUS","1":"RUS","Population":"1091200","2":"1091200"},{"Name":"T\u0161eljabinsk","0":"T\u0161eljabinsk","CountryCode":"RUS","1":"RUS","Population":"1083200","2":"1083200"},{"Name":"Rostov-na-Donu","0":"Rostov-na-Donu","CountryCode":"RUS","1":"RUS","Population":"1012700","2":"1012700"},{"Name":"Perm","0":"Perm","CountryCode":"RUS","1":"RUS","Population":"1009700","2":"1009700"},{"Name":"Volgograd","0":"Volgograd","CountryCode":"RUS","1":"RUS","Population":"993400","2":"993400"},{"Name":"Voronez","0":"Voronez","CountryCode":"RUS","1":"RUS","Population":"907700","2":"907700"},{"Name":"Krasnojarsk","0":"Krasnojarsk","CountryCode":"RUS","1":"RUS","Population":"875500","2":"875500"},{"Name":"Saratov","0":"Saratov","CountryCode":"RUS","1":"RUS","Population":"874000","2":"874000"},{"Name":"Toljatti","0":"Toljatti","CountryCode":"RUS","1":"RUS","Population":"722900","2":"722900"},{"Name":"Uljanovsk","0":"Uljanovsk","CountryCode":"RUS","1":"RUS","Population":"667400","2":"667400"},{"Name":"Izevsk","0":"Izevsk","CountryCode":"RUS","1":"RUS","Population":"652800","2":"652800"},{"Name":"Krasnodar","0":"Krasnodar","CountryCode":"RUS","1":"RUS","Population":"639000","2":"639000"},{"Name":"Jaroslavl","0":"Jaroslavl","CountryCode":"RUS","1":"RUS","Population":"616700","2":"616700"},{"Name":"Habarovsk","0":"Habarovsk","CountryCode":"RUS","1":"RUS","Population":"609400","2":"609400"},{"Name":"Vladivostok","0":"Vladivostok","CountryCode":"RUS","1":"RUS","Population":"606200","2":"606200"},{"Name":"Irkutsk","0":"Irkutsk","CountryCode":"RUS","1":"RUS","Population":"593700","2":"593700"},{"Name":"Barnaul","0":"Barnaul","CountryCode":"RUS","1":"RUS","Population":"580100","2":"580100"},{"Name":"Novokuznetsk","0":"Novokuznetsk","CountryCode":"RUS","1":"RUS","Population":"561600","2":"561600"},{"Name":"Penza","0":"Penza","CountryCode":"RUS","1":"RUS","Population":"532200","2":"532200"},{"Name":"Rjazan","0":"Rjazan","CountryCode":"RUS","1":"RUS","Population":"529900","2":"529900"},{"Name":"Orenburg","0":"Orenburg","CountryCode":"RUS","1":"RUS","Population":"523600","2":"523600"},{"Name":"Lipetsk","0":"Lipetsk","CountryCode":"RUS","1":"RUS","Population":"521000","2":"521000"},{"Name":"Nabereznyje T\u0161elny","0":"Nabereznyje T\u0161elny","CountryCode":"RUS","1":"RUS","Population":"514700","2":"514700"},{"Name":"Tula","0":"Tula","CountryCode":"RUS","1":"RUS","Population":"506100","2":"506100"},{"Name":"Tjumen","0":"Tjumen","CountryCode":"RUS","1":"RUS","Population":"503400","2":"503400"},{"Name":"Kemerovo","0":"Kemerovo","CountryCode":"RUS","1":"RUS","Population":"492700","2":"492700"},{"Name":"Astrahan","0":"Astrahan","CountryCode":"RUS","1":"RUS","Population":"486100","2":"486100"},{"Name":"Tomsk","0":"Tomsk","CountryCode":"RUS","1":"RUS","Population":"482100","2":"482100"},{"Name":"Kirov","0":"Kirov","CountryCode":"RUS","1":"RUS","Population":"466200","2":"466200"},{"Name":"Ivanovo","0":"Ivanovo","CountryCode":"RUS","1":"RUS","Population":"459200","2":"459200"},{"Name":"T\u0161eboksary","0":"T\u0161eboksary","CountryCode":"RUS","1":"RUS","Population":"459200","2":"459200"},{"Name":"Brjansk","0":"Brjansk","CountryCode":"RUS","1":"RUS","Population":"457400","2":"457400"},{"Name":"Tver","0":"Tver","CountryCode":"RUS","1":"RUS","Population":"454900","2":"454900"},{"Name":"Kursk","0":"Kursk","CountryCode":"RUS","1":"RUS","Population":"443500","2":"443500"},{"Name":"Magnitogorsk","0":"Magnitogorsk","CountryCode":"RUS","1":"RUS","Population":"427900","2":"427900"},{"Name":"Kaliningrad","0":"Kaliningrad","CountryCode":"RUS","1":"RUS","Population":"424400","2":"424400"},{"Name":"Nizni Tagil","0":"Nizni Tagil","CountryCode":"RUS","1":"RUS","Population":"390900","2":"390900"},{"Name":"Murmansk","0":"Murmansk","CountryCode":"RUS","1":"RUS","Population":"376300","2":"376300"},{"Name":"Ulan-Ude","0":"Ulan-Ude","CountryCode":"RUS","1":"RUS","Population":"370400","2":"370400"},{"Name":"Kurgan","0":"Kurgan","CountryCode":"RUS","1":"RUS","Population":"364700","2":"364700"},{"Name":"Arkangeli","0":"Arkangeli","CountryCode":"RUS","1":"RUS","Population":"361800","2":"361800"},{"Name":"Sot\u0161i","0":"Sot\u0161i","CountryCode":"RUS","1":"RUS","Population":"358600","2":"358600"},{"Name":"Smolensk","0":"Smolensk","CountryCode":"RUS","1":"RUS","Population":"353400","2":"353400"},{"Name":"Orjol","0":"Orjol","CountryCode":"RUS","1":"RUS","Population":"344500","2":"344500"},{"Name":"Stavropol","0":"Stavropol","CountryCode":"RUS","1":"RUS","Population":"343300","2":"343300"},{"Name":"Belgorod","0":"Belgorod","CountryCode":"RUS","1":"RUS","Population":"342000","2":"342000"},{"Name":"Kaluga","0":"Kaluga","CountryCode":"RUS","1":"RUS","Population":"339300","2":"339300"},{"Name":"Vladimir","0":"Vladimir","CountryCode":"RUS","1":"RUS","Population":"337100","2":"337100"},{"Name":"Mahat\u0161kala","0":"Mahat\u0161kala","CountryCode":"RUS","1":"RUS","Population":"332800","2":"332800"},{"Name":"T\u0161erepovets","0":"T\u0161erepovets","CountryCode":"RUS","1":"RUS","Population":"324400","2":"324400"},{"Name":"Saransk","0":"Saransk","CountryCode":"RUS","1":"RUS","Population":"314800","2":"314800"},{"Name":"Tambov","0":"Tambov","CountryCode":"RUS","1":"RUS","Population":"312000","2":"312000"},{"Name":"Vladikavkaz","0":"Vladikavkaz","CountryCode":"RUS","1":"RUS","Population":"310100","2":"310100"},{"Name":"T\u0161ita","0":"T\u0161ita","CountryCode":"RUS","1":"RUS","Population":"309900","2":"309900"},{"Name":"Vologda","0":"Vologda","CountryCode":"RUS","1":"RUS","Population":"302500","2":"302500"},{"Name":"Veliki Novgorod","0":"Veliki Novgorod","CountryCode":"RUS","1":"RUS","Population":"299500","2":"299500"},{"Name":"Komsomolsk-na-Amure","0":"Komsomolsk-na-Amure","CountryCode":"RUS","1":"RUS","Population":"291600","2":"291600"},{"Name":"Kostroma","0":"Kostroma","CountryCode":"RUS","1":"RUS","Population":"288100","2":"288100"},{"Name":"Volzski","0":"Volzski","CountryCode":"RUS","1":"RUS","Population":"286900","2":"286900"},{"Name":"Taganrog","0":"Taganrog","CountryCode":"RUS","1":"RUS","Population":"284400","2":"284400"},{"Name":"Petroskoi","0":"Petroskoi","CountryCode":"RUS","1":"RUS","Population":"282100","2":"282100"},{"Name":"Bratsk","0":"Bratsk","CountryCode":"RUS","1":"RUS","Population":"277600","2":"277600"},{"Name":"Dzerzinsk","0":"Dzerzinsk","CountryCode":"RUS","1":"RUS","Population":"277100","2":"277100"},{"Name":"Surgut","0":"Surgut","CountryCode":"RUS","1":"RUS","Population":"274900","2":"274900"},{"Name":"Orsk","0":"Orsk","CountryCode":"RUS","1":"RUS","Population":"273900","2":"273900"},{"Name":"Sterlitamak","0":"Sterlitamak","CountryCode":"RUS","1":"RUS","Population":"265200","2":"265200"},{"Name":"Angarsk","0":"Angarsk","CountryCode":"RUS","1":"RUS","Population":"264700","2":"264700"},{"Name":"Jo\u0161kar-Ola","0":"Jo\u0161kar-Ola","CountryCode":"RUS","1":"RUS","Population":"249200","2":"249200"},{"Name":"Rybinsk","0":"Rybinsk","CountryCode":"RUS","1":"RUS","Population":"239600","2":"239600"},{"Name":"Prokopjevsk","0":"Prokopjevsk","CountryCode":"RUS","1":"RUS","Population":"237300","2":"237300"},{"Name":"Niznevartovsk","0":"Niznevartovsk","CountryCode":"RUS","1":"RUS","Population":"233900","2":"233900"},{"Name":"Nalt\u0161ik","0":"Nalt\u0161ik","CountryCode":"RUS","1":"RUS","Population":"233400","2":"233400"},{"Name":"Syktyvkar","0":"Syktyvkar","CountryCode":"RUS","1":"RUS","Population":"229700","2":"229700"},{"Name":"Severodvinsk","0":"Severodvinsk","CountryCode":"RUS","1":"RUS","Population":"229300","2":"229300"},{"Name":"Bijsk","0":"Bijsk","CountryCode":"RUS","1":"RUS","Population":"225000","2":"225000"},{"Name":"Niznekamsk","0":"Niznekamsk","CountryCode":"RUS","1":"RUS","Population":"223400","2":"223400"},{"Name":"Blagove\u0161t\u0161ensk","0":"Blagove\u0161t\u0161ensk","CountryCode":"RUS","1":"RUS","Population":"222000","2":"222000"},{"Name":"\u0160ahty","0":"\u0160ahty","CountryCode":"RUS","1":"RUS","Population":"221800","2":"221800"},{"Name":"Staryi Oskol","0":"Staryi Oskol","CountryCode":"RUS","1":"RUS","Population":"213800","2":"213800"},{"Name":"Zelenograd","0":"Zelenograd","CountryCode":"RUS","1":"RUS","Population":"207100","2":"207100"},{"Name":"Balakovo","0":"Balakovo","CountryCode":"RUS","1":"RUS","Population":"206000","2":"206000"},{"Name":"Novorossijsk","0":"Novorossijsk","CountryCode":"RUS","1":"RUS","Population":"203300","2":"203300"},{"Name":"Pihkova","0":"Pihkova","CountryCode":"RUS","1":"RUS","Population":"201500","2":"201500"},{"Name":"Zlatoust","0":"Zlatoust","CountryCode":"RUS","1":"RUS","Population":"196900","2":"196900"},{"Name":"Jakutsk","0":"Jakutsk","CountryCode":"RUS","1":"RUS","Population":"195400","2":"195400"},{"Name":"Podolsk","0":"Podolsk","CountryCode":"RUS","1":"RUS","Population":"194300","2":"194300"},{"Name":"Petropavlovsk-Kamt\u0161atski","0":"Petropavlovsk-Kamt\u0161atski","CountryCode":"RUS","1":"RUS","Population":"194100","2":"194100"},{"Name":"Kamensk-Uralski","0":"Kamensk-Uralski","CountryCode":"RUS","1":"RUS","Population":"190600","2":"190600"},{"Name":"Engels","0":"Engels","CountryCode":"RUS","1":"RUS","Population":"189000","2":"189000"},{"Name":"Syzran","0":"Syzran","CountryCode":"RUS","1":"RUS","Population":"186900","2":"186900"},{"Name":"Grozny","0":"Grozny","CountryCode":"RUS","1":"RUS","Population":"186000","2":"186000"},{"Name":"Novot\u0161erkassk","0":"Novot\u0161erkassk","CountryCode":"RUS","1":"RUS","Population":"184400","2":"184400"},{"Name":"Berezniki","0":"Berezniki","CountryCode":"RUS","1":"RUS","Population":"181900","2":"181900"},{"Name":"Juzno-Sahalinsk","0":"Juzno-Sahalinsk","CountryCode":"RUS","1":"RUS","Population":"179200","2":"179200"},{"Name":"Volgodonsk","0":"Volgodonsk","CountryCode":"RUS","1":"RUS","Population":"178200","2":"178200"},{"Name":"Abakan","0":"Abakan","CountryCode":"RUS","1":"RUS","Population":"169200","2":"169200"},{"Name":"Maikop","0":"Maikop","CountryCode":"RUS","1":"RUS","Population":"167300","2":"167300"},{"Name":"Miass","0":"Miass","CountryCode":"RUS","1":"RUS","Population":"166200","2":"166200"},{"Name":"Armavir","0":"Armavir","CountryCode":"RUS","1":"RUS","Population":"164900","2":"164900"},{"Name":"Ljubertsy","0":"Ljubertsy","CountryCode":"RUS","1":"RUS","Population":"163900","2":"163900"},{"Name":"Rubtsovsk","0":"Rubtsovsk","CountryCode":"RUS","1":"RUS","Population":"162600","2":"162600"},{"Name":"Kovrov","0":"Kovrov","CountryCode":"RUS","1":"RUS","Population":"159900","2":"159900"},{"Name":"Nahodka","0":"Nahodka","CountryCode":"RUS","1":"RUS","Population":"157700","2":"157700"},{"Name":"Ussurijsk","0":"Ussurijsk","CountryCode":"RUS","1":"RUS","Population":"157300","2":"157300"},{"Name":"Salavat","0":"Salavat","CountryCode":"RUS","1":"RUS","Population":"156800","2":"156800"},{"Name":"Myti\u0161t\u0161i","0":"Myti\u0161t\u0161i","CountryCode":"RUS","1":"RUS","Population":"155700","2":"155700"},{"Name":"Kolomna","0":"Kolomna","CountryCode":"RUS","1":"RUS","Population":"150700","2":"150700"},{"Name":"Elektrostal","0":"Elektrostal","CountryCode":"RUS","1":"RUS","Population":"147000","2":"147000"},{"Name":"Murom","0":"Murom","CountryCode":"RUS","1":"RUS","Population":"142400","2":"142400"},{"Name":"Kolpino","0":"Kolpino","CountryCode":"RUS","1":"RUS","Population":"141200","2":"141200"},{"Name":"Norilsk","0":"Norilsk","CountryCode":"RUS","1":"RUS","Population":"140800","2":"140800"},{"Name":"Almetjevsk","0":"Almetjevsk","CountryCode":"RUS","1":"RUS","Population":"140700","2":"140700"},{"Name":"Novomoskovsk","0":"Novomoskovsk","CountryCode":"RUS","1":"RUS","Population":"138100","2":"138100"},{"Name":"Dimitrovgrad","0":"Dimitrovgrad","CountryCode":"RUS","1":"RUS","Population":"137000","2":"137000"},{"Name":"Pervouralsk","0":"Pervouralsk","CountryCode":"RUS","1":"RUS","Population":"136100","2":"136100"},{"Name":"Himki","0":"Himki","CountryCode":"RUS","1":"RUS","Population":"133700","2":"133700"},{"Name":"Bala\u0161iha","0":"Bala\u0161iha","CountryCode":"RUS","1":"RUS","Population":"132900","2":"132900"},{"Name":"Nevinnomyssk","0":"Nevinnomyssk","CountryCode":"RUS","1":"RUS","Population":"132600","2":"132600"},{"Name":"Pjatigorsk","0":"Pjatigorsk","CountryCode":"RUS","1":"RUS","Population":"132500","2":"132500"},{"Name":"Korolev","0":"Korolev","CountryCode":"RUS","1":"RUS","Population":"132400","2":"132400"},{"Name":"Serpuhov","0":"Serpuhov","CountryCode":"RUS","1":"RUS","Population":"132000","2":"132000"},{"Name":"Odintsovo","0":"Odintsovo","CountryCode":"RUS","1":"RUS","Population":"127400","2":"127400"},{"Name":"Orehovo-Zujevo","0":"Orehovo-Zujevo","CountryCode":"RUS","1":"RUS","Population":"124900","2":"124900"},{"Name":"Kamy\u0161in","0":"Kamy\u0161in","CountryCode":"RUS","1":"RUS","Population":"124600","2":"124600"},{"Name":"Novot\u0161eboksarsk","0":"Novot\u0161eboksarsk","CountryCode":"RUS","1":"RUS","Population":"123400","2":"123400"},{"Name":"T\u0161erkessk","0":"T\u0161erkessk","CountryCode":"RUS","1":"RUS","Population":"121700","2":"121700"},{"Name":"At\u0161insk","0":"At\u0161insk","CountryCode":"RUS","1":"RUS","Population":"121600","2":"121600"},{"Name":"Magadan","0":"Magadan","CountryCode":"RUS","1":"RUS","Population":"121000","2":"121000"},{"Name":"Mit\u0161urinsk","0":"Mit\u0161urinsk","CountryCode":"RUS","1":"RUS","Population":"120700","2":"120700"},{"Name":"Kislovodsk","0":"Kislovodsk","CountryCode":"RUS","1":"RUS","Population":"120400","2":"120400"},{"Name":"Jelets","0":"Jelets","CountryCode":"RUS","1":"RUS","Population":"119400","2":"119400"},{"Name":"Seversk","0":"Seversk","CountryCode":"RUS","1":"RUS","Population":"118600","2":"118600"},{"Name":"Noginsk","0":"Noginsk","CountryCode":"RUS","1":"RUS","Population":"117200","2":"117200"},{"Name":"Velikije Luki","0":"Velikije Luki","CountryCode":"RUS","1":"RUS","Population":"116300","2":"116300"},{"Name":"Novokuiby\u0161evsk","0":"Novokuiby\u0161evsk","CountryCode":"RUS","1":"RUS","Population":"116200","2":"116200"},{"Name":"Neftekamsk","0":"Neftekamsk","CountryCode":"RUS","1":"RUS","Population":"115700","2":"115700"},{"Name":"Leninsk-Kuznetski","0":"Leninsk-Kuznetski","CountryCode":"RUS","1":"RUS","Population":"113800","2":"113800"},{"Name":"Oktjabrski","0":"Oktjabrski","CountryCode":"RUS","1":"RUS","Population":"111500","2":"111500"},{"Name":"Sergijev Posad","0":"Sergijev Posad","CountryCode":"RUS","1":"RUS","Population":"111100","2":"111100"},{"Name":"Arzamas","0":"Arzamas","CountryCode":"RUS","1":"RUS","Population":"110700","2":"110700"},{"Name":"Kiseljovsk","0":"Kiseljovsk","CountryCode":"RUS","1":"RUS","Population":"110000","2":"110000"},{"Name":"Novotroitsk","0":"Novotroitsk","CountryCode":"RUS","1":"RUS","Population":"109600","2":"109600"},{"Name":"Obninsk","0":"Obninsk","CountryCode":"RUS","1":"RUS","Population":"108300","2":"108300"},{"Name":"Kansk","0":"Kansk","CountryCode":"RUS","1":"RUS","Population":"107400","2":"107400"},{"Name":"Glazov","0":"Glazov","CountryCode":"RUS","1":"RUS","Population":"106300","2":"106300"},{"Name":"Solikamsk","0":"Solikamsk","CountryCode":"RUS","1":"RUS","Population":"106000","2":"106000"},{"Name":"Sarapul","0":"Sarapul","CountryCode":"RUS","1":"RUS","Population":"105700","2":"105700"},{"Name":"Ust-Ilimsk","0":"Ust-Ilimsk","CountryCode":"RUS","1":"RUS","Population":"105200","2":"105200"},{"Name":"\u0160t\u0161olkovo","0":"\u0160t\u0161olkovo","CountryCode":"RUS","1":"RUS","Population":"104900","2":"104900"},{"Name":"Mezduret\u0161ensk","0":"Mezduret\u0161ensk","CountryCode":"RUS","1":"RUS","Population":"104400","2":"104400"},{"Name":"Usolje-Sibirskoje","0":"Usolje-Sibirskoje","CountryCode":"RUS","1":"RUS","Population":"103500","2":"103500"},{"Name":"Elista","0":"Elista","CountryCode":"RUS","1":"RUS","Population":"103300","2":"103300"},{"Name":"Novo\u0161ahtinsk","0":"Novo\u0161ahtinsk","CountryCode":"RUS","1":"RUS","Population":"101900","2":"101900"},{"Name":"Votkinsk","0":"Votkinsk","CountryCode":"RUS","1":"RUS","Population":"101700","2":"101700"},{"Name":"Kyzyl","0":"Kyzyl","CountryCode":"RUS","1":"RUS","Population":"101100","2":"101100"},{"Name":"Serov","0":"Serov","CountryCode":"RUS","1":"RUS","Population":"100400","2":"100400"},{"Name":"Zelenodolsk","0":"Zelenodolsk","CountryCode":"RUS","1":"RUS","Population":"100200","2":"100200"},{"Name":"Zeleznodoroznyi","0":"Zeleznodoroznyi","CountryCode":"RUS","1":"RUS","Population":"100100","2":"100100"},{"Name":"Kine\u0161ma","0":"Kine\u0161ma","CountryCode":"RUS","1":"RUS","Population":"100000","2":"100000"},{"Name":"Kuznetsk","0":"Kuznetsk","CountryCode":"RUS","1":"RUS","Population":"98200","2":"98200"},{"Name":"Uhta","0":"Uhta","CountryCode":"RUS","1":"RUS","Population":"98000","2":"98000"},{"Name":"Jessentuki","0":"Jessentuki","CountryCode":"RUS","1":"RUS","Population":"97900","2":"97900"},{"Name":"Tobolsk","0":"Tobolsk","CountryCode":"RUS","1":"RUS","Population":"97600","2":"97600"},{"Name":"Neftejugansk","0":"Neftejugansk","CountryCode":"RUS","1":"RUS","Population":"97400","2":"97400"},{"Name":"Bataisk","0":"Bataisk","CountryCode":"RUS","1":"RUS","Population":"97300","2":"97300"},{"Name":"Nojabrsk","0":"Nojabrsk","CountryCode":"RUS","1":"RUS","Population":"97300","2":"97300"},{"Name":"Bala\u0161ov","0":"Bala\u0161ov","CountryCode":"RUS","1":"RUS","Population":"97100","2":"97100"},{"Name":"Zeleznogorsk","0":"Zeleznogorsk","CountryCode":"RUS","1":"RUS","Population":"96900","2":"96900"},{"Name":"Zukovski","0":"Zukovski","CountryCode":"RUS","1":"RUS","Population":"96500","2":"96500"},{"Name":"Anzero-Sudzensk","0":"Anzero-Sudzensk","CountryCode":"RUS","1":"RUS","Population":"96100","2":"96100"},{"Name":"Bugulma","0":"Bugulma","CountryCode":"RUS","1":"RUS","Population":"94100","2":"94100"},{"Name":"Zeleznogorsk","0":"Zeleznogorsk","CountryCode":"RUS","1":"RUS","Population":"94000","2":"94000"},{"Name":"Novouralsk","0":"Novouralsk","CountryCode":"RUS","1":"RUS","Population":"93300","2":"93300"},{"Name":"Pu\u0161kin","0":"Pu\u0161kin","CountryCode":"RUS","1":"RUS","Population":"92900","2":"92900"},{"Name":"Vorkuta","0":"Vorkuta","CountryCode":"RUS","1":"RUS","Population":"92600","2":"92600"},{"Name":"Derbent","0":"Derbent","CountryCode":"RUS","1":"RUS","Population":"92300","2":"92300"},{"Name":"Kirovo-T\u0161epetsk","0":"Kirovo-T\u0161epetsk","CountryCode":"RUS","1":"RUS","Population":"91600","2":"91600"},{"Name":"Krasnogorsk","0":"Krasnogorsk","CountryCode":"RUS","1":"RUS","Population":"91000","2":"91000"},{"Name":"Klin","0":"Klin","CountryCode":"RUS","1":"RUS","Population":"90000","2":"90000"},{"Name":"T\u0161aikovski","0":"T\u0161aikovski","CountryCode":"RUS","1":"RUS","Population":"90000","2":"90000"},{"Name":"Novyi Urengoi","0":"Novyi Urengoi","CountryCode":"RUS","1":"RUS","Population":"89800","2":"89800"},{"Name":"Ho Chi Minh City","0":"Ho Chi Minh City","CountryCode":"VNM","1":"VNM","Population":"3980000","2":"3980000"},{"Name":"Hanoi","0":"Hanoi","CountryCode":"VNM","1":"VNM","Population":"1410000","2":"1410000"},{"Name":"Haiphong","0":"Haiphong","CountryCode":"VNM","1":"VNM","Population":"783133","2":"783133"},{"Name":"Da Nang","0":"Da Nang","CountryCode":"VNM","1":"VNM","Population":"382674","2":"382674"},{"Name":"Bi\u00ean Hoa","0":"Bi\u00ean Hoa","CountryCode":"VNM","1":"VNM","Population":"282095","2":"282095"},{"Name":"Nha Trang","0":"Nha Trang","CountryCode":"VNM","1":"VNM","Population":"221331","2":"221331"},{"Name":"Hue","0":"Hue","CountryCode":"VNM","1":"VNM","Population":"219149","2":"219149"},{"Name":"Can Tho","0":"Can Tho","CountryCode":"VNM","1":"VNM","Population":"215587","2":"215587"},{"Name":"Cam Pha","0":"Cam Pha","CountryCode":"VNM","1":"VNM","Population":"209086","2":"209086"},{"Name":"Nam Dinh","0":"Nam Dinh","CountryCode":"VNM","1":"VNM","Population":"171699","2":"171699"},{"Name":"Quy Nhon","0":"Quy Nhon","CountryCode":"VNM","1":"VNM","Population":"163385","2":"163385"},{"Name":"Vung Tau","0":"Vung Tau","CountryCode":"VNM","1":"VNM","Population":"145145","2":"145145"},{"Name":"Rach Gia","0":"Rach Gia","CountryCode":"VNM","1":"VNM","Population":"141132","2":"141132"},{"Name":"Long Xuyen","0":"Long Xuyen","CountryCode":"VNM","1":"VNM","Population":"132681","2":"132681"},{"Name":"Thai Nguyen","0":"Thai Nguyen","CountryCode":"VNM","1":"VNM","Population":"127643","2":"127643"},{"Name":"Hong Gai","0":"Hong Gai","CountryCode":"VNM","1":"VNM","Population":"127484","2":"127484"},{"Name":"Phan Thi\u00eat","0":"Phan Thi\u00eat","CountryCode":"VNM","1":"VNM","Population":"114236","2":"114236"},{"Name":"Cam Ranh","0":"Cam Ranh","CountryCode":"VNM","1":"VNM","Population":"114041","2":"114041"},{"Name":"Vinh","0":"Vinh","CountryCode":"VNM","1":"VNM","Population":"112455","2":"112455"},{"Name":"My Tho","0":"My Tho","CountryCode":"VNM","1":"VNM","Population":"108404","2":"108404"},{"Name":"Da Lat","0":"Da Lat","CountryCode":"VNM","1":"VNM","Population":"106409","2":"106409"},{"Name":"Buon Ma Thuot","0":"Buon Ma Thuot","CountryCode":"VNM","1":"VNM","Population":"97044","2":"97044"},{"Name":"Tallinn","0":"Tallinn","CountryCode":"EST","1":"EST","Population":"403981","2":"403981"},{"Name":"Tartu","0":"Tartu","CountryCode":"EST","1":"EST","Population":"101246","2":"101246"},{"Name":"New York","0":"New York","CountryCode":"USA","1":"USA","Population":"8008278","2":"8008278"},{"Name":"Los Angeles","0":"Los Angeles","CountryCode":"USA","1":"USA","Population":"3694820","2":"3694820"},{"Name":"Chicago","0":"Chicago","CountryCode":"USA","1":"USA","Population":"2896016","2":"2896016"},{"Name":"Houston","0":"Houston","CountryCode":"USA","1":"USA","Population":"1953631","2":"1953631"},{"Name":"Philadelphia","0":"Philadelphia","CountryCode":"USA","1":"USA","Population":"1517550","2":"1517550"},{"Name":"Phoenix","0":"Phoenix","CountryCode":"USA","1":"USA","Population":"1321045","2":"1321045"},{"Name":"San Diego","0":"San Diego","CountryCode":"USA","1":"USA","Population":"1223400","2":"1223400"},{"Name":"Dallas","0":"Dallas","CountryCode":"USA","1":"USA","Population":"1188580","2":"1188580"},{"Name":"San Antonio","0":"San Antonio","CountryCode":"USA","1":"USA","Population":"1144646","2":"1144646"},{"Name":"Detroit","0":"Detroit","CountryCode":"USA","1":"USA","Population":"951270","2":"951270"},{"Name":"San Jose","0":"San Jose","CountryCode":"USA","1":"USA","Population":"894943","2":"894943"},{"Name":"Indianapolis","0":"Indianapolis","CountryCode":"USA","1":"USA","Population":"791926","2":"791926"},{"Name":"San Francisco","0":"San Francisco","CountryCode":"USA","1":"USA","Population":"776733","2":"776733"},{"Name":"Jacksonville","0":"Jacksonville","CountryCode":"USA","1":"USA","Population":"735167","2":"735167"},{"Name":"Columbus","0":"Columbus","CountryCode":"USA","1":"USA","Population":"711470","2":"711470"},{"Name":"Austin","0":"Austin","CountryCode":"USA","1":"USA","Population":"656562","2":"656562"},{"Name":"Baltimore","0":"Baltimore","CountryCode":"USA","1":"USA","Population":"651154","2":"651154"},{"Name":"Memphis","0":"Memphis","CountryCode":"USA","1":"USA","Population":"650100","2":"650100"},{"Name":"Milwaukee","0":"Milwaukee","CountryCode":"USA","1":"USA","Population":"596974","2":"596974"},{"Name":"Boston","0":"Boston","CountryCode":"USA","1":"USA","Population":"589141","2":"589141"},{"Name":"Washington","0":"Washington","CountryCode":"USA","1":"USA","Population":"572059","2":"572059"},{"Name":"Nashville-Davidson","0":"Nashville-Davidson","CountryCode":"USA","1":"USA","Population":"569891","2":"569891"},{"Name":"El Paso","0":"El Paso","CountryCode":"USA","1":"USA","Population":"563662","2":"563662"},{"Name":"Seattle","0":"Seattle","CountryCode":"USA","1":"USA","Population":"563374","2":"563374"},{"Name":"Denver","0":"Denver","CountryCode":"USA","1":"USA","Population":"554636","2":"554636"},{"Name":"Charlotte","0":"Charlotte","CountryCode":"USA","1":"USA","Population":"540828","2":"540828"},{"Name":"Fort Worth","0":"Fort Worth","CountryCode":"USA","1":"USA","Population":"534694","2":"534694"},{"Name":"Portland","0":"Portland","CountryCode":"USA","1":"USA","Population":"529121","2":"529121"},{"Name":"Oklahoma City","0":"Oklahoma City","CountryCode":"USA","1":"USA","Population":"506132","2":"506132"},{"Name":"Tucson","0":"Tucson","CountryCode":"USA","1":"USA","Population":"486699","2":"486699"},{"Name":"New Orleans","0":"New Orleans","CountryCode":"USA","1":"USA","Population":"484674","2":"484674"},{"Name":"Las Vegas","0":"Las Vegas","CountryCode":"USA","1":"USA","Population":"478434","2":"478434"},{"Name":"Cleveland","0":"Cleveland","CountryCode":"USA","1":"USA","Population":"478403","2":"478403"},{"Name":"Long Beach","0":"Long Beach","CountryCode":"USA","1":"USA","Population":"461522","2":"461522"},{"Name":"Albuquerque","0":"Albuquerque","CountryCode":"USA","1":"USA","Population":"448607","2":"448607"},{"Name":"Kansas City","0":"Kansas City","CountryCode":"USA","1":"USA","Population":"441545","2":"441545"},{"Name":"Fresno","0":"Fresno","CountryCode":"USA","1":"USA","Population":"427652","2":"427652"},{"Name":"Virginia Beach","0":"Virginia Beach","CountryCode":"USA","1":"USA","Population":"425257","2":"425257"},{"Name":"Atlanta","0":"Atlanta","CountryCode":"USA","1":"USA","Population":"416474","2":"416474"},{"Name":"Sacramento","0":"Sacramento","CountryCode":"USA","1":"USA","Population":"407018","2":"407018"},{"Name":"Oakland","0":"Oakland","CountryCode":"USA","1":"USA","Population":"399484","2":"399484"},{"Name":"Mesa","0":"Mesa","CountryCode":"USA","1":"USA","Population":"396375","2":"396375"},{"Name":"Tulsa","0":"Tulsa","CountryCode":"USA","1":"USA","Population":"393049","2":"393049"},{"Name":"Omaha","0":"Omaha","CountryCode":"USA","1":"USA","Population":"390007","2":"390007"},{"Name":"Minneapolis","0":"Minneapolis","CountryCode":"USA","1":"USA","Population":"382618","2":"382618"},{"Name":"Honolulu","0":"Honolulu","CountryCode":"USA","1":"USA","Population":"371657","2":"371657"},{"Name":"Miami","0":"Miami","CountryCode":"USA","1":"USA","Population":"362470","2":"362470"},{"Name":"Colorado Springs","0":"Colorado Springs","CountryCode":"USA","1":"USA","Population":"360890","2":"360890"},{"Name":"Saint Louis","0":"Saint Louis","CountryCode":"USA","1":"USA","Population":"348189","2":"348189"},{"Name":"Wichita","0":"Wichita","CountryCode":"USA","1":"USA","Population":"344284","2":"344284"},{"Name":"Santa Ana","0":"Santa Ana","CountryCode":"USA","1":"USA","Population":"337977","2":"337977"},{"Name":"Pittsburgh","0":"Pittsburgh","CountryCode":"USA","1":"USA","Population":"334563","2":"334563"},{"Name":"Arlington","0":"Arlington","CountryCode":"USA","1":"USA","Population":"332969","2":"332969"},{"Name":"Cincinnati","0":"Cincinnati","CountryCode":"USA","1":"USA","Population":"331285","2":"331285"},{"Name":"Anaheim","0":"Anaheim","CountryCode":"USA","1":"USA","Population":"328014","2":"328014"},{"Name":"Toledo","0":"Toledo","CountryCode":"USA","1":"USA","Population":"313619","2":"313619"},{"Name":"Tampa","0":"Tampa","CountryCode":"USA","1":"USA","Population":"303447","2":"303447"},{"Name":"Buffalo","0":"Buffalo","CountryCode":"USA","1":"USA","Population":"292648","2":"292648"},{"Name":"Saint Paul","0":"Saint Paul","CountryCode":"USA","1":"USA","Population":"287151","2":"287151"},{"Name":"Corpus Christi","0":"Corpus Christi","CountryCode":"USA","1":"USA","Population":"277454","2":"277454"},{"Name":"Aurora","0":"Aurora","CountryCode":"USA","1":"USA","Population":"276393","2":"276393"},{"Name":"Raleigh","0":"Raleigh","CountryCode":"USA","1":"USA","Population":"276093","2":"276093"},{"Name":"Newark","0":"Newark","CountryCode":"USA","1":"USA","Population":"273546","2":"273546"},{"Name":"Lexington-Fayette","0":"Lexington-Fayette","CountryCode":"USA","1":"USA","Population":"260512","2":"260512"},{"Name":"Anchorage","0":"Anchorage","CountryCode":"USA","1":"USA","Population":"260283","2":"260283"},{"Name":"Louisville","0":"Louisville","CountryCode":"USA","1":"USA","Population":"256231","2":"256231"},{"Name":"Riverside","0":"Riverside","CountryCode":"USA","1":"USA","Population":"255166","2":"255166"},{"Name":"Saint Petersburg","0":"Saint Petersburg","CountryCode":"USA","1":"USA","Population":"248232","2":"248232"},{"Name":"Bakersfield","0":"Bakersfield","CountryCode":"USA","1":"USA","Population":"247057","2":"247057"},{"Name":"Stockton","0":"Stockton","CountryCode":"USA","1":"USA","Population":"243771","2":"243771"},{"Name":"Birmingham","0":"Birmingham","CountryCode":"USA","1":"USA","Population":"242820","2":"242820"},{"Name":"Jersey City","0":"Jersey City","CountryCode":"USA","1":"USA","Population":"240055","2":"240055"},{"Name":"Norfolk","0":"Norfolk","CountryCode":"USA","1":"USA","Population":"234403","2":"234403"},{"Name":"Baton Rouge","0":"Baton Rouge","CountryCode":"USA","1":"USA","Population":"227818","2":"227818"},{"Name":"Hialeah","0":"Hialeah","CountryCode":"USA","1":"USA","Population":"226419","2":"226419"},{"Name":"Lincoln","0":"Lincoln","CountryCode":"USA","1":"USA","Population":"225581","2":"225581"},{"Name":"Greensboro","0":"Greensboro","CountryCode":"USA","1":"USA","Population":"223891","2":"223891"},{"Name":"Plano","0":"Plano","CountryCode":"USA","1":"USA","Population":"222030","2":"222030"},{"Name":"Rochester","0":"Rochester","CountryCode":"USA","1":"USA","Population":"219773","2":"219773"},{"Name":"Glendale","0":"Glendale","CountryCode":"USA","1":"USA","Population":"218812","2":"218812"},{"Name":"Akron","0":"Akron","CountryCode":"USA","1":"USA","Population":"217074","2":"217074"},{"Name":"Garland","0":"Garland","CountryCode":"USA","1":"USA","Population":"215768","2":"215768"},{"Name":"Madison","0":"Madison","CountryCode":"USA","1":"USA","Population":"208054","2":"208054"},{"Name":"Fort Wayne","0":"Fort Wayne","CountryCode":"USA","1":"USA","Population":"205727","2":"205727"},{"Name":"Fremont","0":"Fremont","CountryCode":"USA","1":"USA","Population":"203413","2":"203413"},{"Name":"Scottsdale","0":"Scottsdale","CountryCode":"USA","1":"USA","Population":"202705","2":"202705"},{"Name":"Montgomery","0":"Montgomery","CountryCode":"USA","1":"USA","Population":"201568","2":"201568"},{"Name":"Shreveport","0":"Shreveport","CountryCode":"USA","1":"USA","Population":"200145","2":"200145"},{"Name":"Augusta-Richmond County","0":"Augusta-Richmond County","CountryCode":"USA","1":"USA","Population":"199775","2":"199775"},{"Name":"Lubbock","0":"Lubbock","CountryCode":"USA","1":"USA","Population":"199564","2":"199564"},{"Name":"Chesapeake","0":"Chesapeake","CountryCode":"USA","1":"USA","Population":"199184","2":"199184"},{"Name":"Mobile","0":"Mobile","CountryCode":"USA","1":"USA","Population":"198915","2":"198915"},{"Name":"Des Moines","0":"Des Moines","CountryCode":"USA","1":"USA","Population":"198682","2":"198682"},{"Name":"Grand Rapids","0":"Grand Rapids","CountryCode":"USA","1":"USA","Population":"197800","2":"197800"},{"Name":"Richmond","0":"Richmond","CountryCode":"USA","1":"USA","Population":"197790","2":"197790"},{"Name":"Yonkers","0":"Yonkers","CountryCode":"USA","1":"USA","Population":"196086","2":"196086"},{"Name":"Spokane","0":"Spokane","CountryCode":"USA","1":"USA","Population":"195629","2":"195629"},{"Name":"Glendale","0":"Glendale","CountryCode":"USA","1":"USA","Population":"194973","2":"194973"},{"Name":"Tacoma","0":"Tacoma","CountryCode":"USA","1":"USA","Population":"193556","2":"193556"},{"Name":"Irving","0":"Irving","CountryCode":"USA","1":"USA","Population":"191615","2":"191615"},{"Name":"Huntington Beach","0":"Huntington Beach","CountryCode":"USA","1":"USA","Population":"189594","2":"189594"},{"Name":"Modesto","0":"Modesto","CountryCode":"USA","1":"USA","Population":"188856","2":"188856"},{"Name":"Durham","0":"Durham","CountryCode":"USA","1":"USA","Population":"187035","2":"187035"},{"Name":"Columbus","0":"Columbus","CountryCode":"USA","1":"USA","Population":"186291","2":"186291"},{"Name":"Orlando","0":"Orlando","CountryCode":"USA","1":"USA","Population":"185951","2":"185951"},{"Name":"Boise City","0":"Boise City","CountryCode":"USA","1":"USA","Population":"185787","2":"185787"},{"Name":"Winston-Salem","0":"Winston-Salem","CountryCode":"USA","1":"USA","Population":"185776","2":"185776"},{"Name":"San Bernardino","0":"San Bernardino","CountryCode":"USA","1":"USA","Population":"185401","2":"185401"},{"Name":"Jackson","0":"Jackson","CountryCode":"USA","1":"USA","Population":"184256","2":"184256"},{"Name":"Little Rock","0":"Little Rock","CountryCode":"USA","1":"USA","Population":"183133","2":"183133"},{"Name":"Salt Lake City","0":"Salt Lake City","CountryCode":"USA","1":"USA","Population":"181743","2":"181743"},{"Name":"Reno","0":"Reno","CountryCode":"USA","1":"USA","Population":"180480","2":"180480"},{"Name":"Newport News","0":"Newport News","CountryCode":"USA","1":"USA","Population":"180150","2":"180150"},{"Name":"Chandler","0":"Chandler","CountryCode":"USA","1":"USA","Population":"176581","2":"176581"},{"Name":"Laredo","0":"Laredo","CountryCode":"USA","1":"USA","Population":"176576","2":"176576"},{"Name":"Henderson","0":"Henderson","CountryCode":"USA","1":"USA","Population":"175381","2":"175381"},{"Name":"Arlington","0":"Arlington","CountryCode":"USA","1":"USA","Population":"174838","2":"174838"},{"Name":"Knoxville","0":"Knoxville","CountryCode":"USA","1":"USA","Population":"173890","2":"173890"},{"Name":"Amarillo","0":"Amarillo","CountryCode":"USA","1":"USA","Population":"173627","2":"173627"},{"Name":"Providence","0":"Providence","CountryCode":"USA","1":"USA","Population":"173618","2":"173618"},{"Name":"Chula Vista","0":"Chula Vista","CountryCode":"USA","1":"USA","Population":"173556","2":"173556"},{"Name":"Worcester","0":"Worcester","CountryCode":"USA","1":"USA","Population":"172648","2":"172648"},{"Name":"Oxnard","0":"Oxnard","CountryCode":"USA","1":"USA","Population":"170358","2":"170358"},{"Name":"Dayton","0":"Dayton","CountryCode":"USA","1":"USA","Population":"166179","2":"166179"},{"Name":"Garden Grove","0":"Garden Grove","CountryCode":"USA","1":"USA","Population":"165196","2":"165196"},{"Name":"Oceanside","0":"Oceanside","CountryCode":"USA","1":"USA","Population":"161029","2":"161029"},{"Name":"Tempe","0":"Tempe","CountryCode":"USA","1":"USA","Population":"158625","2":"158625"},{"Name":"Huntsville","0":"Huntsville","CountryCode":"USA","1":"USA","Population":"158216","2":"158216"},{"Name":"Ontario","0":"Ontario","CountryCode":"USA","1":"USA","Population":"158007","2":"158007"},{"Name":"Chattanooga","0":"Chattanooga","CountryCode":"USA","1":"USA","Population":"155554","2":"155554"},{"Name":"Fort Lauderdale","0":"Fort Lauderdale","CountryCode":"USA","1":"USA","Population":"152397","2":"152397"},{"Name":"Springfield","0":"Springfield","CountryCode":"USA","1":"USA","Population":"152082","2":"152082"},{"Name":"Springfield","0":"Springfield","CountryCode":"USA","1":"USA","Population":"151580","2":"151580"},{"Name":"Santa Clarita","0":"Santa Clarita","CountryCode":"USA","1":"USA","Population":"151088","2":"151088"},{"Name":"Salinas","0":"Salinas","CountryCode":"USA","1":"USA","Population":"151060","2":"151060"},{"Name":"Tallahassee","0":"Tallahassee","CountryCode":"USA","1":"USA","Population":"150624","2":"150624"},{"Name":"Rockford","0":"Rockford","CountryCode":"USA","1":"USA","Population":"150115","2":"150115"},{"Name":"Pomona","0":"Pomona","CountryCode":"USA","1":"USA","Population":"149473","2":"149473"},{"Name":"Metairie","0":"Metairie","CountryCode":"USA","1":"USA","Population":"149428","2":"149428"},{"Name":"Paterson","0":"Paterson","CountryCode":"USA","1":"USA","Population":"149222","2":"149222"},{"Name":"Overland Park","0":"Overland Park","CountryCode":"USA","1":"USA","Population":"149080","2":"149080"},{"Name":"Santa Rosa","0":"Santa Rosa","CountryCode":"USA","1":"USA","Population":"147595","2":"147595"},{"Name":"Syracuse","0":"Syracuse","CountryCode":"USA","1":"USA","Population":"147306","2":"147306"},{"Name":"Kansas City","0":"Kansas City","CountryCode":"USA","1":"USA","Population":"146866","2":"146866"},{"Name":"Hampton","0":"Hampton","CountryCode":"USA","1":"USA","Population":"146437","2":"146437"},{"Name":"Lakewood","0":"Lakewood","CountryCode":"USA","1":"USA","Population":"144126","2":"144126"},{"Name":"Vancouver","0":"Vancouver","CountryCode":"USA","1":"USA","Population":"143560","2":"143560"},{"Name":"Irvine","0":"Irvine","CountryCode":"USA","1":"USA","Population":"143072","2":"143072"},{"Name":"Aurora","0":"Aurora","CountryCode":"USA","1":"USA","Population":"142990","2":"142990"},{"Name":"Moreno Valley","0":"Moreno Valley","CountryCode":"USA","1":"USA","Population":"142381","2":"142381"},{"Name":"Pasadena","0":"Pasadena","CountryCode":"USA","1":"USA","Population":"141674","2":"141674"},{"Name":"Hayward","0":"Hayward","CountryCode":"USA","1":"USA","Population":"140030","2":"140030"},{"Name":"Brownsville","0":"Brownsville","CountryCode":"USA","1":"USA","Population":"139722","2":"139722"},{"Name":"Bridgeport","0":"Bridgeport","CountryCode":"USA","1":"USA","Population":"139529","2":"139529"},{"Name":"Hollywood","0":"Hollywood","CountryCode":"USA","1":"USA","Population":"139357","2":"139357"},{"Name":"Warren","0":"Warren","CountryCode":"USA","1":"USA","Population":"138247","2":"138247"},{"Name":"Torrance","0":"Torrance","CountryCode":"USA","1":"USA","Population":"137946","2":"137946"},{"Name":"Eugene","0":"Eugene","CountryCode":"USA","1":"USA","Population":"137893","2":"137893"},{"Name":"Pembroke Pines","0":"Pembroke Pines","CountryCode":"USA","1":"USA","Population":"137427","2":"137427"},{"Name":"Salem","0":"Salem","CountryCode":"USA","1":"USA","Population":"136924","2":"136924"},{"Name":"Pasadena","0":"Pasadena","CountryCode":"USA","1":"USA","Population":"133936","2":"133936"},{"Name":"Escondido","0":"Escondido","CountryCode":"USA","1":"USA","Population":"133559","2":"133559"},{"Name":"Sunnyvale","0":"Sunnyvale","CountryCode":"USA","1":"USA","Population":"131760","2":"131760"},{"Name":"Savannah","0":"Savannah","CountryCode":"USA","1":"USA","Population":"131510","2":"131510"},{"Name":"Fontana","0":"Fontana","CountryCode":"USA","1":"USA","Population":"128929","2":"128929"},{"Name":"Orange","0":"Orange","CountryCode":"USA","1":"USA","Population":"128821","2":"128821"},{"Name":"Naperville","0":"Naperville","CountryCode":"USA","1":"USA","Population":"128358","2":"128358"},{"Name":"Alexandria","0":"Alexandria","CountryCode":"USA","1":"USA","Population":"128283","2":"128283"},{"Name":"Rancho Cucamonga","0":"Rancho Cucamonga","CountryCode":"USA","1":"USA","Population":"127743","2":"127743"},{"Name":"Grand Prairie","0":"Grand Prairie","CountryCode":"USA","1":"USA","Population":"127427","2":"127427"},{"Name":"East Los Angeles","0":"East Los Angeles","CountryCode":"USA","1":"USA","Population":"126379","2":"126379"},{"Name":"Fullerton","0":"Fullerton","CountryCode":"USA","1":"USA","Population":"126003","2":"126003"},{"Name":"Corona","0":"Corona","CountryCode":"USA","1":"USA","Population":"124966","2":"124966"},{"Name":"Flint","0":"Flint","CountryCode":"USA","1":"USA","Population":"124943","2":"124943"},{"Name":"Paradise","0":"Paradise","CountryCode":"USA","1":"USA","Population":"124682","2":"124682"},{"Name":"Mesquite","0":"Mesquite","CountryCode":"USA","1":"USA","Population":"124523","2":"124523"},{"Name":"Sterling Heights","0":"Sterling Heights","CountryCode":"USA","1":"USA","Population":"124471","2":"124471"},{"Name":"Sioux Falls","0":"Sioux Falls","CountryCode":"USA","1":"USA","Population":"123975","2":"123975"},{"Name":"New Haven","0":"New Haven","CountryCode":"USA","1":"USA","Population":"123626","2":"123626"},{"Name":"Topeka","0":"Topeka","CountryCode":"USA","1":"USA","Population":"122377","2":"122377"},{"Name":"Concord","0":"Concord","CountryCode":"USA","1":"USA","Population":"121780","2":"121780"},{"Name":"Evansville","0":"Evansville","CountryCode":"USA","1":"USA","Population":"121582","2":"121582"},{"Name":"Hartford","0":"Hartford","CountryCode":"USA","1":"USA","Population":"121578","2":"121578"},{"Name":"Fayetteville","0":"Fayetteville","CountryCode":"USA","1":"USA","Population":"121015","2":"121015"},{"Name":"Cedar Rapids","0":"Cedar Rapids","CountryCode":"USA","1":"USA","Population":"120758","2":"120758"},{"Name":"Elizabeth","0":"Elizabeth","CountryCode":"USA","1":"USA","Population":"120568","2":"120568"},{"Name":"Lansing","0":"Lansing","CountryCode":"USA","1":"USA","Population":"119128","2":"119128"},{"Name":"Lancaster","0":"Lancaster","CountryCode":"USA","1":"USA","Population":"118718","2":"118718"},{"Name":"Fort Collins","0":"Fort Collins","CountryCode":"USA","1":"USA","Population":"118652","2":"118652"},{"Name":"Coral Springs","0":"Coral Springs","CountryCode":"USA","1":"USA","Population":"117549","2":"117549"},{"Name":"Stamford","0":"Stamford","CountryCode":"USA","1":"USA","Population":"117083","2":"117083"},{"Name":"Thousand Oaks","0":"Thousand Oaks","CountryCode":"USA","1":"USA","Population":"117005","2":"117005"},{"Name":"Vallejo","0":"Vallejo","CountryCode":"USA","1":"USA","Population":"116760","2":"116760"},{"Name":"Palmdale","0":"Palmdale","CountryCode":"USA","1":"USA","Population":"116670","2":"116670"},{"Name":"Columbia","0":"Columbia","CountryCode":"USA","1":"USA","Population":"116278","2":"116278"},{"Name":"El Monte","0":"El Monte","CountryCode":"USA","1":"USA","Population":"115965","2":"115965"},{"Name":"Abilene","0":"Abilene","CountryCode":"USA","1":"USA","Population":"115930","2":"115930"},{"Name":"North Las Vegas","0":"North Las Vegas","CountryCode":"USA","1":"USA","Population":"115488","2":"115488"},{"Name":"Ann Arbor","0":"Ann Arbor","CountryCode":"USA","1":"USA","Population":"114024","2":"114024"},{"Name":"Beaumont","0":"Beaumont","CountryCode":"USA","1":"USA","Population":"113866","2":"113866"},{"Name":"Waco","0":"Waco","CountryCode":"USA","1":"USA","Population":"113726","2":"113726"},{"Name":"Macon","0":"Macon","CountryCode":"USA","1":"USA","Population":"113336","2":"113336"},{"Name":"Independence","0":"Independence","CountryCode":"USA","1":"USA","Population":"113288","2":"113288"},{"Name":"Peoria","0":"Peoria","CountryCode":"USA","1":"USA","Population":"112936","2":"112936"},{"Name":"Inglewood","0":"Inglewood","CountryCode":"USA","1":"USA","Population":"112580","2":"112580"},{"Name":"Springfield","0":"Springfield","CountryCode":"USA","1":"USA","Population":"111454","2":"111454"},{"Name":"Simi Valley","0":"Simi Valley","CountryCode":"USA","1":"USA","Population":"111351","2":"111351"},{"Name":"Lafayette","0":"Lafayette","CountryCode":"USA","1":"USA","Population":"110257","2":"110257"},{"Name":"Gilbert","0":"Gilbert","CountryCode":"USA","1":"USA","Population":"109697","2":"109697"},{"Name":"Carrollton","0":"Carrollton","CountryCode":"USA","1":"USA","Population":"109576","2":"109576"},{"Name":"Bellevue","0":"Bellevue","CountryCode":"USA","1":"USA","Population":"109569","2":"109569"},{"Name":"West Valley City","0":"West Valley City","CountryCode":"USA","1":"USA","Population":"108896","2":"108896"},{"Name":"Clarksville","0":"Clarksville","CountryCode":"USA","1":"USA","Population":"108787","2":"108787"},{"Name":"Costa Mesa","0":"Costa Mesa","CountryCode":"USA","1":"USA","Population":"108724","2":"108724"},{"Name":"Peoria","0":"Peoria","CountryCode":"USA","1":"USA","Population":"108364","2":"108364"},{"Name":"South Bend","0":"South Bend","CountryCode":"USA","1":"USA","Population":"107789","2":"107789"},{"Name":"Downey","0":"Downey","CountryCode":"USA","1":"USA","Population":"107323","2":"107323"},{"Name":"Waterbury","0":"Waterbury","CountryCode":"USA","1":"USA","Population":"107271","2":"107271"},{"Name":"Manchester","0":"Manchester","CountryCode":"USA","1":"USA","Population":"107006","2":"107006"},{"Name":"Allentown","0":"Allentown","CountryCode":"USA","1":"USA","Population":"106632","2":"106632"},{"Name":"McAllen","0":"McAllen","CountryCode":"USA","1":"USA","Population":"106414","2":"106414"},{"Name":"Joliet","0":"Joliet","CountryCode":"USA","1":"USA","Population":"106221","2":"106221"},{"Name":"Lowell","0":"Lowell","CountryCode":"USA","1":"USA","Population":"105167","2":"105167"},{"Name":"Provo","0":"Provo","CountryCode":"USA","1":"USA","Population":"105166","2":"105166"},{"Name":"West Covina","0":"West Covina","CountryCode":"USA","1":"USA","Population":"105080","2":"105080"},{"Name":"Wichita Falls","0":"Wichita Falls","CountryCode":"USA","1":"USA","Population":"104197","2":"104197"},{"Name":"Erie","0":"Erie","CountryCode":"USA","1":"USA","Population":"103717","2":"103717"},{"Name":"Daly City","0":"Daly City","CountryCode":"USA","1":"USA","Population":"103621","2":"103621"},{"Name":"Citrus Heights","0":"Citrus Heights","CountryCode":"USA","1":"USA","Population":"103455","2":"103455"},{"Name":"Norwalk","0":"Norwalk","CountryCode":"USA","1":"USA","Population":"103298","2":"103298"},{"Name":"Gary","0":"Gary","CountryCode":"USA","1":"USA","Population":"102746","2":"102746"},{"Name":"Berkeley","0":"Berkeley","CountryCode":"USA","1":"USA","Population":"102743","2":"102743"},{"Name":"Santa Clara","0":"Santa Clara","CountryCode":"USA","1":"USA","Population":"102361","2":"102361"},{"Name":"Green Bay","0":"Green Bay","CountryCode":"USA","1":"USA","Population":"102313","2":"102313"},{"Name":"Cape Coral","0":"Cape Coral","CountryCode":"USA","1":"USA","Population":"102286","2":"102286"},{"Name":"Arvada","0":"Arvada","CountryCode":"USA","1":"USA","Population":"102153","2":"102153"},{"Name":"Pueblo","0":"Pueblo","CountryCode":"USA","1":"USA","Population":"102121","2":"102121"},{"Name":"Sandy","0":"Sandy","CountryCode":"USA","1":"USA","Population":"101853","2":"101853"},{"Name":"Athens-Clarke County","0":"Athens-Clarke County","CountryCode":"USA","1":"USA","Population":"101489","2":"101489"},{"Name":"Cambridge","0":"Cambridge","CountryCode":"USA","1":"USA","Population":"101355","2":"101355"},{"Name":"Westminster","0":"Westminster","CountryCode":"USA","1":"USA","Population":"100940","2":"100940"},{"Name":"San Buenaventura","0":"San Buenaventura","CountryCode":"USA","1":"USA","Population":"100916","2":"100916"},{"Name":"Portsmouth","0":"Portsmouth","CountryCode":"USA","1":"USA","Population":"100565","2":"100565"},{"Name":"Livonia","0":"Livonia","CountryCode":"USA","1":"USA","Population":"100545","2":"100545"},{"Name":"Burbank","0":"Burbank","CountryCode":"USA","1":"USA","Population":"100316","2":"100316"},{"Name":"Clearwater","0":"Clearwater","CountryCode":"USA","1":"USA","Population":"99936","2":"99936"},{"Name":"Midland","0":"Midland","CountryCode":"USA","1":"USA","Population":"98293","2":"98293"},{"Name":"Davenport","0":"Davenport","CountryCode":"USA","1":"USA","Population":"98256","2":"98256"},{"Name":"Mission Viejo","0":"Mission Viejo","CountryCode":"USA","1":"USA","Population":"98049","2":"98049"},{"Name":"Miami Beach","0":"Miami Beach","CountryCode":"USA","1":"USA","Population":"97855","2":"97855"},{"Name":"Sunrise Manor","0":"Sunrise Manor","CountryCode":"USA","1":"USA","Population":"95362","2":"95362"},{"Name":"New Bedford","0":"New Bedford","CountryCode":"USA","1":"USA","Population":"94780","2":"94780"},{"Name":"El Cajon","0":"El Cajon","CountryCode":"USA","1":"USA","Population":"94578","2":"94578"},{"Name":"Norman","0":"Norman","CountryCode":"USA","1":"USA","Population":"94193","2":"94193"},{"Name":"Richmond","0":"Richmond","CountryCode":"USA","1":"USA","Population":"94100","2":"94100"},{"Name":"Albany","0":"Albany","CountryCode":"USA","1":"USA","Population":"93994","2":"93994"},{"Name":"Brockton","0":"Brockton","CountryCode":"USA","1":"USA","Population":"93653","2":"93653"},{"Name":"Roanoke","0":"Roanoke","CountryCode":"USA","1":"USA","Population":"93357","2":"93357"},{"Name":"Billings","0":"Billings","CountryCode":"USA","1":"USA","Population":"92988","2":"92988"},{"Name":"Compton","0":"Compton","CountryCode":"USA","1":"USA","Population":"92864","2":"92864"},{"Name":"Gainesville","0":"Gainesville","CountryCode":"USA","1":"USA","Population":"92291","2":"92291"},{"Name":"Fairfield","0":"Fairfield","CountryCode":"USA","1":"USA","Population":"92256","2":"92256"},{"Name":"Arden-Arcade","0":"Arden-Arcade","CountryCode":"USA","1":"USA","Population":"92040","2":"92040"},{"Name":"San Mateo","0":"San Mateo","CountryCode":"USA","1":"USA","Population":"91799","2":"91799"},{"Name":"Visalia","0":"Visalia","CountryCode":"USA","1":"USA","Population":"91762","2":"91762"},{"Name":"Boulder","0":"Boulder","CountryCode":"USA","1":"USA","Population":"91238","2":"91238"},{"Name":"Cary","0":"Cary","CountryCode":"USA","1":"USA","Population":"91213","2":"91213"},{"Name":"Santa Monica","0":"Santa Monica","CountryCode":"USA","1":"USA","Population":"91084","2":"91084"},{"Name":"Fall River","0":"Fall River","CountryCode":"USA","1":"USA","Population":"90555","2":"90555"},{"Name":"Kenosha","0":"Kenosha","CountryCode":"USA","1":"USA","Population":"89447","2":"89447"},{"Name":"Elgin","0":"Elgin","CountryCode":"USA","1":"USA","Population":"89408","2":"89408"},{"Name":"Odessa","0":"Odessa","CountryCode":"USA","1":"USA","Population":"89293","2":"89293"},{"Name":"Carson","0":"Carson","CountryCode":"USA","1":"USA","Population":"89089","2":"89089"},{"Name":"Charleston","0":"Charleston","CountryCode":"USA","1":"USA","Population":"89063","2":"89063"},{"Name":"Charlotte Amalie","0":"Charlotte Amalie","CountryCode":"VIR","1":"VIR","Population":"13000","2":"13000"},{"Name":"Harare","0":"Harare","CountryCode":"ZWE","1":"ZWE","Population":"1410000","2":"1410000"},{"Name":"Bulawayo","0":"Bulawayo","CountryCode":"ZWE","1":"ZWE","Population":"621742","2":"621742"},{"Name":"Chitungwiza","0":"Chitungwiza","CountryCode":"ZWE","1":"ZWE","Population":"274912","2":"274912"},{"Name":"Mount Darwin","0":"Mount Darwin","CountryCode":"ZWE","1":"ZWE","Population":"164362","2":"164362"},{"Name":"Mutare","0":"Mutare","CountryCode":"ZWE","1":"ZWE","Population":"131367","2":"131367"},{"Name":"Gweru","0":"Gweru","CountryCode":"ZWE","1":"ZWE","Population":"128037","2":"128037"},{"Name":"Gaza","0":"Gaza","CountryCode":"PSE","1":"PSE","Population":"353632","2":"353632"},{"Name":"Khan Yunis","0":"Khan Yunis","CountryCode":"PSE","1":"PSE","Population":"123175","2":"123175"},{"Name":"Hebron","0":"Hebron","CountryCode":"PSE","1":"PSE","Population":"119401","2":"119401"},{"Name":"Jabaliya","0":"Jabaliya","CountryCode":"PSE","1":"PSE","Population":"113901","2":"113901"},{"Name":"Nablus","0":"Nablus","CountryCode":"PSE","1":"PSE","Population":"100231","2":"100231"},{"Name":"Rafah","0":"Rafah","CountryCode":"PSE","1":"PSE","Population":"92020","2":"92020"}] \ No newline at end of file diff --git a/src/index.html b/src/index.html index 37ee08c..8c096f3 100644 --- a/src/index.html +++ b/src/index.html @@ -67,7 +67,7 @@ perPage: 10, } }, - propertyToValue: null, + cache: 5000, }; const options = { @@ -75,16 +75,17 @@ type: 'fadeIn', duration: 500 }, - cache: 5000, + fieldsToDisplay: [ 'Name', 'CountryCode', 'Population' ], + + propToMapAsValue: 'Name' }; - const d = { - data: [ + let data = { data: [ { "0": "Breda", "1": "NLD", @@ -182,14 +183,14 @@ "Population": "286000" } ] - } + }; const cbs = { onKeyup: (value, cb) => { console.log('cb.onKeyup ', value); console.log('I\'m doing scrappy stuffs with the data!'); - console.log('You want the data? There is!'); - cb(dataSet); + console.log('You want the data? There is!', data.data); + cb(data.data); }, onSelect: (value) => { console.log('cb.onSelect', value); @@ -200,13 +201,13 @@ }; // Way 1 - input.kompleter(d, options, cbs) + input.kompleter(options, data.data, cbs) - // Way 2 - // kompleter(input, options); + // Way 2.1 + // kompleter(input, d, cbs, options); - // Way 3 - // kompleter('auto-complete', options); + // Way 2.2 + // kompleter('auto-complete', d, cbs, options); }); diff --git a/src/js/jquery.kompleter.js b/src/js/jquery/jquery.kompleter.js similarity index 100% rename from src/js/jquery.kompleter.js rename to src/js/jquery/jquery.kompleter.js diff --git a/src/js/vanilla/kompleter.js b/src/js/vanilla/kompleter.js index 1210840..9981725 100644 --- a/src/js/vanilla/kompleter.js +++ b/src/js/vanilla/kompleter.js @@ -7,13 +7,26 @@ * @summary Kompleter.js is a library providing features dedicated to autocomplete fields. * * @author Steve Lebleu + * @see https://github.com/steve-lebleu/kompleter */ const kompleter = { /** - * @descrption Animations functions + * @descrption Animations functions. */ animations: { + + /** + * @description Apply a fadeIn animation effect + * + * @param {HTMLElement} element Target HTML element + * @param {String} display CSS3 display property value + * @param {Number} duration Duration of the animation in ms + * + * @returns {Void} + * + * @todo Manage duration + */ fadeIn: function(element, display = 'block', duration = 500) { element.style.opacity = 0; element.style.display = display; @@ -25,6 +38,17 @@ } })() }, + + /** + * @description Apply a fadeOut animation effect + * + * @param {HTMLElement} element Target HTML element + * @param {Number} duration Duration of the animation in ms. Default 500ms + * + * @returns {Void} + * + * @todo Manage duration + */ fadeOut: function(element, duration = 500) { element.style.opacity = 1; (function fade() { @@ -35,6 +59,15 @@ } })(); }, + + /** + * @description Apply a slideUp animation effect + * + * @param {HTMLElement} element Target HTML element + * @param {Number} duration Duration of the animation in ms. Default 500ms + * + * @returns {Void} + */ slideUp: function(element, duration = 500) { element.style.transitionProperty = 'height, margin, padding'; element.style.transitionDuration = duration + 'ms'; @@ -59,6 +92,15 @@ element.style.removeProperty('transition-property'); }, duration); }, + + /** + * @description Apply a slideDown animation effect + * + * @param {HTMLElement} element Target HTML element + * @param {Number} duration Duration of the animation in ms. Default 500ms + * + * @returns {Void} + */ slideDown: function(element, duration = 500) { element.style.removeProperty('display'); let display = window.getComputedStyle(element).display; @@ -90,127 +132,273 @@ }, /** - * @description Cache related methods + * @description Cache related functions. + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/Cache + * @see https://web.dev/articles/cache-api-quick-guide */ cache: { + + /** + * @description Retrieve the data stored in cache and dispatch event with + * + * @param {String} queryString URLSearchParams of the current request as string. IE q=term&limit=10&perPage=10&offset=0 + * + * @emits CustomEvent 'kompleter.request.done' { from, queryString, data } + * @emits CustomEvent 'kompleter.error' { error } + * + * @returns {Void} + */ emit: (queryString) => { window.caches.open('kompleter.cache') .then(cache => { cache.match(queryString) .then(async (data) => { - document.dispatchEvent(kompleter.events.requestDone({ fromCache: true, data: await data.json() })); + document.dispatchEvent(kompleter.events.requestDone({ from: kompleter.enums.origin.cache, queryString: null, data: await data.json() })); }); }) .catch(e => { - document.dispatchEvent(kompleter.events.error({ error: e })); + document.dispatchEvent(kompleter.events.error(e)); }); }, + + /** + * @description Indicate if the cache is active or not + * + * @returns {Boolean} Cache is active or not + */ isActive: () => { - return typeof kompleter.options.cache !== 'undefined'; + return typeof kompleter.options.dataSource.cache !== 'undefined'; }, + + /** + * @description Check the cache validity regarding the current request and the cache timelife + * + * @param {String} queryString The current request query string + * + * @returns {Promise} + */ isValid: async (queryString) => { - const uuid = kompleter.handlers.uuid(queryString); + const uuid = kompleter.utils.uuid(queryString); const cache = await window.caches.open('kompleter.cache'); + const response = await cache.match(uuid); if (!response) { return false; } const createdAt = await response.text(); - if (parseInt(createdAt + kompleter.options.cache, 10) <= Date.now()) { + if (parseInt(createdAt + kompleter.options.dataSource.cache, 10) <= Date.now()) { return false; } return true; }, - reset: () => {}, + + /** + * @description Push data into the cache + * + * @param {Object} args { queryString, data } + * + * @emits CustomEvent 'kompleter.error' { error } + * + * @returns {Void} + */ set: ({ queryString, data }) => { data = JSON.stringify(data); window.caches.open('kompleter.cache') .then(cache => { const headers = new Headers; headers.set('content-type', 'application/json'); - const uuid = kompleter.handlers.uuid(queryString); + const uuid = kompleter.utils.uuid(queryString); cache.put(uuid, new Response(Date.now(), { headers })); cache.put(queryString, new Response(data, { headers })); }) .catch(e => { - document.dispatchEvent(kompleter.events.error({ error: e })); + document.dispatchEvent(kompleter.events.error(e)); }); }, }, /** - * @description Client callbacks + * @description Client callbacks functions. */ callbacks: { - onError: (error) => {}, + + /** + * @description Callback function exposed to consummer to allow errors management. + * + * Default: null + * Signature: (error) => {} + * Trigger: error catched + * + * @param {Error} error The fired Error instance + */ + onError: null, + + /** + * @description Callback function exposed to consummer to allow dataset hydratation + * + * Default: (value, cb) => {} + * Signature: (value, cb) => {} + * Trigger: keyup event, after input value is greater or equals than the options.startQueryingFromChar value + * + * @param {String} value Current value of the input text to use for searching + * @param {Function} cb Callback function expecting data in parameter + */ onKeyup: (value, cb) => {}, + + /** + * @description Callback function exposed to consumer to allow choice management + * + * Default: (selected) => {} + * Signature: (selected) => {} + * Trigger: keyup + enter OR mouse click on a suggested item + * + * @param {*} selected The current selected item, as String|Object + */ onSelect: (selected) => {}, }, /** - * @description Custom events + * @description Local pseudo enums. + */ + enums: { + + /** + * @description Animation types + */ + animation: Object.freeze({ + fadeIn: 'fadeIn', + slideUp: 'slideUp' + }), + + /** + * @description Data origins + */ + origin: Object.freeze({ + api: 'api', + cache: 'cache', + local: 'local' + }) + }, + + /** + * @description Kompleter custom events getters functions. */ events: { - error: (detail = {}) => new CustomEvent('kompleter.error', { + + /** + * @description Get a CustomEvent instance for an event with name 'kompleter.error' + * + * @param {*} detail + * + * @returns {CustomEvent} + */ + error: (detail = { message: '', stack: '', name: ''}) => new CustomEvent('kompleter.error', { detail, bubble: true, cancelable: false, composed: false, }), + + /** + * @description Get a CustomEvent instance for an event with name 'kompleter.navigation.end' + * + * @param {*} detail + * + * @returns {CustomEvent} + */ navigationEnd: (detail = {}) => new CustomEvent('kompleter.navigation.end', { detail, bubble: true, cancelable: false, composed: false, }), + + /** + * @description Get a CustomEvent instance for an event with name 'kompleter.view.result.done' + * + * @param {*} detail + * + * @returns {CustomEvent} + */ renderResultDone: (detail = {}) => new CustomEvent('kompleter.view.result.done', { detail, bubble: true, cancelable: false, composed: false, }), - requestDone: (detail = {}) => new CustomEvent('kompleter.request.done', { + + /** + * @description Get a CustomEvent instance for an event with name 'kompleter.request.done' + * + * @param {*} detail + * + * @returns {CustomEvent} + */ + requestDone: (detail = { from: '', queryString: null, data: null }) => new CustomEvent('kompleter.request.done', { detail, bubble: true, cancelable: false, composed: false, }), + + /** + * @description Get a CustomEvent instance for an event with name 'kompleter.select.done' + * + * @param {Object} detail + * + * @returns {CustomEvent} + */ selectDone: (detail = {}) => new CustomEvent('kompleter.select.done', { detail, bubble: true, cancelable: false, composed: false, }), - warning: (detail = {}) => new CustomEvent('kompleter.warning', { - detail, - bubble: true, - cancelable: false, - composed: false, - }), }, /** - * @description Handlers of all religions + * @description Kompleter events handlers. */ handlers: { - build: function (element, attributes = []) { - const htmlElement = document.createElement(element); - attributes.forEach(attribute => { - htmlElement.setAttribute(Object.keys(attribute)[0], Object.values(attribute)[0]); - }); - return htmlElement; + + /** + * @description Manage the data hydration according to the current setup (cache, request or local data) + * + * @param {String} value Current input value + * + * @emits CustomEvent 'kompleter.request.done' { from, queryString, data } + * @emits CustomEvent 'kompleter.error' { error } + * + * @returns {Void} + */ + hydrate: async function(value) { + if (kompleter.options.dataSource.url) { + const qs = kompleter.utils.qs(kompleter.options.dataSource.queryString.keys, kompleter.options.dataSource.queryString.values, value); + kompleter.cache.isActive() && await kompleter.cache.isValid(qs) ? kompleter.cache.emit(qs) : kompleter.handlers.request(); + } else if (kompleter.props.dataSet) { + kompleter.callbacks.onKeyup(value, (data) => { + document.dispatchEvent(kompleter.events.requestDone({ from: kompleter.enums.origin.local, queryString: null, data })); + }); + } else { + document.dispatchEvent(kompleter.events.error(new Error('None of valid dataSource or dataSet found in props'))); + } }, + + /** + * @description Apply visual navigation into the suggestions set + * + * @param {Number} keyCode The current keyCode value + * + * @returns {Void} + */ navigate: function (keyCode) { - if (this.point(keyCode)) { - kompleter.view.focus('remove').focus('add'); - }; - }, - point: function(keyCode) { if (keyCode != 38 && keyCode != 40) { return false; } + console.log(kompleter.props.pointer) if(kompleter.props.pointer < -1 || kompleter.props.pointer > kompleter.htmlElements.suggestions.length - 1) { return false; } @@ -221,63 +409,101 @@ kompleter.props.pointer++; } - return true; - }, - qs: function(term = '') { - const qs = new URLSearchParams(); - Object.keys(kompleter.props.dataSource.queryString.keys) - .forEach(param => qs.append(kompleter.props.dataSource.queryString.keys[param], param === 'term' ? term : kompleter.props.dataSource.queryString.values[param])); - return qs.toString(); + kompleter.view.focus('remove'); + kompleter.view.focus('add'); }, + + /** + * @description Do HTTP request to fetch data + * + * @emits CustomEvent 'kompleter.request.done' { from, queryString, data } + * @emits CustomEvent 'kompleter.error' { error } + * + * @returns {Void} + */ request: function() { const headers = new Headers(); headers.append('content-type', 'application/x-www-form-urlencoded'); headers.append('method', 'GET'); - fetch(`${kompleter.props.dataSource.url}?${this.qs(kompleter.htmlElements.input.value)}`, headers) + const qs = kompleter.utils.qs(kompleter.options.dataSource.queryString.keys, kompleter.options.dataSource.queryString.values, kompleter.htmlElements.input.value); + + fetch(`${kompleter.options.dataSource.url}?${qs}`, headers) .then(result => result.json()) .then(data => { - document.dispatchEvent(kompleter.events.requestDone({ fromCache: false, queryString: this.qs(kompleter.htmlElements.input.value), data })); + document.dispatchEvent(kompleter.events.requestDone({ from: kompleter.enums.origin.api, queryString: qs, data })); }) .catch(e => { document.dispatchEvent(kompleter.events.error(e)); }); }, - select: function () { - const id = kompleter.htmlElements.focused.id || 0; - kompleter.htmlElements.input.value = kompleter.props.dataSource.data[id][0]; - kompleter.callbacks.onSelect(kompleter.props.dataSource.data[id]); + + /** + * @description Select a suggested item as user choice + * + * @param {Number} idx The index of the selected suggestion + * + * @emits CustomEvent 'kompleter.select.done' + * + * @returns {Void} + */ + select: function (idx = 0) { + kompleter.htmlElements.input.value = typeof kompleter.props.dataSet[idx] === 'object' ? kompleter.props.dataSet[idx][kompleter.options.propToMapAsValue] : kompleter.props.dataSet[idx]; + kompleter.callbacks.onSelect(kompleter.props.dataSet[idx]); document.dispatchEvent(kompleter.events.selectDone()); }, - uuid: function(string) { - return string.split('') - .map(v => v.charCodeAt(0)) - .reduce((a, v) => a + ((a<<7) + (a<<3)) ^ v) - .toString(16); - }, }, /** - * @description HTMLElements container + * @description Kompleter HTMLElements container. */ htmlElements: { + + /** + * @description HTMLElement in suggestions who's have the focus + */ focused: null, + + /** + * @description Main input text + */ input: null, + + /** + * @description HTMLElement results container + */ result: null, + + /** + * @description HTMLElements suggestions set according to the current input value + */ suggestions: [], + + /** + * @description HTMLElemnt identifed as first direct parent of the HTMLInputElement kompleter.htmlElements.input + */ wrapper: null, }, /** - * @description Events listeners + * @description Kompleter events listeners of all religions. */ listeners: { + + /** + * @description CustomEvent 'kompleter.error' listener + */ onError: () => { document.addEventListener('kompleter.error', (e) => { - console.error(`[kompleter] An error has occured -> ${e?.detail?.stack}`); - kompleter.callbacks.onError(e?.detail); + console.error(`[kompleter] An error has occured -> ${e.detail.stack}`); + kompleter.animations.fadeIn(kompleter.htmlElements.result); + kompleter.callbacks.onError && kompleter.callbacks.onError(e.detail); }); }, + + /** + * @description 'body.click' && kompleter.select.done listeners + */ onHide: () => { const body = document.getElementsByTagName('body')[0]; body.addEventListener('click', (e) => { @@ -289,15 +515,25 @@ document.dispatchEvent(kompleter.events.navigationEnd()); }); }, + + /** + * @description CustomEvent 'kompleter.navigation.end' listener + */ onNavigationEnd: () => { document.addEventListener('kompleter.navigation.end', (e) => { kompleter.props.pointer = -1; }); }, - onSelect: (className) => { - kompleter.htmlElements.suggestions = document.getElementsByClassName(className); + + /** + * @description HTMLElements.click listener + */ + onSelect: () => { + kompleter.htmlElements.suggestions = document.getElementsByClassName('item--result'); + if(typeof kompleter.htmlElements.suggestions !== 'undefined') { const numberOfSuggestions = kompleter.htmlElements.suggestions.length; + if(numberOfSuggestions) { for(let i = 0; i < numberOfSuggestions; i++) { ((i) => { @@ -310,16 +546,24 @@ } } }, + + /** + * @description CustomEvent 'kompleter.request.done' listener + */ onRequestDone: () => { - document.addEventListener('kompleter.request.done', (e) => { - kompleter.props.dataSource.data = e.detail.data; - if (!e.detail.fromCache) { + document.addEventListener('kompleter.request.done', async (e) => { + kompleter.props.dataSet = e.detail.data; + if (e.detail.from === kompleter.enums.origin.api && kompleter.cache.isActive() && await kompleter.cache.isValid()) { kompleter.cache.set(e.detail); } kompleter.view.results(e.detail.data); }); }, - onType: () => { + + /** + * @description 'input.keyup' listener + */ + onKeyup: () => { kompleter.htmlElements.input.addEventListener('keyup', async (e) => { if (kompleter.htmlElements.input.value.length < kompleter.options.startQueriyngFromChar) { return; @@ -329,148 +573,373 @@ switch (keyCode) { case 13: // Enter - kompleter.handlers.select(); + kompleter.handlers.select(kompleter.htmlElements.focused.id); break; case 38: // Up case 40: // Down kompleter.handlers.navigate(keyCode); break; default: - if ( kompleter.htmlElements.input.value !== kompleter.props.previousValue ) { - if (kompleter.props.dataSource.url) { - const qs = kompleter.handlers.qs(kompleter.htmlElements.input.value); - kompleter.cache.isActive() && await kompleter.cache.isValid(qs) ? kompleter.cache.emit(qs) : kompleter.handlers.request(); - } else if (kompleter.props.dataSource.data) { - kompleter.callbacks.onKeyup(kompleter.htmlElements.input.value, (data) => { - document.dispatchEvent(kompleter.events.requestDone({ fromCache: false, queryString: 'test', data })); // TODO: change fromCache by from: cache|local|request - }); - } else { - document.dispatchEvent(kompleter.events.error(new Error('None of url or data found on dataSource'))); - } + if (kompleter.htmlElements.input.value !== kompleter.props.previousValue) { + kompleter.handlers.hydrate(kompleter.htmlElements.input.value); } document.dispatchEvent(kompleter.events.navigationEnd()); break } }); }, + + /** + * @description CustomEvent 'kompleter.view.result.done' listener + * + * @todo Try to move the event listener into the event handler instead ot this listener + */ onViewResultDone: () => { document.addEventListener('kompleter.view.result.done', (e) => { kompleter.animations.fadeIn(kompleter.htmlElements.result); - kompleter.listeners.onSelect('item--result'); + kompleter.listeners.onSelect(); }); }, - onWarning: () => { - document.addEventListener('kompleter.warning', (e) => { - console.warn(e.detail.message); - }); - } }, /** - * @description Public options + * @description Kompleter public options. */ options: { + + _fieldsToDisplay: [], _maxResults: 10, _startQueriyngFromChar: 2, _propToMapAsValue: '', + + /** + * @description Describe the animation configuration to apply to show / hide the results + */ animation: { - type: 'fadeIn', - duration: 500 + + _type: null, _duration: 500, + + /** + * @description Type of animation between valid types + */ + get type() { + return this._type; + }, + + set type(value) { + const valid = Object.keys(kompleter.enums.animation); + if (!valid.includes(value)) { + throw new Error(`animation.type should be one of ${valid}`); + } + this._type = value; + }, + + /** + * @description Duration of some animation in ms. Default 500 + */ + get duration() { + return this._duration; + }, + + set duration(value) { + if (isNaN(parseInt(value, 10))) { + throw new Error(`animation.duration should be an integer`); + } + this._duration = value; + } }, - cache: 5000, - fieldsToDisplay: null, - maxResults: 10, - startQueriyngFromChar: 2, - }, - /** - * @description Internal properties - */ - props: { + /** + * @description Data source definition + */ dataSource: { - url: null, - data: null, - queryString: { + + _cache: null, _url: null, + + /** + * @description Time life of the cache when data is retrieved from an API call + */ + get cache() { + return this._cache; + }, + + set cache(value) { + if (isNaN(parseInt(value, 10))) { + throw new Error(`cache should be an integer`); + } + this._cache = value; + }, + + /** + * @description Endpoint URL to reach to retrieve data + */ + get url() { + return this._url; + }, + + set url(value) { + if (/^http|https/i.test(value) === false) { + throw new Error(`datasource.url must be a valid url (${options.dataSource?.url} given)`); + } + this._url = value; + }, + + /** + * @description Query string parameters mapping + */ + queryString: { + + /** + * @description Keys to use in query string to request the API + */ keys: { - term: 'q', - limit: 'limit', - offset: 'offset', - perPage: 'perPage', + + _term: 'q', _limit: 'limit', _offset: 'offset', _perPage: 'perPage', + + /** + * @decription URLSearchParam for the term (input.value) to search + */ + get term() { + return this._term; + }, + + set term(value) { + this._term = value; + }, + + /** + * @decription URLSearchParam for the limit results to return. Can be different of the maxResult + */ + get limit() { + return this._limit; + }, + + set limit(value) { + this._limit = value; + }, + + /** + * @decription URLSearchParam for the offset start value + */ + get offset() { + return this._offset; + }, + + set offset(value) { + this._offset = value; + }, + + /** + * @decription URLSearchParam for the per page results to return. + */ + get perPage() { + return this._perPage || 'perPage'; + }, + + set perPage(value) { + this._perPage = value; + } }, + + /** + * @description Values to use in query string to request the API + */ values: { - limit: 100, - offset: 0, - perPage: 10, + _limit: 100, _offset: 0, _perPage: 10, + + /** + * @decription URLSearchParam value for the limit key + */ + get limit() { + return this._limit; + }, + + set limit(value) { + this._limit = value; + }, + + /** + * @decription URLSearchParam value for the offset key + */ + get offset() { + return this._offset; + }, + + set offset(value) { + this._offset = value; + }, + + /** + * @decription URLSearchParam value for the perPage key + */ + get perPage() { + return this._perPage; + }, + + set perPage(value) { + this._perPage = value; + } } }, - propertyToValue: null, }, - pointer: -1, - previousValue: null, + + /** + * @description Fields to display in each suggestion item + */ + get fieldsToDisplay() { + return this._fieldsToDisplay; + }, + + set fieldsToDisplay(value) { + this._fieldsToDisplay = value; + }, + + /** + * @description Maximum number of results to display as suggestions (can be different thant the number of results availables) + * + * @deprecated + */ + get maxResults() { + return this._maxResults; + }, + + set maxResults(value) { + this._maxResults = value; + }, + + /** + * @description Input minimal value length before to fire research + * + * @deprecated + */ + get startQueriyngFromChar() { + return this._startQueriyngFromChar; + }, + + set startQueriyngFromChar(value) { + this._startQueriyngFromChar = value; + }, + + /** + * @description Property to map as value + */ + get propToMapAsValue() { + return this._propToMapAsValue; + }, + + set propToMapAsValue(value) { + this._propToMapAsValue = value; + }, + + /** + * @description Styles customization + * + * @todo + */ + styles: {} }, - validators: { - input: (input) => { - if (input instanceof HTMLInputElement === false && !document.getElementById(input)) { - throw new Error(`input should be an HTMLInputElement instance or a valid id identifier. None of boths given, ${input} received`); - } - return true; + /** + * @description Kompleter internal properties. + */ + props: { + + _dataSet: null, _pointer: null, _previousValue: null, + + /** + * @description Data storage + */ + get dataSet() { + return this._dataSet; }, - dataSource: (dataSource) => { - if (!dataSource?.url && !dataSource?.data) { - throw new Error(`None of dataSource.url or dataSource.data found on dataSource. Please provide a valid url or dataset.`); - } - if (dataSource?.url && /^http|https/i.test(dataSource.url) === false) { - throw new Error(`Valid URL is required as dataSource.url when you delegate querying. Please provide a valid url (${dataSource.url} given)`); + set dataSet(value) { + if (!Array.isArray(value)) { + throw new Error(`dataset must be an array (${value.toString()} given)`); } + this._dataSet = value; + }, - if (dataSource?.data && !Array.isArray(dataSource.data)) { - throw new Error(`Valid dataset is required as dataSource.data when you take ownsership on the data hydratation. Please provide a valid data set array (${dataSource.data} given)`); - } + /** + * @description Position of the pointer inside the suggestions + */ + get pointer() { + return this._pointer; + }, - if (dataSource?.queryString && !Object.keys(dataSource.queryString?.keys || []).length) { - dataSource.queryString.keys = kompleter.props.dataSource.queryString.keys; - document.dispatchEvent(kompleter.events.warning({ message: `dataSource.queryString.keys should be an object with a keys mapping, ${dataSource.queryString.keys.toString()} given. Fallback on default values` })); + set pointer(value) { + if (isNaN(parseInt(value, 10))) { + throw new Error(`pointer must be an integer (${value.toString()} given)`); } + this._pointer = value; + }, - if (dataSource?.queryString && !Object.keys(dataSource.queryString?.values || []).length) { - dataSource.queryString.values = kompleter.props.dataSource.queryString.values; - document.dispatchEvent(kompleter.events.warning({ message: `options.dataSource.queryString.values should be an object with a values mapping, ${dataSource.queryString.values.toString()} given. Fallback on default values` })); - } + /** + * @description Previous input value + */ + get previousValue() { + return this._previousValue; }, - options: (options) => { - if (options.animation) { - if (!['fadeIn', 'slideDown'].includes(options.animation.type)) { - options.animation.type = kompleter.options.animation.type; - document.dispatchEvent(kompleter.events.warning({ message: `options.animation.type should be one of ['fadeIn', 'slideDown'], ${options.animation.type.toString()} given. Fallback on default value 'fadeIn'.` })); - } - if (isNaN(parseInt(options.animation.duration))) { - options.animation.duration = kompleter.options.animation.duration; - document.dispatchEvent(kompleter.events.warning({ message: `options.animation.duration should be integer, ${options.animation.duration.toString()} given. Fallback on default value of 5000ms.` })); - } - } + set previousValue(value) { + this._previousValue = value; + }, + }, - if (options.cache && isNaN(parseInt(options.cache))) { - options.cache = kompleter.options.cache; - document.dispatchEvent(kompleter.events.warning({ message: `options.cache should be integer, ${options.cache.toString()} given. Fallback on default value of 5000ms.` })); - } + /** + * @description Kompleter params validation functions. + */ + validators: { - if (options.fieldsToDisplay && (!Array.isArray(options.fieldsToDisplay) || !options.fieldsToDisplay.length)) { - options.fieldsToDisplay = kompleter.options.fieldsToDisplay; - document.dispatchEvent(kompleter.events.warning({ message: `options.fieldsToDisplay should be array, ${options.fieldsToDisplay.toString()} given. Fallback on default value of 10` })); + /** + * @description Valid input as HTMLInputElement or DOM eligible + * + * @param {HTMLInputElement|String} input + * + * @throws {Error} + * + * @returns {Boolean} + */ + input: (input) => { + if (input instanceof HTMLInputElement === false && !document.getElementById(input)) { + throw new Error(`input should be an HTMLInputElement instance or a valid id identifier. None of boths given, ${input} received.`); } + return true; + }, - if (options.maxResults && isNaN(parseInt(options.maxResults))) { - options.maxResults = kompleter.options.maxResults; - document.dispatchEvent(kompleter.events.warning({ message: `options.maxResults should be integer, ${options.maxResults.toString()} given. Fallback on default value of 10` })); + /** + * @description Valid dataset format + * + * @param {Array} dataSet + * + * @returns {Boolean} + */ + dataSet: (dataSet) => { + console.log(dataSet) + if (dataSet && !Array.isArray(dataSet)) { + throw new Error(`Invalid dataset. Please provide a valid dataset or nothing if you provide a dataSource (${dataSet} given).`); } + return true; + }, - if (options.startQueriyngFromChar && isNaN(parseInt(options.startQueriyngFromChar))) { - options.startQueriyngFromChar = kompleter.options.startQueriyngFromChar; - document.dispatchEvent(kompleter.events.warning({ message: `options.startQueriyngFromChar should be integer, ${options.startQueriyngFromChar.toString()} given. Fallback on default value of 2` })); + /** + * @description Valid options + * + * @param {Object} options + * + * @returns {Boolean} + */ + options: (options) => { + if (options.dataSource && !options.dataSource?.url) { + throw new Error(`Invalid datasource.url. Please provide a valid datasource url (${options.dataSource?.url} given).`); } - return true; }, + + /** + * @description Valid callbacks + * + * @param {Object} callbacks + * + * @returns {Boolean} + */ callbacks: (callbacks) => { Object.keys(callbacks).forEach(key => { if (!Object.keys(kompleter.callbacks).includes(key)) { @@ -480,21 +949,79 @@ throw new Error(`callback function ${key} should be a function`); } }); + return true; } }, /** - * @description Rendering methods + * @description Kompleter utils functions. */ - view: { - error: function(e) { - kompleter.htmlElements.result.innerHTML = '
Error
'; - kompleter.animations.fadeIn(kompleter.htmlElements.result); + utils: { + + /** + * @description Build an HTML element and set his attributes + * + * @param {String} element HTML tag to build + * @param {Object[]} attributes Key / values pairs + * + * @returns {HTMLElement} + */ + build: function (element, attributes = []) { + const htmlElement = document.createElement(element); + attributes.forEach(attribute => { + htmlElement.setAttribute(Object.keys(attribute)[0], Object.values(attribute)[0]); + }); + return htmlElement; + }, + + /** + * @description Build a query string and returns it as String + * + * @param {Object} keys + * @param {Object} values + * @param {String} term + * + * @returns {String} The generated query string + */ + qs: function(keys, values, term = '') { + const qs = new URLSearchParams(); + Object.keys(kompleter.options.dataSource.queryString.keys) + .forEach(param => qs.append(kompleter.options.dataSource.queryString.keys[param], param === 'term' ? term : kompleter.options.dataSource.queryString.values[param])); + return qs.toString(); }, + + /** + * @description Get a simple uuid generated from given string + * + * @param {String} string The string to convert in uuid + * + * @returns {String} The generate uuid value + */ + uuid: function(string) { + return string.split('') + .map(v => v.charCodeAt(0)) + .reduce((a, v) => a + ((a<<7) + (a<<3)) ^ v) + .toString(16); + }, + }, + + /** + * @description Kompleter rendering functions. + */ + view: { + + /** + * @description Add / remove the focus on a HTMLElement + * + * @param {String} action add|remove + * + * @returns {Void} + */ focus: function(action) { if (!['add', 'remove'].includes(action)) { throw new Error('action should be one of ["add", "remove]: ' + action + ' given.'); } + switch (action) { case 'add': kompleter.htmlElements.focused = kompleter.htmlElements.suggestions[kompleter.props.pointer]; @@ -509,17 +1036,32 @@ }); break; } - return this; }, - results: function(e) { + + /** + * @description Display results according to the current input value / setup + * + * @emits CustomEvent 'kompleter.view.result.done' + * + * @returns {Void} + */ + results: function() { let html = ''; - if(kompleter.props.dataSource.data && kompleter.props.dataSource.data.length) { - const properties = kompleter.options.fieldsToDisplay.length; // TODO should be validated as 3 or 4 max + flexbox design + this works only on current dataSet ? - for(let i = 0; i < kompleter.props.dataSource.data.length && i <= kompleter.options.maxResults; i++) { - if(typeof kompleter.props.dataSource.data[i] !== 'undefined') { - html += `
`; - for(let j = 0; j < properties; j++) { - html += '' + kompleter.props.dataSource.data[i][j] + ''; + + if(kompleter.props.dataSet && kompleter.props.dataSet.length) { + for(let i = 0; i < kompleter.props.dataSet.length && i <= kompleter.options.maxResults; i++) { + if(typeof kompleter.props.dataSet[i] !== 'undefined') { + html += `
`; + switch (typeof kompleter.props.dataSet[i]) { + case 'string': + html += '' + kompleter.props.dataSet[i] + ''; + break; + case 'object': + let properties = Array.isArray(kompleter.options.fieldsToDisplay) && kompleter.options.fieldsToDisplay.length ? kompleter.options.fieldsToDisplay.slice(0, 3) : Object.keys(kompleter.props.dataSet[i]).slice(0, 3); + for(let j = 0; j < properties.length; j++) { + html += '' + kompleter.props.dataSet[i][properties[j]] + ''; + } + break; } html += '
'; } @@ -527,63 +1069,66 @@ } else { html = '
Not found
'; } + kompleter.htmlElements.result.innerHTML = html; + document.dispatchEvent(kompleter.events.renderResultDone()); } }, /** - * @description Kompleter entry point + * @description Kompleter entry point. + * + * @param {String|HTMLInputElement} input HTMLInputElement + * @param {Object} options Main options and configuration parameters + * @param {Array} dataSet Set of data to use if consummer take ownership on the data + * @param {Object} callbacks Callback functions { onKeyup, onSelect, onError } * - * @param {String|HTMLInputElement} input - * @param {Object} dataSource - * @param {Object} options - * @param {Object} callbacks { onKeyup, onSelect, onError } + * @returns {Void} */ - init: function(input, dataSource, options, callbacks) { + init: function(input, options, dataSet = [], callbacks = { onKeyup: (value, cb) => {}, onSelect: (selected) => {} }) { try { // 1. Validate kompleter.validators.input(input); - kompleter.validators.dataSource(dataSource); - options && kompleter.validators.options(options); - dataSource.data && kompleter.validators.callbacks(callbacks); + kompleter.validators.options(options) + kompleter.validators.dataSet(dataSet); + kompleter.validators.callbacks(callbacks); // 2. Assign - kompleter.props.dataSource = Object.assign(kompleter.props.dataSource, dataSource); - if(options) { kompleter.options = Object.assign(kompleter.options, options); } - if (dataSource.data) { + if (dataSet) { + kompleter.props.dataSet = dataSet; + } + + if (callbacks) { kompleter.callbacks = Object.assign(kompleter.callbacks, callbacks); } - // 3. Build HTML - - kompleter.htmlElements.wrapper = input.parentElement; + // 3. Build DOM kompleter.htmlElements.input = input instanceof HTMLInputElement ? input : document.getElementById(input); - kompleter.htmlElements.result = kompleter.handlers.build('div', [ { id: 'result' }, { className: 'form--lightsearch__result' } ]); + kompleter.htmlElements.result = kompleter.utils.build('div', [ { id: 'kpl-result' }, { class: 'form--search__result' } ]); + kompleter.htmlElements.wrapper = kompleter.htmlElements.input.parentElement; + kompleter.htmlElements.wrapper.setAttribute('class', 'kompleter'); kompleter.htmlElements.wrapper.appendChild(kompleter.htmlElements.result); // 4. Listeners kompleter.listeners.onError(); kompleter.listeners.onHide(); + kompleter.listeners.onKeyup(); kompleter.listeners.onNavigationEnd(); - kompleter.listeners.onType(); kompleter.listeners.onRequestDone(); kompleter.listeners.onViewResultDone(); - kompleter.listeners.onWarning(); - - console.log('Kompleter', kompleter); } catch(e) { console.error(e); } @@ -592,8 +1137,8 @@ window.kompleter = kompleter.init; - window.HTMLInputElement.prototype.kompleter = function(dataSource, options, callbacks) { - window.kompleter(this, dataSource, options, callbacks); - } + window.HTMLInputElement.prototype.kompleter = function(config, dataSet, callbacks) { + window.kompleter(this, config, dataSet, callbacks); + }; })(window); \ No newline at end of file diff --git a/src/sass/kompleter.scss b/src/sass/kompleter.scss index f77047d..b24fe2e 100755 --- a/src/sass/kompleter.scss +++ b/src/sass/kompleter.scss @@ -3,99 +3,102 @@ @import 'variables'; /* Module code */ -.form--search { - margin: 0; - padding: 0; -} -.form--light-search { - width: 30%; - position: relative; - margin: 0 auto; - @media (max-width: 480px) { - width: 90%; +.kompleter { + .form--search { + margin: 0; + padding: 0; } -} - -.input--search, -.item--result { - font-family: $font-base; - font-size: 100%; -} - -.input--search { - display: block; - width: 100%; - min-width: 240px; - max-width: 600px; - height: auto; - font-size: 1.5rem; - line-height: 1.5; - color: $color_9; - padding: 15px 10px; - border: none; - background: $color_2; - margin: 0 auto; - box-sizing: border-box; - &:focus { - border: none; - outline: none; - } -} - -::placeholder { - color: $color_5; -} - -.form--search__result { - position: absolute; - margin: 0; - width: 100%; -} - -/* Block one item result */ -.item--result { - width: 100%; - background: $color_2; - border-bottom: 1px dashed $color_1; - border-left: none; - border-right: none; - padding: 15px; - color: $color_0; - box-sizing: border-box; - &.last, &:last-child { - border-bottom: none; - } - &:hover, &.focus { - cursor: pointer; - color: $color_8; - background: $color_11; - @include transition(0.2s ease-in-out); - & .data-1, & .data-2 { - color: $color_3; + + .form--light-search { + width: 30%; + position: relative; + margin: 0 auto; + @media (max-width: 480px) { + width: 90%; } } - & .data-0 { - float: left; - color: $color_8; - margin: 0 0 3px 0; - font-weight: 600; + + .input--search, + .item--result { + font-family: $font-base; + font-size: 100%; } - & .data-1, & .data-2 { + + .input--search { display: block; - color: $color_5; - font-weight: normal; + width: 100%; + min-width: 240px; + max-width: 600px; + height: auto; + font-size: 1.5rem; + line-height: 1.5; + color: $color_9; + padding: 15px 10px; + border: none; + background: $color_2; + margin: 0 auto; + box-sizing: border-box; + &:focus { + border: none; + outline: none; + } } - & .data-1 { - float: right; + + ::placeholder { + color: $color_5; } - & .data-2 { - clear: both; + + .form--search__result { + position: absolute; + margin: 0; + width: 100%; } - & span:nth-child(n+4) { - display: block; + + /* Block one item result */ + .item--result { width: 100%; - margin: 5px 0; - font-size: 0.8em; + background: $color_2; + border-bottom: 1px dashed $color_1; + border-left: none; + border-right: none; + padding: 15px; + color: $color_0; + box-sizing: border-box; + &.last, &:last-child { + border-bottom: none; + } + &:hover, &.focus { + cursor: pointer; + color: $color_8; + background: $color_11; + @include transition(0.2s ease-in-out); + & .data-1, & .data-2 { + color: $color_3; + } + } + & .data-0 { + float: left; + color: $color_8; + margin: 0 0 3px 0; + font-weight: 600; + } + & .data-1, & .data-2 { + display: block; + color: $color_5; + font-weight: normal; + } + & .data-1 { + float: right; + } + & .data-2 { + clear: both; + } + & span:nth-child(n+4) { + display: block; + width: 100%; + margin: 5px 0; + font-size: 0.8em; + } } } \ No newline at end of file From b4dee8cfd8d3cc7cf7de71a79d860a420790f2b4 Mon Sep 17 00:00:00 2001 From: Steve Date: Fri, 8 Mar 2024 19:27:48 +0100 Subject: [PATCH 09/48] chore: partial static website design --- src/index.html | 31 +++++++++-- src/js/vanilla/kompleter.js | 4 +- src/sass/_variables.scss | 37 +++++++------ src/sass/kompleter.scss | 106 +++++++++++++++++++++++++++--------- 4 files changed, 129 insertions(+), 49 deletions(-) diff --git a/src/index.html b/src/index.html index 8c096f3..2ae1fa4 100644 --- a/src/index.html +++ b/src/index.html @@ -3,21 +3,22 @@ - jQuery auto-complete plugin - Kompleter.js + Auto-complete plugin - Kompleter.js + @@ -26,7 +27,20 @@ -
+
+

Documentation

+ + + + +
+ +
+

Kømpletr

+ 10kb of vanilla lightweight to add highly featured and eco friendly autocomplete on your pages. +
+ + + + diff --git a/src/js/vanilla/kompleter.js b/src/js/vanilla/kompleter.js index 5fa9aa2..c9ddbd3 100644 --- a/src/js/vanilla/kompleter.js +++ b/src/js/vanilla/kompleter.js @@ -1,15 +1,15 @@ ((window) => { - if (window.kompleter) { - throw new Error('window.kompleter already exists !'); + if (window.kompltetr) { + throw new Error('window.kompltetr already exists !'); } /** - * @summary Kompleter.js is a library providing features dedicated to autocomplete fields. + * @summary Kømpletr.js is a library providing features dedicated to autocomplete fields. * * @author Steve Lebleu - * @see https://github.com/steve-lebleu/kompleter + * @see https://github.com/steve-lebleu/kompletr */ - const kompleter = { + const kompltetr = { /** * @descrption Animations functions. @@ -146,21 +146,21 @@ * * @param {String} queryString URLSearchParams of the current request as string. IE q=term&limit=10&perPage=10&offset=0 * - * @emits CustomEvent 'kompleter.request.done' { from, queryString, data } - * @emits CustomEvent 'kompleter.error' { error } + * @emits CustomEvent 'kompltetr.request.done' { from, queryString, data } + * @emits CustomEvent 'kompltetr.error' { error } * * @returns {Void} */ emit: (queryString) => { - window.caches.open('kompleter.cache') + window.caches.open('kompltetr.cache') .then(cache => { cache.match(queryString) .then(async (data) => { - document.dispatchEvent(kompleter.events.requestDone({ from: kompleter.enums.origin.cache, queryString: null, data: await data.json() })); + document.dispatchEvent(kompltetr.events.requestDone({ from: kompltetr.enums.origin.cache, queryString: null, data: await data.json() })); }); }) .catch(e => { - document.dispatchEvent(kompleter.events.error(e)); + document.dispatchEvent(kompltetr.events.error(e)); }); }, @@ -170,7 +170,7 @@ * @returns {Boolean} Cache is active or not */ isActive: () => { - return typeof kompleter.options.cache !== 'undefined'; + return typeof kompltetr.options.cache !== 'undefined'; }, /** @@ -181,8 +181,8 @@ * @returns {Promise} */ isValid: async (queryString) => { - const uuid = kompleter.utils.uuid(queryString); - const cache = await window.caches.open('kompleter.cache'); + const uuid = kompltetr.utils.uuid(queryString); + const cache = await window.caches.open('kompltetr.cache'); const response = await cache.match(uuid); if (!response) { @@ -190,7 +190,7 @@ } const createdAt = await response.text(); - if (parseInt(createdAt + kompleter.options.cache, 10) <= Date.now()) { + if (parseInt(createdAt + kompltetr.options.cache, 10) <= Date.now()) { return false; } return true; @@ -201,22 +201,22 @@ * * @param {Object} args { queryString, data } * - * @emits CustomEvent 'kompleter.error' { error } + * @emits CustomEvent 'kompltetr.error' { error } * * @returns {Void} */ set: ({ queryString, data }) => { data = JSON.stringify(data); - window.caches.open('kompleter.cache') + window.caches.open('kompltetr.cache') .then(cache => { const headers = new Headers; headers.set('content-type', 'application/json'); - const uuid = kompleter.utils.uuid(queryString); + const uuid = kompltetr.utils.uuid(queryString); cache.put(uuid, new Response(Date.now(), { headers })); cache.put(queryString, new Response(data, { headers })); }) .catch(e => { - document.dispatchEvent(kompleter.events.error(e)); + document.dispatchEvent(kompltetr.events.error(e)); }); }, }, @@ -288,18 +288,18 @@ }, /** - * @description Kompleter custom events getters functions. + * @description kompltetr custom events getters functions. */ events: { /** - * @description Get a CustomEvent instance for an event with name 'kompleter.error' + * @description Get a CustomEvent instance for an event with name 'kompltetr.error' * * @param {*} detail * * @returns {CustomEvent} */ - error: (detail = { message: '', stack: '', name: ''}) => new CustomEvent('kompleter.error', { + error: (detail = { message: '', stack: '', name: ''}) => new CustomEvent('kompltetr.error', { detail, bubble: true, cancelable: false, @@ -307,13 +307,13 @@ }), /** - * @description Get a CustomEvent instance for an event with name 'kompleter.navigation.end' + * @description Get a CustomEvent instance for an event with name 'kompltetr.navigation.end' * * @param {*} detail * * @returns {CustomEvent} */ - navigationEnd: (detail = {}) => new CustomEvent('kompleter.navigation.end', { + navigationEnd: (detail = {}) => new CustomEvent('kompltetr.navigation.end', { detail, bubble: true, cancelable: false, @@ -321,13 +321,13 @@ }), /** - * @description Get a CustomEvent instance for an event with name 'kompleter.view.result.done' + * @description Get a CustomEvent instance for an event with name 'kompltetr.view.result.done' * * @param {*} detail * * @returns {CustomEvent} */ - renderResultDone: (detail = {}) => new CustomEvent('kompleter.view.result.done', { + renderResultDone: (detail = {}) => new CustomEvent('kompltetr.view.result.done', { detail, bubble: true, cancelable: false, @@ -335,13 +335,13 @@ }), /** - * @description Get a CustomEvent instance for an event with name 'kompleter.request.done' + * @description Get a CustomEvent instance for an event with name 'kompltetr.request.done' * * @param {*} detail * * @returns {CustomEvent} */ - requestDone: (detail = { from: '', queryString: null, data: null }) => new CustomEvent('kompleter.request.done', { + requestDone: (detail = { from: '', queryString: null, data: null }) => new CustomEvent('kompltetr.request.done', { detail, bubble: true, cancelable: false, @@ -349,13 +349,13 @@ }), /** - * @description Get a CustomEvent instance for an event with name 'kompleter.select.done' + * @description Get a CustomEvent instance for an event with name 'kompltetr.select.done' * * @param {Object} detail * * @returns {CustomEvent} */ - selectDone: (detail = {}) => new CustomEvent('kompleter.select.done', { + selectDone: (detail = {}) => new CustomEvent('kompltetr.select.done', { detail, bubble: true, cancelable: false, @@ -364,7 +364,7 @@ }, /** - * @description Kompleter events handlers. + * @description kompltetr events handlers. */ handlers: { @@ -377,8 +377,8 @@ */ filter: function (string, records) { return records.filter(record => { - const value = typeof record === 'string' ? record : record[kompleter.options.propToMapAsValue]; - if (kompleter.options.filterOn === 'prefix') { + const value = typeof record === 'string' ? record : record[kompltetr.options.propToMapAsValue]; + if (kompltetr.options.filterOn === 'prefix') { return value.toLowerCase().lastIndexOf(string.toLowerCase(), 0) === 0; } return value.toLowerCase().lastIndexOf(string.toLowerCase()) !== -1; @@ -390,8 +390,8 @@ * * @param {String} value Current input value * - * @emits CustomEvent 'kompleter.request.done' { from, queryString, data } - * @emits CustomEvent 'kompleter.error' { error } + * @emits CustomEvent 'kompltetr.request.done' { from, queryString, data } + * @emits CustomEvent 'kompltetr.error' { error } * * @returns {Void} */ @@ -400,16 +400,16 @@ // TODO manage cache -> if data available in the cache, get it from there // TODO udpate requestDOne to take care of the new signature of the detail, without queryString, but just base on the search term // TODO origin is not longer valid arg, querystring no more - if (kompleter.callbacks.onKeyup) { - kompleter.callbacks.onKeyup(value, (data) => { - document.dispatchEvent(kompleter.events.requestDone({ from: kompleter.enums.origin.local, queryString: null, data })); + if (kompltetr.callbacks.onKeyup) { + kompltetr.callbacks.onKeyup(value, (data) => { + document.dispatchEvent(kompltetr.events.requestDone({ from: kompltetr.enums.origin.local, queryString: null, data })); }); } else { - const data = kompleter.handlers.filter(value, kompleter.props.data); - document.dispatchEvent(kompleter.events.requestDone({ from: kompleter.enums.origin.local, queryString: null, data })); + const data = kompltetr.handlers.filter(value, kompltetr.props.data); + document.dispatchEvent(kompltetr.events.requestDone({ from: kompltetr.enums.origin.local, queryString: null, data })); } } catch(e) { - document.dispatchEvent(kompleter.events.error(e)); + document.dispatchEvent(kompltetr.events.error(e)); } }, @@ -425,18 +425,18 @@ return false; } - if(kompleter.props.pointer < -1 || kompleter.props.pointer > kompleter.htmlElements.suggestions.length - 1) { + if(kompltetr.props.pointer < -1 || kompltetr.props.pointer > kompltetr.htmlElements.suggestions.length - 1) { return false; } - if (keyCode === 38 && kompleter.props.pointer >= -1) { - kompleter.props.pointer--; - } else if (keyCode === 40 && kompleter.props.pointer < kompleter.htmlElements.suggestions.length - 1) { - kompleter.props.pointer++; + if (keyCode === 38 && kompltetr.props.pointer >= -1) { + kompltetr.props.pointer--; + } else if (keyCode === 40 && kompltetr.props.pointer < kompltetr.htmlElements.suggestions.length - 1) { + kompltetr.props.pointer++; } - kompleter.view.focus('remove'); - kompleter.view.focus('add'); + kompltetr.view.focus('remove'); + kompltetr.view.focus('add'); }, /** @@ -444,19 +444,19 @@ * * @param {Number} idx The index of the selected suggestion * - * @emits CustomEvent 'kompleter.select.done' + * @emits CustomEvent 'kompltetr.select.done' * * @returns {Void} */ select: function (idx = 0) { - kompleter.htmlElements.input.value = typeof kompleter.props.data[idx] === 'object' ? kompleter.props.data[idx][kompleter.options.propToMapAsValue] : kompleter.props.data[idx]; - kompleter.callbacks.onSelect(kompleter.props.data[idx]); - document.dispatchEvent(kompleter.events.selectDone()); + kompltetr.htmlElements.input.value = typeof kompltetr.props.data[idx] === 'object' ? kompltetr.props.data[idx][kompltetr.options.propToMapAsValue] : kompltetr.props.data[idx]; + kompltetr.callbacks.onSelect(kompltetr.props.data[idx]); + document.dispatchEvent(kompltetr.events.selectDone()); }, }, /** - * @description Kompleter HTMLElements container. + * @description kompltetr HTMLElements container. */ htmlElements: { @@ -481,48 +481,48 @@ suggestions: [], /** - * @description HTMLElemnt identifed as first direct parent of the HTMLInputElement kompleter.htmlElements.input + * @description HTMLElemnt identifed as first direct parent of the HTMLInputElement kompltetr.htmlElements.input */ wrapper: null, }, /** - * @description Kompleter events listeners of all religions. + * @description kompltetr events listeners of all religions. */ listeners: { /** - * @description CustomEvent 'kompleter.error' listener + * @description CustomEvent 'kompltetr.error' listener */ onError: () => { - document.addEventListener('kompleter.error', (e) => { - console.error(`[kompleter] An error has occured -> ${e.detail.stack}`); - kompleter.animations.fadeIn(kompleter.htmlElements.result); - kompleter.callbacks.onError && kompleter.callbacks.onError(e.detail); + document.addEventListener('kompltetr.error', (e) => { + console.error(`[kompltetr] An error has occured -> ${e.detail.stack}`); + kompltetr.animations.fadeIn(kompltetr.htmlElements.result); + kompltetr.callbacks.onError && kompltetr.callbacks.onError(e.detail); }); }, /** - * @description 'body.click' && kompleter.select.done listeners + * @description 'body.click' && kompltetr.select.done listeners */ onHide: () => { const body = document.getElementsByTagName('body')[0]; body.addEventListener('click', (e) => { - kompleter.animations.fadeOut(kompleter.htmlElements.result); - document.dispatchEvent(kompleter.events.navigationEnd()); + kompltetr.animations.fadeOut(kompltetr.htmlElements.result); + document.dispatchEvent(kompltetr.events.navigationEnd()); }); - document.addEventListener('kompleter.select.done', (e) => { - kompleter.animations.fadeOut(kompleter.htmlElements.result); - document.dispatchEvent(kompleter.events.navigationEnd()); + document.addEventListener('kompltetr.select.done', (e) => { + kompltetr.animations.fadeOut(kompltetr.htmlElements.result); + document.dispatchEvent(kompltetr.events.navigationEnd()); }); }, /** - * @description CustomEvent 'kompleter.navigation.end' listener + * @description CustomEvent 'kompltetr.navigation.end' listener */ onNavigationEnd: () => { - document.addEventListener('kompleter.navigation.end', (e) => { - kompleter.props.pointer = -1; + document.addEventListener('kompltetr.navigation.end', (e) => { + kompltetr.props.pointer = -1; }); }, @@ -530,17 +530,17 @@ * @description HTMLElements.click listener */ onSelect: () => { - kompleter.htmlElements.suggestions = document.getElementsByClassName('item--result'); + kompltetr.htmlElements.suggestions = document.getElementsByClassName('item--result'); - if(typeof kompleter.htmlElements.suggestions !== 'undefined') { - const numberOfSuggestions = kompleter.htmlElements.suggestions.length; + if(typeof kompltetr.htmlElements.suggestions !== 'undefined') { + const numberOfSuggestions = kompltetr.htmlElements.suggestions.length; if(numberOfSuggestions) { for(let i = 0; i < numberOfSuggestions; i++) { ((i) => { - return kompleter.htmlElements.suggestions[i].addEventListener('click', (e) => { - kompleter.htmlElements.focused = kompleter.htmlElements.suggestions[i]; - kompleter.handlers.select(); + return kompltetr.htmlElements.suggestions[i].addEventListener('click', (e) => { + kompltetr.htmlElements.focused = kompltetr.htmlElements.suggestions[i]; + kompltetr.handlers.select(); }); })(i) } @@ -549,15 +549,15 @@ }, /** - * @description CustomEvent 'kompleter.request.done' listener + * @description CustomEvent 'kompltetr.request.done' listener */ onRequestDone: () => { - document.addEventListener('kompleter.request.done', async (e) => { - kompleter.props.data = e.detail.data; - if (kompleter.cache.isActive() && await kompleter.cache.isValid()) { - kompleter.cache.set(e.detail); + document.addEventListener('kompltetr.request.done', async (e) => { + kompltetr.props.data = e.detail.data; + if (kompltetr.cache.isActive() && await kompltetr.cache.isValid()) { + kompltetr.cache.set(e.detail); } - kompleter.view.results(e.detail.data); + kompltetr.view.results(e.detail.data); }); }, @@ -565,8 +565,8 @@ * @description 'input.keyup' listener */ onKeyup: () => { - kompleter.htmlElements.input.addEventListener('keyup', async (e) => { - if (kompleter.htmlElements.input.value.length < kompleter.options.startQueriyngFromChar) { + kompltetr.htmlElements.input.addEventListener('keyup', async (e) => { + if (kompltetr.htmlElements.input.value.length < kompltetr.options.startQueriyngFromChar) { return; } @@ -574,37 +574,37 @@ switch (keyCode) { case 13: // Enter - kompleter.handlers.select(kompleter.htmlElements.focused.id); + kompltetr.handlers.select(kompltetr.htmlElements.focused.id); break; case 38: // Up case 40: // Down - kompleter.handlers.navigate(keyCode); + kompltetr.handlers.navigate(keyCode); break; default: - if (kompleter.htmlElements.input.value !== kompleter.props.previousValue) { - kompleter.handlers.hydrate(kompleter.htmlElements.input.value); + if (kompltetr.htmlElements.input.value !== kompltetr.props.previousValue) { + kompltetr.handlers.hydrate(kompltetr.htmlElements.input.value); } - document.dispatchEvent(kompleter.events.navigationEnd()); + document.dispatchEvent(kompltetr.events.navigationEnd()); break } }); }, /** - * @description CustomEvent 'kompleter.view.result.done' listener + * @description CustomEvent 'kompltetr.view.result.done' listener * * @todo Try to move the event listener into the event handler instead ot this listener */ onViewResultDone: () => { - document.addEventListener('kompleter.view.result.done', (e) => { - kompleter.animations.fadeIn(kompleter.htmlElements.result); - kompleter.listeners.onSelect(); + document.addEventListener('kompltetr.view.result.done', (e) => { + kompltetr.animations.fadeIn(kompltetr.htmlElements.result); + kompltetr.listeners.onSelect(); }); }, }, /** - * @description Kompleter public options. + * @description kompltetr public options. */ options: { @@ -632,7 +632,7 @@ }, set type(value) { - const valid = Object.keys(kompleter.enums.animation); + const valid = Object.keys(kompltetr.enums.animation); if (!valid.includes(value)) { throw new Error(`animation.type should be one of ${valid}`); } @@ -753,7 +753,7 @@ }, /** - * @description Kompleter internal properties. + * @description kompltetr internal properties. */ props: { @@ -800,7 +800,7 @@ }, /** - * @description Kompleter params validation functions. + * @description kompltetr params validation functions. */ validators: { @@ -843,7 +843,7 @@ */ callbacks: (callbacks) => { Object.keys(callbacks).forEach(key => { - if (!Object.keys(kompleter.callbacks).includes(key)) { + if (!Object.keys(kompltetr.callbacks).includes(key)) { throw new Error(`Unrecognized callback function ${key}. Please use onKeyup, onSelect and onError as valid callbacks functions.`); } if (callbacks[key] && typeof callbacks[key] !== 'function') { @@ -855,7 +855,7 @@ }, /** - * @description Kompleter utils functions. + * @description kompltetr utils functions. */ utils: { @@ -891,7 +891,7 @@ }, /** - * @description Kompleter rendering functions. + * @description kompltetr rendering functions. */ view: { @@ -909,12 +909,12 @@ switch (action) { case 'add': - kompleter.htmlElements.focused = kompleter.htmlElements.suggestions[kompleter.props.pointer]; - kompleter.htmlElements.suggestions[kompleter.props.pointer].className += ' focus'; + kompltetr.htmlElements.focused = kompltetr.htmlElements.suggestions[kompltetr.props.pointer]; + kompltetr.htmlElements.suggestions[kompltetr.props.pointer].className += ' focus'; break; case 'remove': - kompleter.htmlElements.focused = null; - Array.from(kompleter.htmlElements.suggestions).forEach(suggestion => { + kompltetr.htmlElements.focused = null; + Array.from(kompltetr.htmlElements.suggestions).forEach(suggestion => { ((suggestion) => { suggestion.className = 'item--result'; })(suggestion) @@ -926,25 +926,25 @@ /** * @description Display results according to the current input value / setup * - * @emits CustomEvent 'kompleter.view.result.done' + * @emits CustomEvent 'kompltetr.view.result.done' * * @returns {Void} */ results: function() { let html = ''; - if(kompleter.props.data && kompleter.props.data.length) { - for(let i = 0; i < kompleter.props.data.length && i <= kompleter.options.maxResults - 1; i++) { - if(typeof kompleter.props.data[i] !== 'undefined') { - html += `
`; - switch (typeof kompleter.props.data[i]) { + if(kompltetr.props.data && kompltetr.props.data.length) { + for(let i = 0; i < kompltetr.props.data.length && i <= kompltetr.options.maxResults - 1; i++) { + if(typeof kompltetr.props.data[i] !== 'undefined') { + html += `
`; + switch (typeof kompltetr.props.data[i]) { case 'string': - html += '' + kompleter.props.data[i] + ''; + html += '' + kompltetr.props.data[i] + ''; break; case 'object': - let properties = Array.isArray(kompleter.options.fieldsToDisplay) && kompleter.options.fieldsToDisplay.length ? kompleter.options.fieldsToDisplay.slice(0, 3) : Object.keys(kompleter.props.data[i]).slice(0, 3); + let properties = Array.isArray(kompltetr.options.fieldsToDisplay) && kompltetr.options.fieldsToDisplay.length ? kompltetr.options.fieldsToDisplay.slice(0, 3) : Object.keys(kompltetr.props.data[i]).slice(0, 3); for(let j = 0; j < properties.length; j++) { - html += '' + kompleter.props.data[i][properties[j]] + ''; + html += '' + kompltetr.props.data[i][properties[j]] + ''; } break; } @@ -955,14 +955,14 @@ html = '
Not found
'; } - kompleter.htmlElements.result.innerHTML = html; + kompltetr.htmlElements.result.innerHTML = html; - document.dispatchEvent(kompleter.events.renderResultDone()); + document.dispatchEvent(kompltetr.events.renderResultDone()); } }, /** - * @description Kompleter entry point. + * @description kompltetr entry point. * * @param {String|HTMLInputElement} input HTMLInputElement * @param {Object} options Main options and configuration parameters @@ -977,52 +977,52 @@ // 1. Validate - kompleter.validators.input(input); - kompleter.validators.data(data); - kompleter.validators.callbacks({ onKeyup, onSelect, onError }); + kompltetr.validators.input(input); + kompltetr.validators.data(data); + kompltetr.validators.callbacks({ onKeyup, onSelect, onError }); // 2. Assign TODO: possible to do better with this ? if (data) { - kompleter.props.data = data; + kompltetr.props.data = data; } if(options) { - kompleter.options = Object.assign(kompleter.options, options); + kompltetr.options = Object.assign(kompltetr.options, options); } if (onKeyup || onSelect || onError) { - kompleter.callbacks = Object.assign(kompleter.callbacks, { onKeyup, onSelect, onError }); + kompltetr.callbacks = Object.assign(kompltetr.callbacks, { onKeyup, onSelect, onError }); } // 3. Build DOM - kompleter.htmlElements.input = input instanceof HTMLInputElement ? input : document.getElementById(input); + kompltetr.htmlElements.input = input instanceof HTMLInputElement ? input : document.getElementById(input); - kompleter.htmlElements.result = kompleter.utils.build('div', [ { id: 'kpl-result' }, { class: 'form--search__result' } ]); + kompltetr.htmlElements.result = kompltetr.utils.build('div', [ { id: 'kpl-result' }, { class: 'form--search__result' } ]); - kompleter.htmlElements.wrapper = kompleter.htmlElements.input.parentElement; - kompleter.htmlElements.wrapper.setAttribute('class', `${kompleter.htmlElements.wrapper.getAttribute('class')} kompletr ${kompleter.options.theme}`); - kompleter.htmlElements.wrapper.appendChild(kompleter.htmlElements.result); + kompltetr.htmlElements.wrapper = kompltetr.htmlElements.input.parentElement; + kompltetr.htmlElements.wrapper.setAttribute('class', `${kompltetr.htmlElements.wrapper.getAttribute('class')} kompletr ${kompltetr.options.theme}`); + kompltetr.htmlElements.wrapper.appendChild(kompltetr.htmlElements.result); // 4. Listeners - kompleter.listeners.onError(); - kompleter.listeners.onHide(); - kompleter.listeners.onKeyup(); - kompleter.listeners.onNavigationEnd(); - kompleter.listeners.onRequestDone(); - kompleter.listeners.onViewResultDone(); + kompltetr.listeners.onError(); + kompltetr.listeners.onHide(); + kompltetr.listeners.onKeyup(); + kompltetr.listeners.onNavigationEnd(); + kompltetr.listeners.onRequestDone(); + kompltetr.listeners.onViewResultDone(); } catch(e) { console.error(e); } }, }; - window.kompleter = kompleter.init; + window.kompltetr = kompltetr.init; - window.HTMLInputElement.prototype.kompleter = function({ data, options, onKeyup, onSelect, onError }) { - window.kompleter({ input: this, data, options, onKeyup, onSelect, onError }); + window.HTMLInputElement.prototype.kompltetr = function({ data, options, onKeyup, onSelect, onError }) { + window.kompltetr({ input: this, data, options, onKeyup, onSelect, onError }); }; })(window); \ No newline at end of file From 9b5b45fe3382ff89d9d60956123f181df4122b1e Mon Sep 17 00:00:00 2001 From: Steve Date: Sun, 10 Mar 2024 15:16:37 +0100 Subject: [PATCH 12/48] chore: refactoring es6 part 2 --- package-lock.json | 504 ++++++++++++- package.json | 1 + src/index.html | 5 +- src/js/index.js | 3 +- src/js/vanilla/kompleter.js | 977 ++++--------------------- src/js/vanilla/kompletr.animations.js | 119 +++ src/js/vanilla/kompletr.cache.js | 102 +++ src/js/vanilla/kompletr.dom.js | 55 ++ src/js/vanilla/kompletr.enums.js | 17 + src/js/vanilla/kompletr.events.js | 93 +++ src/js/vanilla/kompletr.options.js | 163 +++++ src/js/vanilla/kompletr.properties.js | 54 ++ src/js/vanilla/kompletr.utils.js | 31 + src/js/vanilla/kompletr.validation.js | 69 ++ src/js/vanilla/kompletr.view-engine.js | 81 ++ webpack.config.js | 4 + 16 files changed, 1448 insertions(+), 830 deletions(-) create mode 100644 src/js/vanilla/kompletr.animations.js create mode 100644 src/js/vanilla/kompletr.cache.js create mode 100644 src/js/vanilla/kompletr.dom.js create mode 100644 src/js/vanilla/kompletr.enums.js create mode 100644 src/js/vanilla/kompletr.events.js create mode 100644 src/js/vanilla/kompletr.options.js create mode 100644 src/js/vanilla/kompletr.properties.js create mode 100644 src/js/vanilla/kompletr.utils.js create mode 100644 src/js/vanilla/kompletr.validation.js create mode 100644 src/js/vanilla/kompletr.view-engine.js diff --git a/package-lock.json b/package-lock.json index 053e9c8..51752c5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "kompleter", - "version": "1.0.4", + "version": "1.1.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "kompleter", - "version": "1.0.4", + "version": "1.1.4", "license": "ISC", "dependencies": { "jquery": "^3.7.1" @@ -14,6 +14,7 @@ "devDependencies": { "@babel/runtime": "^7.23.6", "cypress": "^13.6.3", + "esbuild-loader": "^4.1.0", "html-loader": "^5.0.0", "node-sass": "^9.0.0", "terser": "^5.26.0", @@ -262,6 +263,374 @@ "node": ">=10.0.0" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.1.tgz", + "integrity": "sha512-m55cpeupQ2DbuRGQMMZDzbv9J9PgVelPjlcmM5kxHnrBdBx6REaEd7LamYV7Dm8N7rCyR/XwU6rVP8ploKtIkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.1.tgz", + "integrity": "sha512-4j0+G27/2ZXGWR5okcJi7pQYhmkVgb4D7UKwxcqrjhvp5TKWx3cUjgB1CGj1mfdmJBQ9VnUGgUhign+FPF2Zgw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.1.tgz", + "integrity": "sha512-hCnXNF0HM6AjowP+Zou0ZJMWWa1VkD77BXe959zERgGJBBxB+sV+J9f/rcjeg2c5bsukD/n17RKWXGFCO5dD5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.1.tgz", + "integrity": "sha512-MSfZMBoAsnhpS+2yMFYIQUPs8Z19ajwfuaSZx+tSl09xrHZCjbeXXMsUF/0oq7ojxYEpsSo4c0SfjxOYXRbpaA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.1.tgz", + "integrity": "sha512-Ylk6rzgMD8klUklGPzS414UQLa5NPXZD5tf8JmQU8GQrj6BrFA/Ic9tb2zRe1kOZyCbGl+e8VMbDRazCEBqPvA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.1.tgz", + "integrity": "sha512-pFIfj7U2w5sMp52wTY1XVOdoxw+GDwy9FsK3OFz4BpMAjvZVs0dT1VXs8aQm22nhwoIWUmIRaE+4xow8xfIDZA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.1.tgz", + "integrity": "sha512-UyW1WZvHDuM4xDz0jWun4qtQFauNdXjXOtIy7SYdf7pbxSWWVlqhnR/T2TpX6LX5NI62spt0a3ldIIEkPM6RHw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.1.tgz", + "integrity": "sha512-itPwCw5C+Jh/c624vcDd9kRCCZVpzpQn8dtwoYIt2TJF3S9xJLiRohnnNrKwREvcZYx0n8sCSbvGH349XkcQeg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.1.tgz", + "integrity": "sha512-LojC28v3+IhIbfQ+Vu4Ut5n3wKcgTu6POKIHN9Wpt0HnfgUGlBuyDDQR4jWZUZFyYLiz4RBBBmfU6sNfn6RhLw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.1.tgz", + "integrity": "sha512-cX8WdlF6Cnvw/DO9/X7XLH2J6CkBnz7Twjpk56cshk9sjYVcuh4sXQBy5bmTwzBjNVZze2yaV1vtcJS04LbN8w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.1.tgz", + "integrity": "sha512-4H/sQCy1mnnGkUt/xszaLlYJVTz3W9ep52xEefGtd6yXDQbz/5fZE5dFLUgsPdbUOQANcVUa5iO6g3nyy5BJiw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.1.tgz", + "integrity": "sha512-c0jgtB+sRHCciVXlyjDcWb2FUuzlGVRwGXgI+3WqKOIuoo8AmZAddzeOHeYLtD+dmtHw3B4Xo9wAUdjlfW5yYA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.1.tgz", + "integrity": "sha512-TgFyCfIxSujyuqdZKDZ3yTwWiGv+KnlOeXXitCQ+trDODJ+ZtGOzLkSWngynP0HZnTsDyBbPy7GWVXWaEl6lhA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.1.tgz", + "integrity": "sha512-b+yuD1IUeL+Y93PmFZDZFIElwbmFfIKLKlYI8M6tRyzE6u7oEP7onGk0vZRh8wfVGC2dZoy0EqX1V8qok4qHaw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.1.tgz", + "integrity": "sha512-wpDlpE0oRKZwX+GfomcALcouqjjV8MIX8DyTrxfyCfXxoKQSDm45CZr9fanJ4F6ckD4yDEPT98SrjvLwIqUCgg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.1.tgz", + "integrity": "sha512-5BepC2Au80EohQ2dBpyTquqGCES7++p7G+7lXe1bAIvMdXm4YYcEfZtQrP4gaoZ96Wv1Ute61CEHFU7h4FMueQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.1.tgz", + "integrity": "sha512-5gRPk7pKuaIB+tmH+yKd2aQTRpqlf1E4f/mC+tawIm/CGJemZcHZpp2ic8oD83nKgUPMEd0fNanrnFljiruuyA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.1.tgz", + "integrity": "sha512-4fL68JdrLV2nVW2AaWZBv3XEm3Ae3NZn/7qy2KGAt3dexAgSVT+Hc97JKSZnqezgMlv9x6KV0ZkZY7UO5cNLCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.1.tgz", + "integrity": "sha512-GhRuXlvRE+twf2ES+8REbeCb/zeikNqwD3+6S5y5/x+DYbAQUNl0HNBs4RQJqrechS4v4MruEr8ZtAin/hK5iw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.1.tgz", + "integrity": "sha512-ZnWEyCM0G1Ex6JtsygvC3KUUrlDXqOihw8RicRuQAzw+c4f1D66YlPNNV3rkjVW90zXVsHwZYWbJh3v+oQFM9Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.1.tgz", + "integrity": "sha512-QZ6gXue0vVQY2Oon9WyLFCdSuYbXSoxaZrPuJ4c20j6ICedfsDilNPYfHLlMH7vGfU5DQR0czHLmJvH4Nzis/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.1.tgz", + "integrity": "sha512-HzcJa1NcSWTAU0MJIxOho8JftNp9YALui3o+Ny7hCh0v5f90nprly1U3Sj1Ldj/CvKKdvvFsCRvDkpsEMp4DNw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.1.tgz", + "integrity": "sha512-0MBh53o6XtI6ctDnRMeQ+xoCN8kD2qI1rY1KgF/xdWQwoFeKou7puvDfV8/Wv4Ctx2rRpET/gGdz3YlNtNACSA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", @@ -1244,6 +1613,15 @@ "tweetnacl": "^0.14.3" } }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -2290,6 +2668,15 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -2411,6 +2798,72 @@ "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", "dev": true }, + "node_modules/esbuild": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.1.tgz", + "integrity": "sha512-OJwEgrpWm/PCMsLVWXKqvcjme3bHNpOgN7Tb6cQnR5n0TPbQx1/Xrn7rqM+wn17bYeT6MGB5sn1Bh5YiGi70nA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.1", + "@esbuild/android-arm": "0.20.1", + "@esbuild/android-arm64": "0.20.1", + "@esbuild/android-x64": "0.20.1", + "@esbuild/darwin-arm64": "0.20.1", + "@esbuild/darwin-x64": "0.20.1", + "@esbuild/freebsd-arm64": "0.20.1", + "@esbuild/freebsd-x64": "0.20.1", + "@esbuild/linux-arm": "0.20.1", + "@esbuild/linux-arm64": "0.20.1", + "@esbuild/linux-ia32": "0.20.1", + "@esbuild/linux-loong64": "0.20.1", + "@esbuild/linux-mips64el": "0.20.1", + "@esbuild/linux-ppc64": "0.20.1", + "@esbuild/linux-riscv64": "0.20.1", + "@esbuild/linux-s390x": "0.20.1", + "@esbuild/linux-x64": "0.20.1", + "@esbuild/netbsd-x64": "0.20.1", + "@esbuild/openbsd-x64": "0.20.1", + "@esbuild/sunos-x64": "0.20.1", + "@esbuild/win32-arm64": "0.20.1", + "@esbuild/win32-ia32": "0.20.1", + "@esbuild/win32-x64": "0.20.1" + } + }, + "node_modules/esbuild-loader": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/esbuild-loader/-/esbuild-loader-4.1.0.tgz", + "integrity": "sha512-543TtIvqbqouEMlOHg4xKoDQkmdImlwIpyAIgpUtDPvMuklU/c2k+Qt2O3VeDBgAwozxmlEbjOzV+F8CZ0g+Bw==", + "dev": true, + "dependencies": { + "esbuild": "^0.20.0", + "get-tsconfig": "^4.7.0", + "loader-utils": "^2.0.4", + "webpack-sources": "^1.4.3" + }, + "funding": { + "url": "https://github.com/privatenumber/esbuild-loader?sponsor=1" + }, + "peerDependencies": { + "webpack": "^4.40.0 || ^5.0.0" + } + }, + "node_modules/esbuild-loader/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -3001,6 +3454,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-tsconfig": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz", + "integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, "node_modules/getos": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", @@ -3898,6 +4363,18 @@ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "dev": true }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -3995,6 +4472,20 @@ "node": ">=6.11.5" } }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -5525,6 +6016,15 @@ "node": ">=8" } }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", diff --git a/package.json b/package.json index 0b22dc3..504a206 100755 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "devDependencies": { "@babel/runtime": "^7.23.6", "cypress": "^13.6.3", + "esbuild-loader": "^4.1.0", "html-loader": "^5.0.0", "node-sass": "^9.0.0", "terser": "^5.26.0", diff --git a/src/index.html b/src/index.html index dae80fb..a7ddb66 100644 --- a/src/index.html +++ b/src/index.html @@ -21,7 +21,7 @@ - + @@ -88,7 +88,7 @@

Kømpletr

propToMapAsValue: 'Name', startQueriyngFromChar: 2, filterOn: 'prefix', - cache: 5000 + cache: 50000 }, /**onKeyup: async function (value, cb) { console.log('cb.onKeyup ', value); @@ -113,7 +113,6 @@

Kømpletr

fetch(`http://localhost:3000/api`, headers) .then(result => result.json()) .then(data => { - console.log('there is', data) options.data = data; input.kompletr(options); }) diff --git a/src/js/index.js b/src/js/index.js index 2ecf59d..f316efd 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -1,2 +1 @@ -import jQuery from "jquery"; -import kompleter from "jquery" \ No newline at end of file +import kompletr from "./vanilla/kompleter" \ No newline at end of file diff --git a/src/js/vanilla/kompleter.js b/src/js/vanilla/kompleter.js index c9ddbd3..ed3a5ed 100644 --- a/src/js/vanilla/kompleter.js +++ b/src/js/vanilla/kompleter.js @@ -1,6 +1,18 @@ +import { Validation } from './kompletr.validation'; +import { Options } from './kompletr.options'; +import { Cache } from './kompletr.cache'; +import { Properties } from './kompletr.properties'; +import { DOM } from './kompletr.dom'; +import { ViewEngine } from './kompletr.view-engine'; +import { EventManager } from './kompletr.events'; + +import { animation, origin } from './kompletr.enums'; +import { uuid } from './kompletr.utils'; +import { fadeIn, fadeOut } from './kompletr.animations'; + ((window) => { - if (window.kompltetr) { - throw new Error('window.kompltetr already exists !'); + if (window.kompletr) { + throw new Error('window.kompletr already exists !'); } /** @@ -9,217 +21,12 @@ * @author Steve Lebleu * @see https://github.com/steve-lebleu/kompletr */ - const kompltetr = { - - /** - * @descrption Animations functions. - */ - animations: { - - /** - * @description Apply a fadeIn animation effect - * - * @param {HTMLElement} element Target HTML element - * @param {String} display CSS3 display property value - * @param {Number} duration Duration of the animation in ms - * - * @returns {Void} - * - * @todo Manage duration - */ - fadeIn: function(element, display = 'block', duration = 500) { - element.style.opacity = 0; - element.style.display = display; - (function fade(){ - let value = parseFloat(element.style.opacity); - if (!((value += .1) > 1)) { - element.style.opacity = value; - requestAnimationFrame(fade); - } - })() - }, - - /** - * @description Apply a fadeOut animation effect - * - * @param {HTMLElement} element Target HTML element - * @param {Number} duration Duration of the animation in ms. Default 500ms - * - * @returns {Void} - * - * @todo Manage duration - */ - fadeOut: function(element, duration = 500) { - element.style.opacity = 1; - (function fade() { - if ((element.style.opacity -= .1) < 0) { - element.style.display = 'none'; - } else { - requestAnimationFrame(fade); - } - })(); - }, - - /** - * @description Apply a slideUp animation effect - * - * @param {HTMLElement} element Target HTML element - * @param {Number} duration Duration of the animation in ms. Default 500ms - * - * @returns {Void} - */ - slideUp: function(element, duration = 500) { - element.style.transitionProperty = 'height, margin, padding'; - element.style.transitionDuration = duration + 'ms'; - element.style.boxSizing = 'border-box'; - element.style.height = element.offsetHeight + 'px'; - element.offsetHeight; - element.style.overflow = 'hidden'; - element.style.height = 0; - element.style.paddingTop = 0; - element.style.paddingBottom = 0; - element.style.marginTop = 0; - element.style.marginBottom = 0; - window.setTimeout( () => { - element.style.display = 'none'; - element.style.removeProperty('height'); - element.style.removeProperty('padding-top'); - element.style.removeProperty('padding-bottom'); - element.style.removeProperty('margin-top'); - element.style.removeProperty('margin-bottom'); - element.style.removeProperty('overflow'); - element.style.removeProperty('transition-duration'); - element.style.removeProperty('transition-property'); - }, duration); - }, - - /** - * @description Apply a slideDown animation effect - * - * @param {HTMLElement} element Target HTML element - * @param {Number} duration Duration of the animation in ms. Default 500ms - * - * @returns {Void} - */ - slideDown: function(element, duration = 500) { - element.style.removeProperty('display'); - let display = window.getComputedStyle(element).display; - if (display === 'none') display = 'block'; - element.style.display = display; - let height = element.offsetHeight; - element.style.overflow = 'hidden'; - element.style.height = 0; - element.style.paddingTop = 0; - element.style.paddingBottom = 0; - element.style.marginTop = 0; - element.style.marginBottom = 0; - element.offsetHeight; - element.style.boxSizing = 'border-box'; - element.style.transitionProperty = "height, margin, padding"; - element.style.transitionDuration = duration + 'ms'; - element.style.height = height + 'px'; - element.style.removeProperty('padding-top'); - element.style.removeProperty('padding-bottom'); - element.style.removeProperty('margin-top'); - element.style.removeProperty('margin-bottom'); - window.setTimeout( () => { - element.style.removeProperty('height'); - element.style.removeProperty('overflow'); - element.style.removeProperty('transition-duration'); - element.style.removeProperty('transition-property'); - }, duration); - } - }, + const kompletr = { /** * @description Cache related functions. - * - * @see https://developer.mozilla.org/en-US/docs/Web/API/Cache - * @see https://web.dev/articles/cache-api-quick-guide - * - * @todo: Full review / validation of the Cache feature */ - cache: { - - /** - * @description Retrieve the data stored in cache and dispatch event with - * - * @param {String} queryString URLSearchParams of the current request as string. IE q=term&limit=10&perPage=10&offset=0 - * - * @emits CustomEvent 'kompltetr.request.done' { from, queryString, data } - * @emits CustomEvent 'kompltetr.error' { error } - * - * @returns {Void} - */ - emit: (queryString) => { - window.caches.open('kompltetr.cache') - .then(cache => { - cache.match(queryString) - .then(async (data) => { - document.dispatchEvent(kompltetr.events.requestDone({ from: kompltetr.enums.origin.cache, queryString: null, data: await data.json() })); - }); - }) - .catch(e => { - document.dispatchEvent(kompltetr.events.error(e)); - }); - }, - - /** - * @description Indicate if the cache is active or not - * - * @returns {Boolean} Cache is active or not - */ - isActive: () => { - return typeof kompltetr.options.cache !== 'undefined'; - }, - - /** - * @description Check the cache validity regarding the current request and the cache timelife - * - * @param {String} queryString The current request query string - * - * @returns {Promise} - */ - isValid: async (queryString) => { - const uuid = kompltetr.utils.uuid(queryString); - const cache = await window.caches.open('kompltetr.cache'); - - const response = await cache.match(uuid); - if (!response) { - return false; - } - - const createdAt = await response.text(); - if (parseInt(createdAt + kompltetr.options.cache, 10) <= Date.now()) { - return false; - } - return true; - }, - - /** - * @description Push data into the cache - * - * @param {Object} args { queryString, data } - * - * @emits CustomEvent 'kompltetr.error' { error } - * - * @returns {Void} - */ - set: ({ queryString, data }) => { - data = JSON.stringify(data); - window.caches.open('kompltetr.cache') - .then(cache => { - const headers = new Headers; - headers.set('content-type', 'application/json'); - const uuid = kompltetr.utils.uuid(queryString); - cache.put(uuid, new Response(Date.now(), { headers })); - cache.put(queryString, new Response(data, { headers })); - }) - .catch(e => { - document.dispatchEvent(kompltetr.events.error(e)); - }); - }, - }, + cache: null, /** * @description Client callbacks functions. @@ -266,150 +73,35 @@ }, /** - * @description Local pseudo enums. - */ - enums: { - - /** - * @description Animation types - */ - animation: Object.freeze({ - fadeIn: 'fadeIn', - slideUp: 'slideUp' - }), - - /** - * @description Data origins - */ - origin: Object.freeze({ - cache: 'cache', - local: 'local' - }) - }, - - /** - * @description kompltetr custom events getters functions. - */ - events: { - - /** - * @description Get a CustomEvent instance for an event with name 'kompltetr.error' - * - * @param {*} detail - * - * @returns {CustomEvent} - */ - error: (detail = { message: '', stack: '', name: ''}) => new CustomEvent('kompltetr.error', { - detail, - bubble: true, - cancelable: false, - composed: false, - }), - - /** - * @description Get a CustomEvent instance for an event with name 'kompltetr.navigation.end' - * - * @param {*} detail - * - * @returns {CustomEvent} - */ - navigationEnd: (detail = {}) => new CustomEvent('kompltetr.navigation.end', { - detail, - bubble: true, - cancelable: false, - composed: false, - }), - - /** - * @description Get a CustomEvent instance for an event with name 'kompltetr.view.result.done' - * - * @param {*} detail - * - * @returns {CustomEvent} - */ - renderResultDone: (detail = {}) => new CustomEvent('kompltetr.view.result.done', { - detail, - bubble: true, - cancelable: false, - composed: false, - }), - - /** - * @description Get a CustomEvent instance for an event with name 'kompltetr.request.done' - * - * @param {*} detail - * - * @returns {CustomEvent} - */ - requestDone: (detail = { from: '', queryString: null, data: null }) => new CustomEvent('kompltetr.request.done', { - detail, - bubble: true, - cancelable: false, - composed: false, - }), - - /** - * @description Get a CustomEvent instance for an event with name 'kompltetr.select.done' - * - * @param {Object} detail - * - * @returns {CustomEvent} - */ - selectDone: (detail = {}) => new CustomEvent('kompltetr.select.done', { - detail, - bubble: true, - cancelable: false, - composed: false, - }), - }, - - /** - * @description kompltetr events handlers. + * @description kompletr events handlers. */ handlers: { - /** - * @description Manage filtering of entries when data is fully provided when kompltr is initialized - * - * @param {*} string - * @param {*} records - * @returns - */ - filter: function (string, records) { - return records.filter(record => { - const value = typeof record === 'string' ? record : record[kompltetr.options.propToMapAsValue]; - if (kompltetr.options.filterOn === 'prefix') { - return value.toLowerCase().lastIndexOf(string.toLowerCase(), 0) === 0; - } - return value.toLowerCase().lastIndexOf(string.toLowerCase()) !== -1; - }); - }, - /** * @description Manage the data hydration according to the current setup (cache, request or local data) * * @param {String} value Current input value * - * @emits CustomEvent 'kompltetr.request.done' { from, queryString, data } - * @emits CustomEvent 'kompltetr.error' { error } + * @emits CustomEvent 'kompletr.request.done' { from, queryString, data } + * @emits CustomEvent 'kompletr.error' { error } * * @returns {Void} */ hydrate: async function(value) { try { // TODO manage cache -> if data available in the cache, get it from there - // TODO udpate requestDOne to take care of the new signature of the detail, without queryString, but just base on the search term - // TODO origin is not longer valid arg, querystring no more - if (kompltetr.callbacks.onKeyup) { - kompltetr.callbacks.onKeyup(value, (data) => { - document.dispatchEvent(kompltetr.events.requestDone({ from: kompltetr.enums.origin.local, queryString: null, data })); + + if (kompletr.cache.isActive() && await kompletr.cache.isValid(value)) { + kompletr.cache.emit(value); + } else if (kompletr.callbacks.onKeyup) { + kompletr.callbacks.onKeyup(value, (data) => { + EventManager.trigger('requestDone', { from: origin.local, data }) }); } else { - const data = kompltetr.handlers.filter(value, kompltetr.props.data); - document.dispatchEvent(kompltetr.events.requestDone({ from: kompltetr.enums.origin.local, queryString: null, data })); + EventManager.trigger('requestDone', { from: origin.local, data: kompletr.props.data }) } } catch(e) { - document.dispatchEvent(kompltetr.events.error(e)); + EventManager.trigger('error', e) } }, @@ -424,19 +116,20 @@ if (keyCode != 38 && keyCode != 40) { return false; } - - if(kompltetr.props.pointer < -1 || kompltetr.props.pointer > kompltetr.htmlElements.suggestions.length - 1) { + + if(kompletr.props.pointer < -1 || kompletr.props.pointer > kompletr.dom.result.children.length - 1) { return false; } - if (keyCode === 38 && kompltetr.props.pointer >= -1) { - kompltetr.props.pointer--; - } else if (keyCode === 40 && kompltetr.props.pointer < kompltetr.htmlElements.suggestions.length - 1) { - kompltetr.props.pointer++; + if (keyCode === 38 && kompletr.props.pointer >= -1) { + kompletr.props.pointer--; + } else if (keyCode === 40 && kompletr.props.pointer < kompletr.dom.result.children.length - 1) { + kompletr.props.pointer++; } - kompltetr.view.focus('remove'); - kompltetr.view.focus('add'); + // todo trigger something ? + kompletr.viewEngine.focus(kompletr.props.pointer, 'remove'); + kompletr.viewEngine.focus(kompletr.props.pointer, 'add'); }, /** @@ -444,525 +137,162 @@ * * @param {Number} idx The index of the selected suggestion * - * @emits CustomEvent 'kompltetr.select.done' + * @emits CustomEvent 'kompletr.select.done' * * @returns {Void} */ select: function (idx = 0) { - kompltetr.htmlElements.input.value = typeof kompltetr.props.data[idx] === 'object' ? kompltetr.props.data[idx][kompltetr.options.propToMapAsValue] : kompltetr.props.data[idx]; - kompltetr.callbacks.onSelect(kompltetr.props.data[idx]); - document.dispatchEvent(kompltetr.events.selectDone()); + // TODO as a view part ? + + kompletr.dom.input.value = typeof kompletr.props.data[idx] === 'object' ? kompletr.props.data[idx][kompletr.options.propToMapAsValue] : kompletr.props.data[idx]; + + kompletr.callbacks.onSelect(kompletr.props.data[idx]); // TODO more clean -> give details ? -> put in same handler listener dans selectDone + + EventManager.trigger('selectDone'); + }, }, /** - * @description kompltetr HTMLElements container. + * @description kompletr dom container. */ - htmlElements: { - - /** - * @description HTMLElement in suggestions who's have the focus - */ - focused: null, - - /** - * @description Main input text - */ - input: null, - - /** - * @description HTMLElement results container - */ - result: null, - - /** - * @description HTMLElements suggestions set according to the current input value - */ - suggestions: [], - - /** - * @description HTMLElemnt identifed as first direct parent of the HTMLInputElement kompltetr.htmlElements.input - */ - wrapper: null, - }, + dom: null, /** - * @description kompltetr events listeners of all religions. + * @description kompletr events listeners of all religions. + * @dependency callbacks + dom + events + props + listeners */ listeners: { /** - * @description CustomEvent 'kompltetr.error' listener + * @description CustomEvent 'kompletr.error' listener */ - onError: () => { - document.addEventListener('kompltetr.error', (e) => { - console.error(`[kompltetr] An error has occured -> ${e.detail.stack}`); - kompltetr.animations.fadeIn(kompltetr.htmlElements.result); - kompltetr.callbacks.onError && kompltetr.callbacks.onError(e.detail); - }); + onError: (e) => { + console.error(`[kompletr] An error has occured -> ${e.detail.stack}`); + fadeIn(kompletr.dom.result); + kompletr.callbacks.onError && kompletr.callbacks.onError(e.detail); }, /** - * @description 'body.click' && kompltetr.select.done listeners + * @description 'body.click' && kompletr.select.done listeners */ - onHide: () => { - const body = document.getElementsByTagName('body')[0]; - body.addEventListener('click', (e) => { - kompltetr.animations.fadeOut(kompltetr.htmlElements.result); - document.dispatchEvent(kompltetr.events.navigationEnd()); - }); - document.addEventListener('kompltetr.select.done', (e) => { - kompltetr.animations.fadeOut(kompltetr.htmlElements.result); - document.dispatchEvent(kompltetr.events.navigationEnd()); - }); + onHide: (e) => { + fadeOut(kompletr.dom.result); + EventManager.trigger('navigationDone'); }, /** - * @description CustomEvent 'kompltetr.navigation.end' listener + * @description CustomEvent 'kompletr.navigation.done' listener */ - onNavigationEnd: () => { - document.addEventListener('kompltetr.navigation.end', (e) => { - kompltetr.props.pointer = -1; - }); + onNavigationDone: (e) => { + kompletr.props.pointer = -1; }, /** - * @description HTMLElements.click listener + * @description CustomEvent 'kompletr.request.done' listener */ - onSelect: () => { - kompltetr.htmlElements.suggestions = document.getElementsByClassName('item--result'); + onRequestDone: async (e) => { - if(typeof kompltetr.htmlElements.suggestions !== 'undefined') { - const numberOfSuggestions = kompltetr.htmlElements.suggestions.length; - - if(numberOfSuggestions) { - for(let i = 0; i < numberOfSuggestions; i++) { - ((i) => { - return kompltetr.htmlElements.suggestions[i].addEventListener('click', (e) => { - kompltetr.htmlElements.focused = kompltetr.htmlElements.suggestions[i]; - kompltetr.handlers.select(); - }); - })(i) - } - } - } - }, + kompletr.props.data = e.detail.data; - /** - * @description CustomEvent 'kompltetr.request.done' listener - */ - onRequestDone: () => { - document.addEventListener('kompltetr.request.done', async (e) => { - kompltetr.props.data = e.detail.data; - if (kompltetr.cache.isActive() && await kompltetr.cache.isValid()) { - kompltetr.cache.set(e.detail); - } - kompltetr.view.results(e.detail.data); - }); - }, + let data = kompletr.props.data.map((record, idx) => ({ idx, data: record }) ); - /** - * @description 'input.keyup' listener - */ - onKeyup: () => { - kompltetr.htmlElements.input.addEventListener('keyup', async (e) => { - if (kompltetr.htmlElements.input.value.length < kompltetr.options.startQueriyngFromChar) { - return; - } - - const keyCode = e.keyCode; - - switch (keyCode) { - case 13: // Enter - kompltetr.handlers.select(kompltetr.htmlElements.focused.id); - break; - case 38: // Up - case 40: // Down - kompltetr.handlers.navigate(keyCode); - break; - default: - if (kompltetr.htmlElements.input.value !== kompltetr.props.previousValue) { - kompltetr.handlers.hydrate(kompltetr.htmlElements.input.value); - } - document.dispatchEvent(kompltetr.events.navigationEnd()); - break - } - }); - }, - - /** - * @description CustomEvent 'kompltetr.view.result.done' listener - * - * @todo Try to move the event listener into the event handler instead ot this listener - */ - onViewResultDone: () => { - document.addEventListener('kompltetr.view.result.done', (e) => { - kompltetr.animations.fadeIn(kompltetr.htmlElements.result); - kompltetr.listeners.onSelect(); - }); - }, - }, - - /** - * @description kompltetr public options. - */ - options: { - - _multiple: false, - _theme: 'light', - _fieldsToDisplay: [], - _maxResults: 10, - _startQueriyngFromChar: 2, - _propToMapAsValue: '', - _filterOn: 'prefix', - _cache: 0, - - /** - * @description Describe the animation configuration to apply to show / hide the results - */ - animation: { - - _type: null, _duration: 500, - - /** - * @description Type of animation between valid types - */ - get type() { - return this._type; - }, - - set type(value) { - const valid = Object.keys(kompltetr.enums.animation); - if (!valid.includes(value)) { - throw new Error(`animation.type should be one of ${valid}`); - } - this._type = value; - }, - - /** - * @description Duration of some animation in ms. Default 500 - */ - get duration() { - return this._duration; - }, - - set duration(value) { - if (isNaN(parseInt(value, 10))) { - throw new Error(`animation.duration should be an integer`); - } - this._duration = value; + if (!kompletr.callbacks.onKeyup) { + data = data.filter((record) => { + const value = typeof record.data === 'string' ? record.data : record.data[kompletr.options.propToMapAsValue]; + if (kompletr.options.filterOn === 'prefix') { + return value.toLowerCase().lastIndexOf(kompletr.dom.input.value.toLowerCase(), 0) === 0; + } + return value.toLowerCase().lastIndexOf(kompletr.dom.input.value.toLowerCase()) !== -1; + }); } - }, - - /** - * @description Enable / disable multiple choices - */ - get multiple() { - return this._multiple; - }, - set multiple(value) { - this._multiple = value; - }, + // TODO le cache ne devrait être actif que si un callback onKeyup ? Pas forcément - /** - * @description Display theme between light | dark - */ - get theme() { - return this._theme; - }, + // Si cb -> dans ce cas, on va set la data ici, et on va faire un check avant d'appeler le keyup pour voir s'il faut aller recherche la donnée... + // L'autre utilité c'est d'avoir la donnée présente avant de faire un call de quoi que ce soit + // Ce qu'il faudrait c'est que data soit une fonction qui retourne Promise, comme ça si tu as du cache tu ne charges même pas, et là c'est utile + // de même pour le callback onKeyup - set theme(value) { - if (!['light', 'dark'].includes(value)) { - throw new Error(`theme should be one of ['light', 'dark'], ${value} given`); - } - this._theme = value; - }, + // Sinon, sans cb, la seule utilité, c'est d'aller chercher une donnée déjà filtrée, ce qui peut se tenir aussi... - /** - * @description Fields to display in each suggestion item - */ - get fieldsToDisplay() { - return this._fieldsToDisplay; - }, + // CCL -> data doit retourner Promise, de même que le callback onKeyup - set fieldsToDisplay(value) { - this._fieldsToDisplay = value; - }, - - /** - * @description Maximum number of results to display as suggestions (can be different thant the number of results availables) - */ - get maxResults() { - return this._maxResults; - }, - - set maxResults(value) { - this._maxResults = value; - }, - - /** - * @description Input minimal value length before to fire research - */ - get startQueriyngFromChar() { - return this._startQueriyngFromChar; - }, - - set startQueriyngFromChar(value) { - this._startQueriyngFromChar = value; - }, - - /** - * @description Property to map as value - */ - get propToMapAsValue() { - return this._propToMapAsValue; - }, - - set propToMapAsValue(value) { - this._propToMapAsValue = value; - }, - - /** - * @description Apply filtering from the beginning of the word (prefix) or on the entire expression (expression) - */ - get filterOn() { - return this._filterOn; - }, - - set filterOn(value) { - if (!['prefix', 'expression'].includes(value)) { - throw new Error(`filterOn should be one of ['prefix', 'expression'], ${value} given`); + if (kompletr.cache.isActive() && await kompletr.cache.isValid(kompletr.dom.input.value) === false) { + kompletr.cache.set({ string: kompletr.dom.input.value, data: e.detail.data }); } - this._filterOn = value; - }, - - /** - * @description Time life of the cache when data is retrieved from an API call - */ - get cache() { - return this._cache; - }, - set cache(value) { - if (isNaN(parseInt(value, 10))) { - throw new Error(`cache should be an integer`); - } - this._cache = value; + // TODO do the render done, and plug the show result on it or ? + kompletr.viewEngine.showResults(data.slice(0, kompletr.options.maxResults), kompletr.options, function() { + EventManager.trigger('renderDone') + }); }, - }, - - /** - * @description kompltetr internal properties. - */ - props: { - - _data: null, _pointer: null, _previousValue: null, /** - * @description Data storage + * @description 'input.keyup' listener */ - get data() { - return this._dataSet; - }, - - set data(value) { - if (!Array.isArray(value)) { - throw new Error(`data must be an array (${value.toString()} given)`); + onKeyup: async (e) => { + if (kompletr.dom.input.value.length < kompletr.options.startQueriyngFromChar) { + return; } - this._dataSet = value; - }, - - /** - * @description Position of the pointer inside the suggestions - */ - get pointer() { - return this._pointer; - }, + + const keyCode = e.keyCode; - set pointer(value) { - if (isNaN(parseInt(value, 10))) { - throw new Error(`pointer must be an integer (${value.toString()} given)`); + switch (keyCode) { + case 13: // Enter + kompletr.handlers.select(kompletr.dom.focused.id); + break; + case 38: // Up + case 40: // Down + kompletr.handlers.navigate(keyCode); + break; + default: + if (kompletr.dom.input.value !== kompletr.props.previousValue) { + kompletr.handlers.hydrate(kompletr.dom.input.value); + } + EventManager.trigger('navigationDone'); + break } - this._pointer = value; }, /** - * @description Previous input value + * @description CustomEvent 'kompletr.render.done' listener */ - get previousValue() { - return this._previousValue; - }, - - set previousValue(value) { - this._previousValue = value; + onRenderDone: () => { + fadeIn(kompletr.dom.result); + if(typeof kompletr.dom.result.children !== 'undefined') { + const numberOfResults = kompletr.dom.result.children.length; + if(numberOfResults) { + for(let i = 0; i < numberOfResults; i++) { + ((i) => { + return kompletr.dom.result.children[i].addEventListener('click', (e) => { + kompletr.dom.focused = kompletr.dom.result.children[i]; + kompletr.handlers.select(kompletr.dom.focused.id); + }); + })(i) + } + } + } }, }, /** - * @description kompltetr params validation functions. + * @description kompletr public options. */ - validators: { - - /** - * @description Valid input as HTMLInputElement or DOM eligible - * - * @param {HTMLInputElement|String} input - * - * @throws {Error} - * - * @returns {Boolean} - */ - input: (input) => { - if (input && input instanceof HTMLInputElement === false && !document.getElementById(input)) { - throw new Error(`input should be an HTMLInputElement instance or a valid id identifier. None of boths given, ${input} received.`); - } - return true; - }, - - /** - * @description Valid data format - * - * @param {Array} data - * - * @returns {Boolean} - */ - data: (data) => { - if (data && !Array.isArray(data)) { - throw new Error(`Invalid data. Please provide a valid data as Array of what you want (${data} given).`); - } - return true; - }, - - /** - * @description Valid callbacks - * - * @param {Object} callbacks - * - * @returns {Boolean} - */ - callbacks: (callbacks) => { - Object.keys(callbacks).forEach(key => { - if (!Object.keys(kompltetr.callbacks).includes(key)) { - throw new Error(`Unrecognized callback function ${key}. Please use onKeyup, onSelect and onError as valid callbacks functions.`); - } - if (callbacks[key] && typeof callbacks[key] !== 'function') { - throw new Error(`callback function ${key} should be a function, ${callbacks[key]} given`); - } - }); - return true; - } - }, + options: null, /** - * @description kompltetr utils functions. + * @description kompletr internal properties. */ - utils: { - - /** - * @description Build an HTML element and set his attributes - * - * @param {String} element HTML tag to build - * @param {Object[]} attributes Key / values pairs - * - * @returns {HTMLElement} - */ - build: function (element, attributes = []) { - const htmlElement = document.createElement(element); - attributes.forEach(attribute => { - htmlElement.setAttribute(Object.keys(attribute)[0], Object.values(attribute)[0]); - }); - return htmlElement; - }, - - /** - * @description Get a simple uuid generated from given string - * - * @param {String} string The string to convert in uuid - * - * @returns {String} The generate uuid value - */ - uuid: function(string) { - return string.split('') - .map(v => v.charCodeAt(0)) - .reduce((a, v) => a + ((a<<7) + (a<<3)) ^ v) - .toString(16); - }, - }, + props: null, /** - * @description kompltetr rendering functions. + * @description kompletr rendering functions. */ - view: { - - /** - * @description Add / remove the focus on a HTMLElement - * - * @param {String} action add|remove - * - * @returns {Void} - */ - focus: function(action) { - if (!['add', 'remove'].includes(action)) { - throw new Error('action should be one of ["add", "remove]: ' + action + ' given.'); - } - - switch (action) { - case 'add': - kompltetr.htmlElements.focused = kompltetr.htmlElements.suggestions[kompltetr.props.pointer]; - kompltetr.htmlElements.suggestions[kompltetr.props.pointer].className += ' focus'; - break; - case 'remove': - kompltetr.htmlElements.focused = null; - Array.from(kompltetr.htmlElements.suggestions).forEach(suggestion => { - ((suggestion) => { - suggestion.className = 'item--result'; - })(suggestion) - }); - break; - } - }, - - /** - * @description Display results according to the current input value / setup - * - * @emits CustomEvent 'kompltetr.view.result.done' - * - * @returns {Void} - */ - results: function() { - let html = ''; - - if(kompltetr.props.data && kompltetr.props.data.length) { - for(let i = 0; i < kompltetr.props.data.length && i <= kompltetr.options.maxResults - 1; i++) { - if(typeof kompltetr.props.data[i] !== 'undefined') { - html += `
`; - switch (typeof kompltetr.props.data[i]) { - case 'string': - html += '' + kompltetr.props.data[i] + ''; - break; - case 'object': - let properties = Array.isArray(kompltetr.options.fieldsToDisplay) && kompltetr.options.fieldsToDisplay.length ? kompltetr.options.fieldsToDisplay.slice(0, 3) : Object.keys(kompltetr.props.data[i]).slice(0, 3); - for(let j = 0; j < properties.length; j++) { - html += '' + kompltetr.props.data[i][properties[j]] + ''; - } - break; - } - html += '
'; - } - } - } else { - html = '
Not found
'; - } - - kompltetr.htmlElements.result.innerHTML = html; - - document.dispatchEvent(kompltetr.events.renderResultDone()); - } - }, + viewEngine: null, /** - * @description kompltetr entry point. + * @description kompletr entry point. * * @param {String|HTMLInputElement} input HTMLInputElement * @param {Object} options Main options and configuration parameters @@ -977,52 +307,53 @@ // 1. Validate - kompltetr.validators.input(input); - kompltetr.validators.data(data); - kompltetr.validators.callbacks({ onKeyup, onSelect, onError }); + Validation.validate(input, data, { onKeyup, onSelect, onError }); - // 2. Assign TODO: possible to do better with this ? + // 2. Assign - if (data) { - kompltetr.props.data = data; + if(data) { + kompletr.props = new Properties({ data }); } if(options) { - kompltetr.options = Object.assign(kompltetr.options, options); + kompletr.options = new Options(options); } - if (onKeyup || onSelect || onError) { - kompltetr.callbacks = Object.assign(kompltetr.callbacks, { onKeyup, onSelect, onError }); + if(onKeyup || onSelect || onError) { + kompletr.callbacks = Object.assign(kompletr.callbacks, { onKeyup, onSelect, onError }); } - // 3. Build DOM + kompletr.cache = new Cache(EventManager, options.cache); - kompltetr.htmlElements.input = input instanceof HTMLInputElement ? input : document.getElementById(input); + // 3. Build DOM - kompltetr.htmlElements.result = kompltetr.utils.build('div', [ { id: 'kpl-result' }, { class: 'form--search__result' } ]); + kompletr.dom = new DOM(input, options); - kompltetr.htmlElements.wrapper = kompltetr.htmlElements.input.parentElement; - kompltetr.htmlElements.wrapper.setAttribute('class', `${kompltetr.htmlElements.wrapper.getAttribute('class')} kompletr ${kompltetr.options.theme}`); - kompltetr.htmlElements.wrapper.appendChild(kompltetr.htmlElements.result); + kompletr.viewEngine = new ViewEngine(kompletr.dom); // 4. Listeners - kompltetr.listeners.onError(); - kompltetr.listeners.onHide(); - kompltetr.listeners.onKeyup(); - kompltetr.listeners.onNavigationEnd(); - kompltetr.listeners.onRequestDone(); - kompltetr.listeners.onViewResultDone(); + kompletr.dom.input.addEventListener('keyup', kompletr.listeners.onKeyup); + + const body = document.getElementsByTagName('body')[0]; + body.addEventListener('click', kompletr.listeners.onHide); + + document.addEventListener('kompletr.select.done', kompletr.listeners.onHide); + document.addEventListener('kompletr.navigation.done', kompletr.listeners.onNavigationDone); + document.addEventListener('kompletr.request.done', kompletr.listeners.onRequestDone); + document.addEventListener('kompletr.render.done', kompletr.listeners.onRenderDone); + document.addEventListener('kompletr.error', kompletr.listeners.onError); + } catch(e) { console.error(e); } }, }; - window.kompltetr = kompltetr.init; + window.kompletr = kompletr.init; - window.HTMLInputElement.prototype.kompltetr = function({ data, options, onKeyup, onSelect, onError }) { - window.kompltetr({ input: this, data, options, onKeyup, onSelect, onError }); + window.HTMLInputElement.prototype.kompletr = function({ data, options, onKeyup, onSelect, onError }) { + window.kompletr({ input: this, data, options, onKeyup, onSelect, onError }); }; })(window); \ No newline at end of file diff --git a/src/js/vanilla/kompletr.animations.js b/src/js/vanilla/kompletr.animations.js new file mode 100644 index 0000000..83f7fa7 --- /dev/null +++ b/src/js/vanilla/kompletr.animations.js @@ -0,0 +1,119 @@ +/** + * @descrption Animations functions. + */ + +/** + * @description Apply a fadeIn animation effect + * + * @param {HTMLElement} element Target HTML element + * @param {String} display CSS3 display property value + * @param {Number} duration Duration of the animation in ms + * + * @returns {Void} + * + * @todo Manage duration + */ +const fadeIn = (element, display = 'block', duration = 500) => { + element.style.opacity = 0; + element.style.display = display; + (function fade(){ + let value = parseFloat(element.style.opacity); + if (!((value += .1) > 1)) { + element.style.opacity = value; + requestAnimationFrame(fade); + } + })() +}; + +/** + * @description Apply a fadeOut animation effect + * + * @param {HTMLElement} element Target HTML element + * @param {Number} duration Duration of the animation in ms. Default 500ms + * + * @returns {Void} + * + * @todo Manage duration + */ +const fadeOut = (element, duration = 500) => { + element.style.opacity = 1; + (function fade() { + if ((element.style.opacity -= .1) < 0) { + element.style.display = 'none'; + } else { + requestAnimationFrame(fade); + } + })(); +}; + +/** + * @description Apply a slideUp animation effect + * + * @param {HTMLElement} element Target HTML element + * @param {Number} duration Duration of the animation in ms. Default 500ms + * + * @returns {Void} + */ +const slideUp = (element, duration = 500) => { + element.style.transitionProperty = 'height, margin, padding'; + element.style.transitionDuration = duration + 'ms'; + element.style.boxSizing = 'border-box'; + element.style.height = element.offsetHeight + 'px'; + element.offsetHeight; + element.style.overflow = 'hidden'; + element.style.height = 0; + element.style.paddingTop = 0; + element.style.paddingBottom = 0; + element.style.marginTop = 0; + element.style.marginBottom = 0; + window.setTimeout( () => { + element.style.display = 'none'; + element.style.removeProperty('height'); + element.style.removeProperty('padding-top'); + element.style.removeProperty('padding-bottom'); + element.style.removeProperty('margin-top'); + element.style.removeProperty('margin-bottom'); + element.style.removeProperty('overflow'); + element.style.removeProperty('transition-duration'); + element.style.removeProperty('transition-property'); + }, duration); +}; + +/** + * @description Apply a slideDown animation effect + * + * @param {HTMLElement} element Target HTML element + * @param {Number} duration Duration of the animation in ms. Default 500ms + * + * @returns {Void} + */ +const slideDown = (element, duration = 500) => { + element.style.removeProperty('display'); + let display = window.getComputedStyle(element).display; + if (display === 'none') display = 'block'; + element.style.display = display; + let height = element.offsetHeight; + element.style.overflow = 'hidden'; + element.style.height = 0; + element.style.paddingTop = 0; + element.style.paddingBottom = 0; + element.style.marginTop = 0; + element.style.marginBottom = 0; + element.offsetHeight; + element.style.boxSizing = 'border-box'; + element.style.transitionProperty = "height, margin, padding"; + element.style.transitionDuration = duration + 'ms'; + element.style.height = height + 'px'; + element.style.removeProperty('padding-top'); + element.style.removeProperty('padding-bottom'); + element.style.removeProperty('margin-top'); + element.style.removeProperty('margin-bottom'); + window.setTimeout( () => { + element.style.removeProperty('height'); + element.style.removeProperty('overflow'); + element.style.removeProperty('transition-duration'); + element.style.removeProperty('transition-property'); + }, duration); +}; + +export { fadeIn, fadeOut, slideUp, slideDown }; \ No newline at end of file diff --git a/src/js/vanilla/kompletr.cache.js b/src/js/vanilla/kompletr.cache.js new file mode 100644 index 0000000..0e07fc2 --- /dev/null +++ b/src/js/vanilla/kompletr.cache.js @@ -0,0 +1,102 @@ +import { animation, origin } from './kompletr.enums'; +import { build, uuid } from './kompletr.utils'; + + /** + * @description Kompletr caching mechanism implementation. + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/Cache + * @see https://web.dev/articles/cache-api-quick-guide + * + * @todo: Full review / validation of the Cache feature + */ +export class Cache { + + _name = null; + + _duration = null; + + constructor(eventManager, duration = 0, name = 'kompletr.cache') { + this._eventManager = eventManager; + this._name = name; + this._duration = duration; + } + + /** + * @description Retrieve the data stored in cache and dispatch event with + * + * @param {String} string Input value of the current request as string + * + * @emits CustomEvent 'kompltetr.request.done' { from, data } + * @emits CustomEvent 'kompltetr.error' { error } + * + * @returns {Void} + */ + emit(string) { + console.log('get from the cache') + window.caches.open(this._name) + .then(cache => { + cache.match(string) + .then(async (data) => { + this._eventManager.trigger('requestDone', { from: origin.cache, data: await data.json() }); + }); + }) + .catch(e => { + this._eventManager.trigger('error', e); + }); + } + + /** + * @description Indicate if the cache is active or not + * + * @returns {Boolean} Cache is active or not + */ + isActive() { + return this._duration !== 0; + } + + /** + * @description Check the cache validity regarding the current request and the cache timelife + * + * @param {String} string The current request value + * + * @returns {Promise} + */ + async isValid(string) { + const cache = await window.caches.open(this._name); + + const response = await cache.match(`/${string}`); + if (!response) { + return false; + } + + const createdAt = await response.text(); + if (parseInt(createdAt + this._duration, 10) <= Date.now()) { + return false; + } + return true; + } + + /** + * @description Push data into the cache + * + * @param {Object} args { string, data } + * + * @emits CustomEvent 'kompltetr.error' { error } + * + * @returns {Void} + */ + set({ string, data }) { + console.log('set the cache') + data = JSON.stringify(data); + window.caches.open(this._name) + .then(cache => { + const headers = new Headers; + headers.set('content-type', 'application/json'); + headers.set('cache-control', `max-age=${this._duration}`); + cache.put(`/${string}`, new Response(data, { headers })); + }) + .catch(e => { + this._eventManager.trigger('error', e); + }); + } +}; \ No newline at end of file diff --git a/src/js/vanilla/kompletr.dom.js b/src/js/vanilla/kompletr.dom.js new file mode 100644 index 0000000..5048b12 --- /dev/null +++ b/src/js/vanilla/kompletr.dom.js @@ -0,0 +1,55 @@ +import { build } from './kompletr.utils'; + +/** + * @description + */ +export class DOM { + + /** + * @description Main input text + */ + _input = null; + + /** + * @description HTMLElement in suggestions who's have the focus + */ + _focused = null; + + /** + * @description HTMLElement results container + */ + _result = null; + + constructor(input, options = { theme: 'light' }) { + this._input = input instanceof HTMLInputElement ? input : document.getElementById(input); + + this._result = build('div', [ { id: 'kpl-result' }, { class: 'form--search__result' } ]); + + this._input.parentElement.setAttribute('class', `${this._input.parentElement.getAttribute('class')} kompletr ${options.theme}`); + this._input.parentElement.appendChild(this._result); + } + + get input() { + return this._input; + } + + set input(value) { + this._input = value; + } + + get focused() { + return this._focused; + } + + set focused(value) { + this._focused = value; + } + + get result() { + return this._result; + } + + set result(value) { + this._result = value; + } +} \ No newline at end of file diff --git a/src/js/vanilla/kompletr.enums.js b/src/js/vanilla/kompletr.enums.js new file mode 100644 index 0000000..de60bb4 --- /dev/null +++ b/src/js/vanilla/kompletr.enums.js @@ -0,0 +1,17 @@ +/** + * @description Animation types + */ +const animation = Object.freeze({ + fadeIn: 'fadeIn', + slideUp: 'slideUp' +}); + +/** + * @description Data origins + */ +const origin = Object.freeze({ + cache: 'cache', + local: 'local' +}); + +export { animation, origin } \ No newline at end of file diff --git a/src/js/vanilla/kompletr.events.js b/src/js/vanilla/kompletr.events.js new file mode 100644 index 0000000..92ddebd --- /dev/null +++ b/src/js/vanilla/kompletr.events.js @@ -0,0 +1,93 @@ +/** + * @description + */ +export class EventManager { + + constructor() {} + + static event = Object.freeze({ + error: 'error', + navigationDone: 'navigationDone', + renderDone: 'renderDone', + requestDone: 'requestDone', + resultDone: 'resultDone', + selectDone: 'selectDone' + }) + + /** + * @description Get a CustomEvent instance for an event with name 'kompletr.error' + * + * @param {*} detail + * + * @returns {CustomEvent} + */ + static error = (detail = { message: '', stack: '', name: ''}) => new CustomEvent('kompletr.error', { + detail, + bubble: true, + cancelable: false, + composed: false, + }) + + /** + * @description Get a CustomEvent instance for an event with name 'kompletr.navigation.done' + * + * @param {*} detail + * + * @returns {CustomEvent} + */ + static navigationDone = (detail = {}) => new CustomEvent('kompletr.navigation.done', { + detail, + bubble: true, + cancelable: false, + composed: false, + }) + + /** + * @description Get a CustomEvent instance for an event with name 'kompletr.view.result.done' + * + * @param {*} detail + * + * @returns {CustomEvent} + */ + static renderDone = (detail = { }) => new CustomEvent('kompletr.render.done', { + detail, + bubble: true, + cancelable: false, + composed: false, + }) + + /** + * @description Get a CustomEvent instance for an event with name 'kompletr.request.done' + * + * @param {*} detail + * + * @returns {CustomEvent} + */ + static requestDone = (detail = { from: '', data: null }) => new CustomEvent('kompletr.request.done', { + detail, + bubble: true, + cancelable: false, + composed: false, + }) + + /** + * @description Get a CustomEvent instance for an event with name 'kompletr.select.done' + * + * @param {Object} detail + * + * @returns {CustomEvent} + */ + static selectDone = (detail = {}) => new CustomEvent('kompletr.select.done', { + detail, + bubble: true, + cancelable: false, + composed: false, + }) + + static trigger(event, detail = {}) { + if (!EventManager.event[event]) { + throw new Error(`Unknown event ${event} triggered`); + } + document.dispatchEvent(EventManager[event](detail)); + } +} \ No newline at end of file diff --git a/src/js/vanilla/kompletr.options.js b/src/js/vanilla/kompletr.options.js new file mode 100644 index 0000000..9681521 --- /dev/null +++ b/src/js/vanilla/kompletr.options.js @@ -0,0 +1,163 @@ +/** + * @description Kompletr options definition. + */ +export class Options { + _animationType = null + + _animationDuration = 500 + + _multiple = false + + _theme = 'light' + + _fieldsToDisplay = [] + + _maxResults = 10 + + _startQueriyngFromChar = 2 + + _propToMapAsValue = '' + + _filterOn = 'prefix' + + _cache = 0 + + /** + * @description Type of animation between valid types + */ + get animationType() { + return this._type; + } + + set animationType(value) { + const valid = Object.keys(kompletr.enums.animation); + if (!valid.includes(value)) { + throw new Error(`animation.type should be one of ${valid}`); + } + this._type = value; + } + + /** + * @description Duration of some animation in ms. Default 500 + */ + get animationDuration() { + return this._duration; + } + + set animationDuration(value) { + if (isNaN(parseInt(value, 10))) { + throw new Error(`animation.duration should be an integer`); + } + this._duration = value; + } + + /** + * @description Enable / disable multiple choices + */ + get multiple() { + return this._multiple; + } + + set multiple(value) { + this._multiple = value; + } + + /** + * @description Display theme between light | dark + */ + get theme() { + return this._theme; + } + + set theme(value) { + if (!['light', 'dark'].includes(value)) { + throw new Error(`theme should be one of ['light', 'dark'], ${value} given`); + } + this._theme = value; + } + + /** + * @description Fields to display in each suggestion item + */ + get fieldsToDisplay() { + return this._fieldsToDisplay; + } + + set fieldsToDisplay(value) { + this._fieldsToDisplay = value; + } + + /** + * @description Maximum number of results to display as suggestions (can be different thant the number of results availables) + */ + get maxResults() { + return this._maxResults; + } + + set maxResults(value) { + this._maxResults = value; + } + + /** + * @description Input minimal value length before to fire research + */ + get startQueriyngFromChar() { + return this._startQueriyngFromChar; + } + + set startQueriyngFromChar(value) { + this._startQueriyngFromChar = value; + } + + /** + * @description Property to map as value + */ + get propToMapAsValue() { + return this._propToMapAsValue; + } + + set propToMapAsValue(value) { + this._propToMapAsValue = value; + } + + /** + * @description Apply filtering from the beginning of the word (prefix) or on the entire expression (expression) + */ + get filterOn() { + return this._filterOn; + } + + set filterOn(value) { + if (!['prefix', 'expression'].includes(value)) { + throw new Error(`filterOn should be one of ['prefix', 'expression'], ${value} given`); + } + this._filterOn = value; + } + + /** + * @description Time life of the cache when data is retrieved from an API call + */ + get cache() { + return this._cache; + } + + set cache(value) { + if (isNaN(parseInt(value, 10))) { + throw new Error(`cache should be an integer`); + } + this._cache = value; + } + + constructor(options) { + this._theme = options?.theme; + this._animationType = options?.animationType; + this._animationDuration = options?.animationDuration; + this._multiple = options?.multiple; + this._fieldsToDisplay = options?.fieldsToDisplay; + this._maxResults = options?.maxResults; + this._startQueriyngFromChar = options?.startQueriyngFromChar; + this._propToMapAsValue = options?.propToMapAsValue; + this._filterOn = options?.filterOn; + this._cache = options?.cache; + } +} \ No newline at end of file diff --git a/src/js/vanilla/kompletr.properties.js b/src/js/vanilla/kompletr.properties.js new file mode 100644 index 0000000..6f7fb22 --- /dev/null +++ b/src/js/vanilla/kompletr.properties.js @@ -0,0 +1,54 @@ +/** + * @description Dynamic properties of current Kompltr instance. + */ +export class Properties { + + /** + * @description Data storage + */ + _data = null + + /** + * @description Position of the pointer inside the suggestions + */ + _pointer = null + + /** + * @description Previous input value + */ + _previousValue = null + + get data() { + return this._data; + } + + set data(value) { + if (!Array.isArray(value)) { + throw new Error(`data must be an array (${value.toString()} given)`); + } + this._data = value; + } + + get pointer() { + return this._pointer; + } + + set pointer(value) { + if (isNaN(parseInt(value, 10))) { + throw new Error(`pointer must be an integer (${value.toString()} given)`); + } + this._pointer = value; + } + + get previousValue() { + return this._previousValue; + } + + set previousValue(value) { + this._previousValue = value; + } + + constructor(props) { + this._data = props.data; + } +} \ No newline at end of file diff --git a/src/js/vanilla/kompletr.utils.js b/src/js/vanilla/kompletr.utils.js new file mode 100644 index 0000000..4766df8 --- /dev/null +++ b/src/js/vanilla/kompletr.utils.js @@ -0,0 +1,31 @@ +/** +* @description Build an HTML element and set his attributes +* +* @param {String} element HTML tag to build +* @param {Object[]} attributes Key / values pairs +* +* @returns {HTMLElement} +*/ +const build = (element, attributes = []) => { + const htmlElement = document.createElement(element); + attributes.forEach(attribute => { + htmlElement.setAttribute(Object.keys(attribute)[0], Object.values(attribute)[0]); + }); + return htmlElement; +}; + +/** +* @description Get a simple uuid generated from given string +* +* @param {String} string The string to convert in uuid +* +* @returns {String} The generate uuid value +*/ +const uuid = (string) => { + return string.split('') + .map(v => v.charCodeAt(0)) + .reduce((a, v) => a + ((a<<7) + (a<<3)) ^ v) + .toString(16); +}; + +export { build, uuid } \ No newline at end of file diff --git a/src/js/vanilla/kompletr.validation.js b/src/js/vanilla/kompletr.validation.js new file mode 100644 index 0000000..67e8d00 --- /dev/null +++ b/src/js/vanilla/kompletr.validation.js @@ -0,0 +1,69 @@ + +/** + * @description + */ +export class Validation { + constructor() {} + + /** + * @description Valid input as HTMLInputElement or DOM eligible + * + * @param {HTMLInputElement|String} input + * + * @throws {Error} + * + * @returns {Boolean} + */ + static input(input) { + if (input && input instanceof HTMLInputElement === false && !document.getElementById(input)) { + throw new Error(`input should be an HTMLInputElement instance or a valid id identifier. None of boths given, ${input} received.`); + } + return true; + } + + /** + * @description Valid data format + * + * @param {Array} data + * + * @returns {Boolean} + */ + static data (data) { + if (data && !Array.isArray(data)) { + throw new Error(`Invalid data. Please provide a valid data as Array of what you want (${data} given).`); + } + return true; + } + + /** + * @description Valid callbacks + * + * @param {Object} callbacks + * + * @returns {Boolean} + */ + static callbacks(callbacks) { + Object.keys(callbacks).forEach(key => { + if (!['onKeyup', 'onSelect', 'onError'].includes(key)) { + throw new Error(`Unrecognized callback function ${key}. Please use onKeyup, onSelect and onError as valid callbacks functions.`); + } + if (callbacks[key] && typeof callbacks[key] !== 'function') { + throw new Error(`callback function ${key} should be a function, ${callbacks[key]} given`); + } + }); + return true; + } + + /** + * @description One line validation + * + * @param {HTMLInputElement|String} input + * @param {Array} data + * @param {Object} callbacks + * + * @returns {Boolean} + */ + static validate(input, data, callbacks) { + return Validation.input(input) && Validation.data(data) && Validation.callbacks(callbacks); + } +} \ No newline at end of file diff --git a/src/js/vanilla/kompletr.view-engine.js b/src/js/vanilla/kompletr.view-engine.js new file mode 100644 index 0000000..f1d27cb --- /dev/null +++ b/src/js/vanilla/kompletr.view-engine.js @@ -0,0 +1,81 @@ +/** + * @description Test + */ +export class ViewEngine { + + _dom = null; + + _eventManager = null; + + constructor(dom, eventManager) { + this._dom = dom; + this._eventManager = eventManager; + } + + /** + * @description Add / remove the focus on a HTMLElement + * + * @param {String} action add|remove + * + * @returns {Void} + */ + focus(pointer, action) { + if (!['add', 'remove'].includes(action)) { + throw new Error('action should be one of ["add", "remove]: ' + action + ' given.'); + } + + switch (action) { + case 'add': + this._dom.focused = this._dom.result.children[pointer]; + this._dom.result.children[pointer].className += ' focus'; + break; + case 'remove': + this._dom.focused = null; + Array.from(this._dom.result.children).forEach(result => { + ((result) => { + result.className = 'item--result'; + })(result) + }); + break; + } + } + + /** + * @description Display results according to the current input value / setup + * + * @emits CustomEvent 'kompletr.view.result.done' + * + * @returns {Void} + */ + showResults(data, options, done) { + let html = ''; + + if(data && data.length) { + + html = data + .reduce((html, current) => { + html += `
`; + switch (typeof current.data) { + case 'string': + html += `${current.data}`; + break; + case 'object': + let properties = Array.isArray(options.fieldsToDisplay) && options.fieldsToDisplay.length ? options.fieldsToDisplay: Object.keys(current.data); + for(let j = 0; j < properties.length; j++) { + html += `${current.data[properties[j]]}`; + } + break; + } + html += '
'; + return html; + }, ''); + + } else { + html = '
Not found
'; + } + + this._dom.result.innerHTML = html; + + done(); // TODO do better + } +} \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js index 5a61065..97d0909 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -42,6 +42,10 @@ module.exports = { test: /\.html$/i, loader: "html-loader", }, + { + test: /\.js$/i, + loader: "esbuild-loader", + }, ], }, devServer: { From a36538259cf6ae90351d2e59b8931eb83f9a7ade Mon Sep 17 00:00:00 2001 From: Steve Date: Sun, 10 Mar 2024 15:18:30 +0100 Subject: [PATCH 13/48] chore: refactoring es6 part 2 --- src/js/vanilla/kompleter.js | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/js/vanilla/kompleter.js b/src/js/vanilla/kompleter.js index ed3a5ed..d017706 100644 --- a/src/js/vanilla/kompleter.js +++ b/src/js/vanilla/kompleter.js @@ -207,16 +207,10 @@ import { fadeIn, fadeOut } from './kompletr.animations'; }); } - // TODO le cache ne devrait être actif que si un callback onKeyup ? Pas forcément + // With CB, the utility is to prevent some HTTP calls, and to retrieve data in small set as well + // Without CB, the utility is to retrieve data in a small lot - // Si cb -> dans ce cas, on va set la data ici, et on va faire un check avant d'appeler le keyup pour voir s'il faut aller recherche la donnée... - // L'autre utilité c'est d'avoir la donnée présente avant de faire un call de quoi que ce soit - // Ce qu'il faudrait c'est que data soit une fonction qui retourne Promise, comme ça si tu as du cache tu ne charges même pas, et là c'est utile - // de même pour le callback onKeyup - - // Sinon, sans cb, la seule utilité, c'est d'aller chercher une donnée déjà filtrée, ce qui peut se tenir aussi... - - // CCL -> data doit retourner Promise, de même que le callback onKeyup + // TODO -> data doit retourner Promise, de même que le callback onKeyup if (kompletr.cache.isActive() && await kompletr.cache.isValid(kompletr.dom.input.value) === false) { kompletr.cache.set({ string: kompletr.dom.input.value, data: e.detail.data }); From 18145984730669e058a3c0cd9ad6b179ab556e1b Mon Sep 17 00:00:00 2001 From: Steve Date: Sun, 10 Mar 2024 21:07:13 +0100 Subject: [PATCH 14/48] chore: remove jQuery, add configuration files --- .browserslistrc | 1 + .editorconfig | 8 + .eslintignore | 4 + .eslintrc.js | 119 ++ .nvmrc | 1 + .prettierignore | 4 + .prettierrc | 5 + .stylelintrc | 33 + package-lock.json | 1368 +++++++++++++++++- package.json | 4 + src/js/index.js | 2 +- src/js/jquery/jquery.kompleter.js | 593 -------- src/js/{vanilla => }/kompleter.js | 0 src/js/{vanilla => }/kompletr.animations.js | 0 src/js/{vanilla => }/kompletr.cache.js | 0 src/js/{vanilla => }/kompletr.dom.js | 0 src/js/{vanilla => }/kompletr.enums.js | 0 src/js/{vanilla => }/kompletr.events.js | 0 src/js/{vanilla => }/kompletr.options.js | 0 src/js/{vanilla => }/kompletr.properties.js | 0 src/js/{vanilla => }/kompletr.utils.js | 0 src/js/{vanilla => }/kompletr.validation.js | 0 src/js/{vanilla => }/kompletr.view-engine.js | 0 webpack.config.js | 12 - 24 files changed, 1482 insertions(+), 672 deletions(-) create mode 100644 .browserslistrc create mode 100644 .editorconfig create mode 100644 .eslintignore create mode 100644 .eslintrc.js create mode 100644 .nvmrc create mode 100644 .prettierignore create mode 100644 .prettierrc create mode 100644 .stylelintrc delete mode 100644 src/js/jquery/jquery.kompleter.js rename src/js/{vanilla => }/kompleter.js (100%) rename src/js/{vanilla => }/kompletr.animations.js (100%) rename src/js/{vanilla => }/kompletr.cache.js (100%) rename src/js/{vanilla => }/kompletr.dom.js (100%) rename src/js/{vanilla => }/kompletr.enums.js (100%) rename src/js/{vanilla => }/kompletr.events.js (100%) rename src/js/{vanilla => }/kompletr.options.js (100%) rename src/js/{vanilla => }/kompletr.properties.js (100%) rename src/js/{vanilla => }/kompletr.utils.js (100%) rename src/js/{vanilla => }/kompletr.validation.js (100%) rename src/js/{vanilla => }/kompletr.view-engine.js (100%) diff --git a/.browserslistrc b/.browserslistrc new file mode 100644 index 0000000..496d1ef --- /dev/null +++ b/.browserslistrc @@ -0,0 +1 @@ +defaults \ No newline at end of file diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..4837166 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,8 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true \ No newline at end of file diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..2ed9b90 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,4 @@ +build +coverage +dist +node_modules \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..2a988b2 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,119 @@ +const OFF = 0; +const WARNING = 1; +const ERROR = 2; + +module.exports = { + globals: { + __DEV__: false, + __TEST__: false, + }, + settings: { + react: { + pragma: 'React', + version: 'detect', + }, + 'import/resolver': { + node: { + extensions: ['.js', '.ts', '.tsx'], + }, + }, + }, + sourceType: "module", + rules: { + curly: 2, + 'no-param-reassign': OFF, + 'valid-jsdoc': OFF, + 'no-shadow': OFF, + 'prefer-template': OFF, + 'jest/no-disabled-tests': OFF, + 'react/prop-types': OFF, + 'react/no-unescaped-entities': OFF, + 'new-cap': OFF, + 'eslint-comments/disable-enable-pair': [ERROR, { allowWholeFile: true }], + 'import/extensions': OFF, + '@typescript-eslint/camelcase': [ + ERROR, + { + allow: ['__autocomplete_', 'aa_core', 'aa_js'], + }, + ], + 'no-unused-expressions': OFF, + complexity: OFF, + 'import/order': [ + ERROR, + { + alphabetize: { + order: 'asc', + caseInsensitive: true, + }, + 'newlines-between': 'always', + groups: ['builtin', 'external', 'parent', 'sibling', 'index'], + pathGroups: [ + { + pattern: '@/**/*', + group: 'parent', + position: 'before', + }, + ], + pathGroupsExcludedImportTypes: ['builtin'], + }, + ], + }, + overrides: [ + { + files: ['test/**/*'], + rules: { + 'import/no-extraneous-dependencies': OFF, + }, + }, + { + files: ['packages/autocomplete-js/**/*/setProperties.ts'], + rules: { + 'eslint-comments/no-unlimited-disable': OFF, + }, + }, + { + files: [ + 'packages/autocomplete-core/**/*', + 'packages/autocomplete-js/**/*', + ], + rules: { + 'no-restricted-globals': [ + 'error', + { + name: 'window', + message: 'Use the `environment` param to access this property.', + }, + { + name: 'document', + message: 'Use the `environment` param to access this property.', + }, + ], + }, + }, + { + files: ['**/__tests__/**'], + rules: { + 'no-restricted-globals': OFF, + }, + }, + { + files: ['**/rollup.config.js', 'stories/**/*', '**/__tests__/**'], + rules: { + 'import/no-extraneous-dependencies': OFF, + }, + }, + { + files: ['scripts/**/*', '*.config.js'], + rules: { + 'import/no-commonjs': OFF, + }, + }, + { + files: ['examples/**/*'], + rules: { + 'spaced-comment': OFF, + }, + }, + ], +}; \ No newline at end of file diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..436d5c5 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +18.19.0 \ No newline at end of file diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..2ed9b90 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,4 @@ +build +coverage +dist +node_modules \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..df15e1e --- /dev/null +++ b/.prettierrc @@ -0,0 +1,5 @@ +{ + "proseWrap": "never", + "singleQuote": true, + "trailingComma": "es5" +} \ No newline at end of file diff --git a/.stylelintrc b/.stylelintrc new file mode 100644 index 0000000..9789669 --- /dev/null +++ b/.stylelintrc @@ -0,0 +1,33 @@ +{ + "plugins": [ + "stylelint-prettier", + "stylelint-no-unsupported-browser-features" + ], + "extends": [ + "stylelint-config-standard", + "stylelint-config-sass-guidelines", + "stylelint-order", + "stylelint-a11y/recommended", + "stylelint-prettier/recommended" + ], + "rules": { + "order/properties-alphabetical-order": true, + "no-descending-specificity": null, + "selector-class-pattern": [ + "^aa(-(?:[A-Z][a-z]+Plugin))?-(?:[A-Z][a-z]+)+(?:--[a-z]+(?:[A-Z][a-z]+)?)?$" + ], + "prettier/prettier": true, + "max-nesting-depth": null, + "rule-empty-line-before": [ + "always", + { "ignore": ["after-comment", "first-nested", "inside-block"] } + ], + "selector-max-compound-selectors": null, + "plugin/no-unsupported-browser-features": [ + null, + { + "severity": "warning" + } + ] + } +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 51752c5..fe3faf2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,8 +15,11 @@ "@babel/runtime": "^7.23.6", "cypress": "^13.6.3", "esbuild-loader": "^4.1.0", + "eslint": "^8.57.0", "html-loader": "^5.0.0", "node-sass": "^9.0.0", + "prettier": "^3.2.5", + "stylelint": "^16.2.1", "terser": "^5.26.0", "webpack": "^5.89.0", "webpack-cli": "^5.1.4", @@ -24,6 +27,15 @@ "webpack-dev-server": "^4.15.1" } }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@babel/code-frame": { "version": "7.23.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", @@ -206,6 +218,92 @@ "node": ">=0.1.90" } }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.0.tgz", + "integrity": "sha512-YfEHq0eRH98ffb5/EsrrDspVWAuph6gDggAE74ZtjecsmyyWpW768hOyiONa8zwWGbIWYfa2Xp4tRTrpQQ00CQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^2.2.3" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.3.tgz", + "integrity": "sha512-pp//EvZ9dUmGuGtG1p+n17gTHEOqu9jO+FiCUjNN3BDmyhdA2Jq9QsVeR7K8/2QCK17HSsioPlTW9ZkzoWb3Lg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + } + }, + "node_modules/@csstools/media-query-list-parser": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.8.tgz", + "integrity": "sha512-DiD3vG5ciNzeuTEoh74S+JMjQDs50R3zlxHnBnfd04YYfA/kh2KiBCGhzqLxlJcNq+7yNQ3stuZZYLX6wK/U2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^2.6.0", + "@csstools/css-tokenizer": "^2.2.3" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.2.tgz", + "integrity": "sha512-RpHaZ1h9LE7aALeQXmXrJkRG84ZxIsctEN2biEUmFyKpzFM3zZ35eUMcIzZFsw/2olQE6v69+esEqU2f1MKycg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.13" + } + }, "node_modules/@cypress/request": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.1.tgz", @@ -631,12 +729,101 @@ "node": ">=12" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", "dev": true }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "dev": true + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", @@ -1021,6 +1208,12 @@ "@types/node": "*" } }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, "node_modules/@webassemblyjs/ast": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", @@ -1263,6 +1456,15 @@ "acorn": "^8" } }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -1476,6 +1678,12 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -1919,6 +2127,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/camel-case": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", @@ -2197,6 +2414,12 @@ "color-support": "bin.js" } }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true + }, "node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", @@ -2347,6 +2570,32 @@ "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", "dev": true }, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -2361,6 +2610,40 @@ "node": ">= 8" } }, + "node_modules/css-functions-list": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.1.tgz", + "integrity": "sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==", + "dev": true, + "engines": { + "node": ">=12 || >=16" + } + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/cypress": { "version": "13.6.3", "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.6.3.tgz", @@ -2487,6 +2770,12 @@ "node": ">=0.10.0" } }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, "node_modules/default-gateway": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", @@ -2630,6 +2919,18 @@ "node": ">=6" } }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/dot-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", @@ -2888,6 +3189,61 @@ "node": ">=0.8.0" } }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -2901,19 +3257,47 @@ "node": ">=8.0.0" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "dependencies": { + "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": ">=4.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/esrecurse/node_modules/estraverse": { + "node_modules/eslint/node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", @@ -2922,55 +3306,196 @@ "node": ">=4.0" } }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, "engines": { - "node": ">=4.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, "engines": { - "node": ">= 0.6" + "node": ">=10.13.0" } }, - "node_modules/eventemitter2": { - "version": "6.4.7", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", - "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", - "dev": true - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, "engines": { - "node": ">=0.8.x" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter2": { + "version": "6.4.7", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", + "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", + "dev": true + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.0", "onetime": "^5.1.0", @@ -3131,6 +3656,12 @@ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", @@ -3185,6 +3716,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -3252,6 +3795,26 @@ "flat": "cli.js" } }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, "node_modules/follow-redirects": { "version": "1.15.5", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", @@ -3537,6 +4100,77 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globals/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/globby": { "version": "10.0.2", "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", @@ -3556,6 +4190,12 @@ "node": ">=8" } }, + "node_modules/globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", + "dev": true + }, "node_modules/globule": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.4.tgz", @@ -3620,6 +4260,12 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, "node_modules/handle-thing": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", @@ -3818,6 +4464,18 @@ "node": ">=14" } }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/http-cache-semantics": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", @@ -3990,6 +4648,31 @@ "node": ">= 4" } }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/import-local": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", @@ -4068,9 +4751,9 @@ } }, "node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz", + "integrity": "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==", "dev": true }, "node_modules/ipaddr.js": { @@ -4333,12 +5016,30 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", "dev": true }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -4357,6 +5058,12 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -4402,6 +5109,15 @@ "verror": "1.10.0" } }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -4411,6 +5127,12 @@ "node": ">=0.10.0" } }, + "node_modules/known-css-properties": { + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", + "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", + "dev": true + }, "node_modules/launch-editor": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", @@ -4430,6 +5152,19 @@ "node": "> 0.8" } }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -4504,12 +5239,24 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "node_modules/lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", "dev": true }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true + }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -4644,6 +5391,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -4974,6 +5737,30 @@ "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==", "dev": true }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -5374,6 +6161,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/ospath": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", @@ -5454,6 +6258,18 @@ "tslib": "^2.0.3" } }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -5563,43 +6379,146 @@ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", "dev": true }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss": { + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-resolve-nested-selector": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", + "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==", "dev": true }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/postcss-safe-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.0.tgz", + "integrity": "sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "engines": { - "node": ">=8.6" + "node": ">=18.0" }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "node_modules/postcss-selector-parser": { + "version": "6.0.15", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", + "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/pkg-dir": { + "node_modules/postcss-value-parser": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "dependencies": { - "find-up": "^4.0.0" + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=8" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/pretty-bytes": { @@ -6549,6 +7468,15 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", @@ -6762,6 +7690,173 @@ "node": ">=8" } }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylelint": { + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.2.1.tgz", + "integrity": "sha512-SfIMGFK+4n7XVAyv50CpVfcGYWG4v41y6xG7PqOgQSY8M/PgdK0SQbjWFblxjJZlN9jNq879mB4BCZHJRIJ1hA==", + "dev": true, + "dependencies": { + "@csstools/css-parser-algorithms": "^2.5.0", + "@csstools/css-tokenizer": "^2.2.3", + "@csstools/media-query-list-parser": "^2.1.7", + "@csstools/selector-specificity": "^3.0.1", + "balanced-match": "^2.0.0", + "colord": "^2.9.3", + "cosmiconfig": "^9.0.0", + "css-functions-list": "^3.2.1", + "css-tree": "^2.3.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "fastest-levenshtein": "^1.0.16", + "file-entry-cache": "^8.0.0", + "global-modules": "^2.0.0", + "globby": "^11.1.0", + "globjoin": "^0.1.4", + "html-tags": "^3.3.1", + "ignore": "^5.3.0", + "imurmurhash": "^0.1.4", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.29.0", + "mathml-tag-names": "^2.1.3", + "meow": "^13.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.33", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^7.0.0", + "postcss-selector-parser": "^6.0.15", + "postcss-value-parser": "^4.2.0", + "resolve-from": "^5.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^7.1.0", + "supports-hyperlinks": "^3.0.0", + "svg-tags": "^1.0.0", + "table": "^6.8.1", + "write-file-atomic": "^5.0.1" + }, + "bin": { + "stylelint": "bin/stylelint.mjs" + }, + "engines": { + "node": ">=18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + } + }, + "node_modules/stylelint/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/stylelint/node_modules/balanced-match": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", + "dev": true + }, + "node_modules/stylelint/node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/stylelint/node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/stylelint/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylelint/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stylelint/node_modules/meow": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylelint/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -6777,6 +7872,31 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/supports-hyperlinks": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz", + "integrity": "sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=14.18" + } + }, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -6789,6 +7909,67 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true + }, + "node_modules/table": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/table/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -6882,6 +8063,12 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, "node_modules/throttleit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz", @@ -6999,6 +8186,18 @@ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", "dev": true }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/type-fest": { "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", @@ -7621,6 +8820,31 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, + "node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/ws": { "version": "8.16.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", @@ -7702,6 +8926,18 @@ "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } } } diff --git a/package.json b/package.json index 504a206..c1a1c6a 100755 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "version": "1.1.4", "description": "jQuery auto-complete plugin", "main": "src/js/index.js", + "type": "module", "scripts": { "build": "mkdir -p dist && cp -r src/index.html src/files/ dist/ & npm run css & npm run js", "css": "node-sass ./src/sass/kompleter.scss ./dist/css/kompleter.min.css --output-style compressed", @@ -35,8 +36,11 @@ "@babel/runtime": "^7.23.6", "cypress": "^13.6.3", "esbuild-loader": "^4.1.0", + "eslint": "^8.57.0", "html-loader": "^5.0.0", "node-sass": "^9.0.0", + "prettier": "^3.2.5", + "stylelint": "^16.2.1", "terser": "^5.26.0", "webpack": "^5.89.0", "webpack-cli": "^5.1.4", diff --git a/src/js/index.js b/src/js/index.js index f316efd..8ff517f 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -1 +1 @@ -import kompletr from "./vanilla/kompleter" \ No newline at end of file +import kompletr from "./kompleter" \ No newline at end of file diff --git a/src/js/jquery/jquery.kompleter.js b/src/js/jquery/jquery.kompleter.js deleted file mode 100644 index 02e847c..0000000 --- a/src/js/jquery/jquery.kompleter.js +++ /dev/null @@ -1,593 +0,0 @@ -/** - * Completer is a free script that implements an auto-completion system using AJAX technologies - * - * Copyright (C) 2014 Lebleu Steve - * - * URL : https://fabrik.konfer.be/kompleter - - * This program is free software: you can redistribute it and/or modify - * it under the terms of the Creative Commons Licence. - * - * @author S. Lebleu - * @update 24/04/2017 - * - **/ - -(function(window, document, $) { - - "use strict"; - - var _app = {}; - - /** - * - * @type {{}} - * @private - */ - var _options = {}; - - /** - * - * @type {Array} - */ - var _suggestions = []; - - /** - * Index of the pointer into search results items set - * - * @type {number} - */ - var _pointer = -1; - - /** - * - * @type {string} - */ - var _previous_value =''; - - /** - * - * @type {*|HTMLElement} - s*/ - var _$wrapper = $('
', { 'id' : 'searcher', 'class' : 'form--light-search' }); - - /** - * Object who have current focus into search results items set - * - * @type {null} - */ - var _$focused = null; - - /** - * Object on who completer is applied - * - * @type {null} - */ - var _$input = null; - - /** - * jQueryHTMLElement template - * - * @type {null} - */ - var _$result = $('
', { 'id' : 'result', 'class' : 'form--search__result' }); - - /** - * Contains response elements as JSON data - * - * @type {{}} - */ - var _response = {}; - - /** - * Manage focus on search results items - * - * @returns {{}} - */ - var focus = function () { - - /** - * Set focus on element by add|remove class 'focus' - * Manage the pointer - * - * @param e - * @param keyCode - */ - var set = function(e, keyCode) { - - if(keyCode === 40) - { - if(_pointer !== -1) - { - remove(); - } - - _pointer++; - - add(); - } - else if(keyCode === 38) - { - remove(); - - _pointer--; - - if(_pointer !== -1) - { - add(); - } - } - }; - - /** - * Add focus on element - */ - var add = function() { - _$focused = _suggestions[_pointer]; - _suggestions[_pointer].addClass('focus'); - }; - - /** - * Remove focus on element - */ - var remove = function() { - _$focused = null; - _suggestions[_pointer].removeClass('focus'); - }; - - var that = {}; - that.set = set; - return that; - }; - - _app.focus = focus(); - - /** - * Filter data on _$input.val() according to _options parameters - * - * @returns {*} - */ - var filtering = function() { - - var filter = function(data) { - - return $.grep(data, function(element) { - - if(isNaN(_$input.val())) { - return _options.begin === true ? element[_options.field].toLowerCase().lastIndexOf(_$input.val().toLowerCase(), 0) === 0 : element[_options.field].toLowerCase().lastIndexOf(_$input.val().toLowerCase()) !== -1; - } - else { - return parseInt(_$input.val()) === parseInt(element[_options.field]); - } - }); - }; - - var that = {}; - that.filter = filter; - return that; - }; - - _app.filtering = filtering(); - - /** - * - * @returns {{}} - */ - var request = function() { - - var get = function() { - - try { - - var request = function() { - return $.getJSON({ - url : _options.url, - data: { expression : _$input.val() } - }); - }; - - var success = function(data) { - - if(typeof data === 'undefined' || data === null) { - window.console.log('Error'); // @todo manage error - } - - $(document).trigger('c.display', [ data ]); - }; - - var error = function(data, status, error) { - window.console.log('Error in request : ' + error); - }; - - var $ajax = request().done(success).fail(error); - - $.when($ajax).done(function() { - window.console.log('all done'); // todo manage callback - }); - } - catch(err) { - window.alert('Request cannot be done'); - } - }; - - var that = {}; - that.get = get; - return that; - }; - - _app.request = request(); - - /** - * - * @returns {{}} - */ - var view = function() { - - /** - * - */ - var init = function() { - _$input.wrap(_$wrapper); - _$input.after(_$result); - }; - - /** - * - * @param e - * @param params - */ - var display = function(e, params) { - - _options.beforeDisplay(e, params); - - $(document).trigger('c.display.before'); - - if(params === null) { - throw new Error('Variable params cannot be null'); - } - - _response = _app.filtering.filter(params); - - generate(_response); - - $(document).trigger('c.display.after'); - - _options.afterDisplay(e, _response); - }; - - /** - * Generate && append HTML view in result box - * - * @param data - */ - var generate = function(data) { - - try { - - var i = 0, l = data.length, $item, $span; - - if(l === 0) { - $item = $('
', { 'class' : 'item--result', 'html' : 'No result'}); - } - - _suggestions = []; - - _$result.html(''); - - for(i; i < l, i < _options.maxResults; i++) - { - if(typeof data[i] !== 'undefined') - { - var cls = i + 1 === l ? 'last' : ''; - - $item = $('
', { 'id' : i, 'class' : 'item--result ' + cls + ''}); - - for(var j = 0; j < _options.fieldsToDisplay.length; j++) - { - $span = $('', { 'class' : 'data-' + j + '', 'html' : data[i][_options.fieldsToDisplay[j].trim()]}); - $item[0].append($span[0]); - } - - _suggestions.push($item); - - _$result.append($item); - } - } - } - catch(e) { - window.console.log(e); - } - - }; - - /** - * Manage navigation into results set - * - * @param e - * @param keyCode - */ - var navigate = function(e, keyCode) { - - if(_pointer >= -1 && _pointer <= _suggestions.length - 1) - { - // Pointer out of data set, before first element - if(_pointer === -1) - { - if(keyCode === 40) - { - $(document).trigger('c.focus', [ keyCode ]); - } - } - // Pointer in data set, at last element - else if (_pointer === _suggestions.length - 1) - { - if(keyCode === 38) - { - $(document).trigger('c.focus', [ keyCode ]); - } - } - // Pointer into data set - else - { - $(document).trigger('c.focus', [ keyCode ]); - } - } - }; - - /** - * Insert the selected choice into _$input - */ - var complete = function(e) { - - var id = _$focused !== null ? _$focused.attr('id') : 0; - - _options.beforeComplete(e, _response, _response[id]); - - _$input.val(_response[id][_options.field]); - - $(document).trigger('c.complete.after'); - - _options.afterComplete(e, _response, _response[id]); - }; - - /** - * Show search results set - */ - var show = function() { - - switch(_options.animation) { - - case 'fade': - _$result.fadeIn(_options.animationSpeed); - break; - - case 'slide': - _$result.slideDown(_options.animationSpeed); - break; - - default: - _$result.fadeIn(_options.animationSpeed); - break; - } - - _pointer = -1; - }; - - /** - * Hide search results set - */ - var hide = function() { - - _pointer = -1; - - switch(_options.animation) { - - case 'fade': - _$result.fadeOut(_options.animationSpeed); - break; - - case 'slide': - _$result.slideUp(_options.animationSpeed); - break; - - default: - _$result.fadeOut(_options.animationSpeed); - break; - } - }; - - var that = {}; - - that.init = init; - that.display = display; - that.navigate = navigate; - that.complete = complete; - that.show = show; - that.hide = hide; - - return that; - }; - - _app.view = view(); - - /** - * - * @returns {{}} - */ - var handlers = function() { - - /** - * - */ - var init = function() { - - var $body = $('body'); - - /** - * Keyboard navigation - */ - _$input.on('keyup', function(e) { - - e = e || window.event; - - var keyCode = e.keyCode; - - // Up/Down into Results - if(keyCode === 38 || keyCode === 40) - { - $(document).trigger('c.navigate', [ keyCode ]); - } - // Write the selected item into _$input - else if (keyCode === 13) - { - $(document).trigger('c.complete'); - } - // Do request to retrieve data according to currents chars - else - { - if(_options.onChar <= _$input.val().length && _$input.val() !== _previous_value) { - $(document).trigger('c.request'); - } - } - }); - - /** - * Hide results set - */ - $body.on('click', function() { - $(document).trigger('c.complete.after'); - }); - - /** - * Click on result - */ - $body.on('click', '.item--result', function(e) { - - _options.beforeFocus(e, $(this)); - - _$focused = $(this); - - $(document).trigger('c.complete'); - - _options.afterFocus(e, $(this)); - }); - - /** - * - */ - $(document).on('c.complete', _app.view.complete); - - /** - * - */ - $(document).on('c.complete.after', _app.view.hide); - - /** - * - */ - $(document).on('c.request', _app.request.get); - - /** - * - */ - $(document).on('c.display.before', _app.view.show); - - /** - * - */ - $(document).on('c.display', _app.view.display); - - /** - * - */ - $(document).on('c.display.after', _options.afterDisplay); - - /** - * - */ - $(document).on('c.navigate', _app.view.navigate); - - /** - * - */ - $(document).on('c.focus', _app.focus.set); - - }; - - var that = {}; - that.init = init; - return that; - }; - - _app.handlers = handlers(); - - /** - * - * @param options - * @returns {$.fn} - */ - $.fn.kompleter = function(options) { - - // Ensure that only one kompleter exists - if (!$.data(document.body, 'kompleter')) { - - $.data(document.body, 'kompleter', true); - - return this.each(function() { - - // Set input - _$input = $(this); - - if(_$input.data('url') === null || _$input.data('url') === '') { - throw new Error('URL data attribute is mandatory'); - } - - if(_$input.data('filter-on') === null || _$input.data('filter-on') === '') { - throw new Error('Field data attribute is mandatory'); - } - - if(_$input.data('fields') === null || _$input.data('fields') === '') { - throw new Error('fieldsToDisplay data-attribute is mandatory'); - } - - options.url = _$input.data('url'); - options.field = _$input.data('filter-on'); - options.fieldsToDisplay = _$input.data('fields').split(','); - - // Apply any options to the settings, override the defaults - _options = $.fn.kompleter.defaults = $.extend({}, $.fn.kompleter.defaults, options); - - // Initialize view component - _app.view.init(); - - // Bind events - _app.handlers.init(); - - //return $(this); - }); - } - }; - - // Defaults - $.fn.kompleter.defaults = { - url: null, // Path of script or file REQUIRED - completerName: 'kompleter', // Element ID - animation: 'fade', // Fade, slide, none - animationSpeed: 350, // Animation in speed (ms) - begin: true, // Check by string begin if true, in all world if false - onChar: 2, // Launch request after n chars - maxResults: 10, // Number of max results to display - field: null, // Field on to apply filter REQUIRED - fieldsToDisplay: null, // Fields to display on the result item REQUIRED - beforeDisplay: function(e, dataset){}, // Callback fired before display of result set - afterDisplay: function(e, dataset){}, // Callback fired after display of result set - beforeFocus: function(e, element){}, // Callback fired before focus on result item - afterFocus: function(e, element){}, // Callback fired after focus on result item - beforeComplete: function(e, dataset, element){}, // Callback fired before insertion of result - afterComplete: function(e, dataset, element){} // Callback fired after insertion of result - }; - - $.kompleter = $.fn.kompleter; - -})(window, document, jQuery); - diff --git a/src/js/vanilla/kompleter.js b/src/js/kompleter.js similarity index 100% rename from src/js/vanilla/kompleter.js rename to src/js/kompleter.js diff --git a/src/js/vanilla/kompletr.animations.js b/src/js/kompletr.animations.js similarity index 100% rename from src/js/vanilla/kompletr.animations.js rename to src/js/kompletr.animations.js diff --git a/src/js/vanilla/kompletr.cache.js b/src/js/kompletr.cache.js similarity index 100% rename from src/js/vanilla/kompletr.cache.js rename to src/js/kompletr.cache.js diff --git a/src/js/vanilla/kompletr.dom.js b/src/js/kompletr.dom.js similarity index 100% rename from src/js/vanilla/kompletr.dom.js rename to src/js/kompletr.dom.js diff --git a/src/js/vanilla/kompletr.enums.js b/src/js/kompletr.enums.js similarity index 100% rename from src/js/vanilla/kompletr.enums.js rename to src/js/kompletr.enums.js diff --git a/src/js/vanilla/kompletr.events.js b/src/js/kompletr.events.js similarity index 100% rename from src/js/vanilla/kompletr.events.js rename to src/js/kompletr.events.js diff --git a/src/js/vanilla/kompletr.options.js b/src/js/kompletr.options.js similarity index 100% rename from src/js/vanilla/kompletr.options.js rename to src/js/kompletr.options.js diff --git a/src/js/vanilla/kompletr.properties.js b/src/js/kompletr.properties.js similarity index 100% rename from src/js/vanilla/kompletr.properties.js rename to src/js/kompletr.properties.js diff --git a/src/js/vanilla/kompletr.utils.js b/src/js/kompletr.utils.js similarity index 100% rename from src/js/vanilla/kompletr.utils.js rename to src/js/kompletr.utils.js diff --git a/src/js/vanilla/kompletr.validation.js b/src/js/kompletr.validation.js similarity index 100% rename from src/js/vanilla/kompletr.validation.js rename to src/js/kompletr.validation.js diff --git a/src/js/vanilla/kompletr.view-engine.js b/src/js/kompletr.view-engine.js similarity index 100% rename from src/js/vanilla/kompletr.view-engine.js rename to src/js/kompletr.view-engine.js diff --git a/webpack.config.js b/webpack.config.js index 97d0909..43e0c67 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -9,18 +9,6 @@ module.exports = { plugins: [ new WebpackConcatPlugin({ bundles: [ - { - src: [ - './src/js/jquery/jquery.kompleter.js', - ], - dest: './dist/js/jquery.kompleter.min.js', - transforms: { - after: async (code) => { - const minifiedCode = await terser.minify(code); - return minifiedCode.code; - }, - }, - }, { src: [ './src/js/vanilla/kompleter.js', From 2b46ea46ba1dada9374cbb9a59d84aecc391be89 Mon Sep 17 00:00:00 2001 From: Steve Date: Sun, 10 Mar 2024 21:36:37 +0100 Subject: [PATCH 15/48] chore: setup package.json --- jsdoc.json | 24 ++++++++++++++++++++ package.json | 48 +++++++++++++++++++++++++++++----------- src/js/kompleter.js | 21 ++++++++---------- src/js/kompletr.cache.js | 18 ++++++--------- src/js/kompletr.dom.js | 15 +++++++++++++ 5 files changed, 90 insertions(+), 36 deletions(-) create mode 100644 jsdoc.json diff --git a/jsdoc.json b/jsdoc.json new file mode 100644 index 0000000..c3f626c --- /dev/null +++ b/jsdoc.json @@ -0,0 +1,24 @@ +{ + "plugins": ["plugins/markdown"], + "recurseDepth": 10, + "source": { + "include": ["src/autoComplete.js"] + }, + "sourceType": "module", + "tags": { + "allowUnknownTags": true, + "dictionaries": ["jsdoc"] + }, + "templates": { + "cleverLinks": false, + "monospaceLinks": false + }, + "opts": { + "template": "templates/default", + "readme": "README.md", + "package": "package.json", + "encoding": "utf8", + "destination": "./out", + "recurse": true + } +} \ No newline at end of file diff --git a/package.json b/package.json index c1a1c6a..dd86f4c 100755 --- a/package.json +++ b/package.json @@ -4,18 +4,34 @@ "description": "jQuery auto-complete plugin", "main": "src/js/index.js", "type": "module", - "scripts": { - "build": "mkdir -p dist && cp -r src/index.html src/files/ dist/ & npm run css & npm run js", - "css": "node-sass ./src/sass/kompleter.scss ./dist/css/kompleter.min.css --output-style compressed", - "js": "webpack", - "cypress:open": "cypress open", - "cypress:run": "cypress run --browser chrome ./cypress", - "start": "webpack serve --hot" + "author": { + "name": "Steve Lebleu", + "email": "steve@konfer.be", + "url": "https://www.konfer.be" }, + "homepage": "https://github.com/steve-lebleu/kompletr", "repository": { "type": "git", - "url": "https://github.com/steve-lebleu/kompleter.git" + "url": "https://github.com/steve-lebleu/kompletr.git" + }, + "bugs": { + "url": "https://github.com/steve-lebleu/kompletr/issues", + "email": "steve@konfer.be" + }, + "demo": "", + "download": "", + "directories": { + "src": "src", + "dist": "dist", + "docs": "docs" }, + "files": [ + "dist", + "src" + ], + "browser": "dist/kompletr.min.js", + "unpkg": "dist/kompletr.min.js", + "module": "dist/kompletr.min.js", "keywords": [ "html", "html5", @@ -23,14 +39,20 @@ "css3", "vanilla", "javascript", - "jquery", "plugin", - "auto-complete" + "auto-complete", + "auto-completion", + "autocomplete", + "autocompletion" ], - "author": "Steve Lebleu", "license": "ISC", - "dependencies": { - "jquery": "^3.7.1" + "scripts": { + "build": "mkdir -p dist && cp -r src/index.html src/files/ dist/ & npm run css & npm run js", + "css": "node-sass ./src/sass/kompleter.scss ./dist/css/kompleter.min.css --output-style compressed", + "js": "webpack", + "cypress:open": "cypress open", + "cypress:run": "cypress run --browser chrome ./cypress", + "start": "webpack serve --hot" }, "devDependencies": { "@babel/runtime": "^7.23.6", diff --git a/src/js/kompleter.js b/src/js/kompleter.js index d017706..b18deed 100644 --- a/src/js/kompleter.js +++ b/src/js/kompleter.js @@ -7,7 +7,6 @@ import { ViewEngine } from './kompletr.view-engine'; import { EventManager } from './kompletr.events'; import { animation, origin } from './kompletr.enums'; -import { uuid } from './kompletr.utils'; import { fadeIn, fadeOut } from './kompletr.animations'; ((window) => { @@ -95,13 +94,13 @@ import { fadeIn, fadeOut } from './kompletr.animations'; kompletr.cache.emit(value); } else if (kompletr.callbacks.onKeyup) { kompletr.callbacks.onKeyup(value, (data) => { - EventManager.trigger('requestDone', { from: origin.local, data }) + EventManager.trigger(EventManager.event.requestDone, { from: origin.local, data }) }); } else { - EventManager.trigger('requestDone', { from: origin.local, data: kompletr.props.data }) + EventManager.trigger(EventManager.event.requestDone, { from: origin.local, data: kompletr.props.data }) } } catch(e) { - EventManager.trigger('error', e) + EventManager.trigger(EventManager.event.error, e) } }, @@ -146,9 +145,10 @@ import { fadeIn, fadeOut } from './kompletr.animations'; kompletr.dom.input.value = typeof kompletr.props.data[idx] === 'object' ? kompletr.props.data[idx][kompletr.options.propToMapAsValue] : kompletr.props.data[idx]; - kompletr.callbacks.onSelect(kompletr.props.data[idx]); // TODO more clean -> give details ? -> put in same handler listener dans selectDone + // TODO more clean -> give details ? -> put in same handler listener dans selectDone + kompletr.callbacks.onSelect(kompletr.props.data[idx]); - EventManager.trigger('selectDone'); + EventManager.trigger(EventManager.event.selectDone); }, }, @@ -160,7 +160,6 @@ import { fadeIn, fadeOut } from './kompletr.animations'; /** * @description kompletr events listeners of all religions. - * @dependency callbacks + dom + events + props + listeners */ listeners: { @@ -244,7 +243,7 @@ import { fadeIn, fadeOut } from './kompletr.animations'; if (kompletr.dom.input.value !== kompletr.props.previousValue) { kompletr.handlers.hydrate(kompletr.dom.input.value); } - EventManager.trigger('navigationDone'); + EventManager.trigger(EventManager.event.navigationDone); break } }, @@ -305,7 +304,7 @@ import { fadeIn, fadeOut } from './kompletr.animations'; // 2. Assign - if(data) { + if(data) { // TODO data should be a Promise kompletr.props = new Properties({ data }); } @@ -327,10 +326,8 @@ import { fadeIn, fadeOut } from './kompletr.animations'; // 4. Listeners + kompletr.dom.body.addEventListener('click', kompletr.listeners.onHide); kompletr.dom.input.addEventListener('keyup', kompletr.listeners.onKeyup); - - const body = document.getElementsByTagName('body')[0]; - body.addEventListener('click', kompletr.listeners.onHide); document.addEventListener('kompletr.select.done', kompletr.listeners.onHide); document.addEventListener('kompletr.navigation.done', kompletr.listeners.onNavigationDone); diff --git a/src/js/kompletr.cache.js b/src/js/kompletr.cache.js index 0e07fc2..6622e71 100644 --- a/src/js/kompletr.cache.js +++ b/src/js/kompletr.cache.js @@ -1,5 +1,4 @@ -import { animation, origin } from './kompletr.enums'; -import { build, uuid } from './kompletr.utils'; +import { origin } from './kompletr.enums'; /** * @description Kompletr caching mechanism implementation. @@ -32,7 +31,6 @@ export class Cache { * @returns {Void} */ emit(string) { - console.log('get from the cache') window.caches.open(this._name) .then(cache => { cache.match(string) @@ -41,7 +39,7 @@ export class Cache { }); }) .catch(e => { - this._eventManager.trigger('error', e); + this._eventManager.trigger(this._eventManager.event.error, e); }); } @@ -86,17 +84,15 @@ export class Cache { * @returns {Void} */ set({ string, data }) { - console.log('set the cache') - data = JSON.stringify(data); window.caches.open(this._name) .then(cache => { - const headers = new Headers; - headers.set('content-type', 'application/json'); - headers.set('cache-control', `max-age=${this._duration}`); - cache.put(`/${string}`, new Response(data, { headers })); + const headers = new Headers() + .set('Content-Type', 'application/json') + .set('Cache-Control', `max-age=${this._duration}`); + cache.put(`/${string}`, new Response(JSON.stringify(data), { headers })); }) .catch(e => { - this._eventManager.trigger('error', e); + this._eventManager.trigger(this._eventManager.event.error, e); }); } }; \ No newline at end of file diff --git a/src/js/kompletr.dom.js b/src/js/kompletr.dom.js index 5048b12..b23bc45 100644 --- a/src/js/kompletr.dom.js +++ b/src/js/kompletr.dom.js @@ -5,6 +5,11 @@ import { build } from './kompletr.utils'; */ export class DOM { + /** + * @description Body tag + */ + _body = null; + /** * @description Main input text */ @@ -21,6 +26,8 @@ export class DOM { _result = null; constructor(input, options = { theme: 'light' }) { + this._body = document.getElementsByTagName('body')[0]; + this._input = input instanceof HTMLInputElement ? input : document.getElementById(input); this._result = build('div', [ { id: 'kpl-result' }, { class: 'form--search__result' } ]); @@ -29,6 +36,14 @@ export class DOM { this._input.parentElement.appendChild(this._result); } + get body() { + return this._body; + } + + set body(value) { + this._body = value; + } + get input() { return this._input; } From a5ab05251b44a189a1801f68fdfe71a29856862c Mon Sep 17 00:00:00 2001 From: Steve Date: Mon, 11 Mar 2024 12:54:15 +0100 Subject: [PATCH 16/48] chore: webpack setup, fix live reload, little code clean up --- .gitignore | 4 +- jest.config.js | 56 + package-lock.json | 3234 ++++++++++++++++++++++++-- package.json | 27 +- src/index.html | 2 +- src/js/index.js | 2 +- src/js/kompletr.cache.js | 34 +- src/js/kompletr.dom.js | 2 +- src/js/kompletr.enums.js | 5 +- src/js/kompletr.events.js | 6 +- src/js/{kompleter.js => kompletr.js} | 74 +- src/js/kompletr.view-engine.js | 14 +- test/kompletr.dom.spec.js | 44 + test/kompletr.utils.spec.js | 39 + test/kompletr.validation.spec.js | 63 + test/kompletr.view-engine.spec.js | 60 + test/setup.js | 2 + webpack.config.js | 33 +- webpack.config.prod.js | 20 + 19 files changed, 3425 insertions(+), 296 deletions(-) create mode 100644 jest.config.js rename src/js/{kompleter.js => kompletr.js} (82%) create mode 100644 test/kompletr.dom.spec.js create mode 100644 test/kompletr.utils.spec.js create mode 100644 test/kompletr.validation.spec.js create mode 100644 test/kompletr.view-engine.spec.js create mode 100644 test/setup.js create mode 100644 webpack.config.prod.js diff --git a/.gitignore b/.gitignore index a970bb7..7c8b486 100644 --- a/.gitignore +++ b/.gitignore @@ -14,7 +14,7 @@ tests/report # Retrieved by bower src/vendors/* -# Do not push dist +# Do not push dist, build and local api dist/ - +build/ api/ \ No newline at end of file diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000..c8dd14a --- /dev/null +++ b/jest.config.js @@ -0,0 +1,56 @@ +/** + * For a detailed explanation regarding each configuration property, visit: https://jestjs.io/docs/en/configuration.html + */ +export default { + /** + * Makes Jest run in non-browser mode. This is needed to prevent Mongoose to think it's running in a web browser + * which causes it to use a different ObjectId implementation, causing faulty behaviour. + */ + testEnvironment: 'jest-environment-jsdom', + + /** Only look for spec.js files in the src folder, mainly to avoid running the Cypress spec files as Jest tests. */ + testMatch: ['**/*.spec.js'], + + /** + * Code coverage settings. + * v8 is currently (2021-03-22) a faster but more experimental coverage instrumenter that comes with V8. + * It also knows all the supported syntax of current Node version (unlike the default babel parser). + * The CI pipelines require cobertura and text for it's reporting. + * The `collectCoverageFrom` option is used to prevent the report from only considering files that were + * loaded by the tests. + */ + // coverageProvider: 'v8', + collectCoverage: true, + coverageDirectory: 'build/code-coverage', + coverageReporters: ['cobertura', 'text'], + collectCoverageFrom: [ + 'src/**/*.js' + ], + + injectGlobals: true, + + moduleNameMapper: {}, + + /** + * Restores the mocks e.g. `jest.spyOn()` to be undone between tests. + * This prevents tests from seeing the mocks from a previous `it()` (which would make them order dependent and is bad). + */ + restoreMocks: true, + + /** + * Configures test reporters, including xUnit XML output (for Jenkins). + */ + reporters: [ + 'default', // Keep Jest default reporter + ['jest-junit', { outputDirectory: 'build/unit-tests' }], + ], + + setupFilesAfterEnv: [ + "/test/setup.js", + ], + + transform: {}, + + // Indicates whether each individual test should be reported during the run + verbose: true, +}; diff --git a/package-lock.json b/package-lock.json index fe3faf2..676b7d2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,15 +8,17 @@ "name": "kompleter", "version": "1.1.4", "license": "ISC", - "dependencies": { - "jquery": "^3.7.1" - }, "devDependencies": { "@babel/runtime": "^7.23.6", + "@jest/globals": "^29.7.0", "cypress": "^13.6.3", "esbuild-loader": "^4.1.0", "eslint": "^8.57.0", "html-loader": "^5.0.0", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "jest-junit": "^16.0.0", + "jsdom": "^24.0.0", "node-sass": "^9.0.0", "prettier": "^3.2.5", "stylelint": "^16.2.1", @@ -36,6 +38,19 @@ "node": ">=0.10.0" } }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@babel/code-frame": { "version": "7.23.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", @@ -111,6 +126,216 @@ "node": ">=4" } }, + "node_modules/@babel/compat-data": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.0.tgz", + "integrity": "sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.24.0", + "@babel/parser": "^7.24.0", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.0", + "@babel/types": "^7.24.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.6", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", + "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-validator-identifier": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", @@ -120,6 +345,29 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.0.tgz", + "integrity": "sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==", + "dev": true, + "dependencies": { + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.0", + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/highlight": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", @@ -196,147 +444,400 @@ "node": ">=4" } }, - "node_modules/@babel/runtime": { - "version": "7.23.8", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz", - "integrity": "sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==", + "node_modules/@babel/parser": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.0.tgz", + "integrity": "sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==", "dev": true, - "dependencies": { - "regenerator-runtime": "^0.14.0" + "bin": { + "parser": "bin/babel-parser.js" }, "engines": { - "node": ">=6.9.0" + "node": ">=6.0.0" } }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, - "optional": true, - "engines": { - "node": ">=0.1.90" + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@csstools/css-parser-algorithms": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.0.tgz", - "integrity": "sha512-YfEHq0eRH98ffb5/EsrrDspVWAuph6gDggAE74ZtjecsmyyWpW768hOyiONa8zwWGbIWYfa2Xp4tRTrpQQ00CQ==", + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": "^14 || ^16 || >=18" + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { - "@csstools/css-tokenizer": "^2.2.3" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@csstools/css-tokenizer": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.3.tgz", - "integrity": "sha512-pp//EvZ9dUmGuGtG1p+n17gTHEOqu9jO+FiCUjNN3BDmyhdA2Jq9QsVeR7K8/2QCK17HSsioPlTW9ZkzoWb3Lg==", + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": "^14 || ^16 || >=18" + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@csstools/media-query-list-parser": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.8.tgz", - "integrity": "sha512-DiD3vG5ciNzeuTEoh74S+JMjQDs50R3zlxHnBnfd04YYfA/kh2KiBCGhzqLxlJcNq+7yNQ3stuZZYLX6wK/U2g==", + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": "^14 || ^16 || >=18" + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.6.0", - "@csstools/css-tokenizer": "^2.2.3" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@csstools/selector-specificity": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.2.tgz", - "integrity": "sha512-RpHaZ1h9LE7aALeQXmXrJkRG84ZxIsctEN2biEUmFyKpzFM3zZ35eUMcIzZFsw/2olQE6v69+esEqU2f1MKycg==", + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": "^14 || ^16 || >=18" + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" }, "peerDependencies": { - "postcss-selector-parser": "^6.0.13" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@cypress/request": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.1.tgz", - "integrity": "sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ==", + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", + "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", "dev": true, "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "http-signature": "~1.3.6", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "performance-now": "^2.1.0", - "qs": "6.10.4", - "safe-buffer": "^5.1.2", - "tough-cookie": "^4.1.3", - "tunnel-agent": "^0.6.0", - "uuid": "^8.3.2" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { - "node": ">= 6" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@cypress/xvfb": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", - "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", + "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz", + "integrity": "sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.0.tgz", + "integrity": "sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.0.tgz", + "integrity": "sha512-YfEHq0eRH98ffb5/EsrrDspVWAuph6gDggAE74ZtjecsmyyWpW768hOyiONa8zwWGbIWYfa2Xp4tRTrpQQ00CQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^2.2.3" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.3.tgz", + "integrity": "sha512-pp//EvZ9dUmGuGtG1p+n17gTHEOqu9jO+FiCUjNN3BDmyhdA2Jq9QsVeR7K8/2QCK17HSsioPlTW9ZkzoWb3Lg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + } + }, + "node_modules/@csstools/media-query-list-parser": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.8.tgz", + "integrity": "sha512-DiD3vG5ciNzeuTEoh74S+JMjQDs50R3zlxHnBnfd04YYfA/kh2KiBCGhzqLxlJcNq+7yNQ3stuZZYLX6wK/U2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^2.6.0", + "@csstools/css-tokenizer": "^2.2.3" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.2.tgz", + "integrity": "sha512-RpHaZ1h9LE7aALeQXmXrJkRG84ZxIsctEN2biEUmFyKpzFM3zZ35eUMcIzZFsw/2olQE6v69+esEqU2f1MKycg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.13" + } + }, + "node_modules/@cypress/request": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.1.tgz", + "integrity": "sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ==", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "http-signature": "~1.3.6", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "performance-now": "^2.1.0", + "qs": "6.10.4", + "safe-buffer": "^5.1.2", + "tough-cookie": "^4.1.3", + "tunnel-agent": "^0.6.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@cypress/xvfb": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", + "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", "dev": true, "dependencies": { "debug": "^3.1.0", @@ -824,45 +1325,398 @@ "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "dev": true }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=8" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "engines": { - "node": ">=6.0.0" + "dependencies": { + "sprintf-js": "~1.0.2" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, - "engines": { - "node": ">=6.0.0" + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" } }, @@ -873,9 +1727,9 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", - "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -950,6 +1804,30 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, "node_modules/@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", @@ -959,6 +1837,47 @@ "node": ">= 10" } }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", + "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, "node_modules/@types/body-parser": { "version": "1.19.5", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", @@ -1057,6 +1976,15 @@ "@types/node": "*" } }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/http-errors": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", @@ -1072,6 +2000,41 @@ "@types/node": "*" } }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jsdom": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", + "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" + } + }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -1189,6 +2152,18 @@ "@types/node": "*" } }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "dev": true + }, "node_modules/@types/ws": { "version": "8.5.10", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", @@ -1198,6 +2173,21 @@ "@types/node": "*" } }, + "node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, "node_modules/@types/yauzl": { "version": "2.10.3", "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", @@ -1416,6 +2406,13 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", + "dev": true + }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -1447,6 +2444,16 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", + "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", + "dev": true, + "dependencies": { + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" + } + }, "node_modules/acorn-import-assertions": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", @@ -1465,6 +2472,15 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-walk": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -1780,20 +2796,136 @@ "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", "dev": true }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, - "funding": [ - { - "type": "github", + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", "url": "https://github.com/sponsors/feross" }, { @@ -1978,6 +3110,15 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, "node_modules/buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -2226,6 +3367,15 @@ "node": ">=8" } }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/check-more-types": { "version": "2.24.0", "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", @@ -2295,6 +3445,12 @@ "node": ">=8" } }, + "node_modules/cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", + "dev": true + }, "node_modules/clean-css": { "version": "5.3.3", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", @@ -2387,6 +3543,22 @@ "node": ">=6" } }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -2549,6 +3721,12 @@ "node": ">= 0.6" } }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, "node_modules/cookie": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", @@ -2596,6 +3774,27 @@ } } }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -2644,6 +3843,24 @@ "node": ">=4" } }, + "node_modules/cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.0.1.tgz", + "integrity": "sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==", + "dev": true, + "dependencies": { + "rrweb-cssom": "^0.6.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/cypress": { "version": "13.6.3", "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.6.3.tgz", @@ -2713,6 +3930,19 @@ "node": ">=0.10" } }, + "node_modules/data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dev": true, + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/dayjs": { "version": "1.11.10", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", @@ -2770,12 +4000,41 @@ "node": ">=0.10.0" } }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "dev": true + }, + "node_modules/dedent": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/default-gateway": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", @@ -2889,12 +4148,30 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/detect-node": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "dev": true }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -2931,6 +4208,19 @@ "node": ">=6.0.0" } }, + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "deprecated": "Use your platform's native DOMException instead", + "dev": true, + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/dot-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", @@ -2963,6 +4253,18 @@ "integrity": "sha512-M4+u22ZJGpk4RY7tne6W+APkZhnnhmAH48FNl8iEFK2lEgob+U5rUQsIqQhvAwCXYpfd3H20pHK/ENsCvwTbsA==", "dev": true }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -3189,6 +4491,36 @@ "node": ">=0.8.0" } }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/eslint": { "version": "8.57.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", @@ -3396,6 +4728,19 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/esquery": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", @@ -3521,6 +4866,31 @@ "node": ">=4" } }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/express": { "version": "4.18.2", "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", @@ -3692,6 +5062,15 @@ "node": ">=0.8.0" } }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, "node_modules/fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -3969,6 +5348,15 @@ "node": ">= 4.0.0" } }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -3993,6 +5381,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/get-stdin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", @@ -4398,6 +5795,18 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/html-entities": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", @@ -4414,6 +5823,12 @@ } ] }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, "node_modules/html-loader": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-5.0.0.tgz", @@ -4840,6 +6255,15 @@ "node": ">=8" } }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -4916,6 +6340,12 @@ "node": ">=0.10.0" } }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -4985,54 +6415,1109 @@ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", "dev": true }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", + "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==", "dev": true, "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" }, "engines": { - "node": ">= 10.13.0" + "node": ">=10" } }, - "node_modules/jquery": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", - "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==" - }, - "node_modules/js-base64": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", - "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/jest-changed-files/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-changed-files/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/jest-changed-files/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", + "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/jsdom": "^20.0.0", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0", + "jsdom": "^20.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jest-environment-jsdom/node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom/node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/jest-environment-jsdom/node_modules/data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-environment-jsdom/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-environment-jsdom/node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-environment-jsdom/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-environment-jsdom/node_modules/jsdom": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", + "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.6", + "acorn": "^8.8.1", + "acorn-globals": "^7.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.2", + "decimal.js": "^10.4.2", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0", + "ws": "^8.11.0", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jest-environment-jsdom/node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-environment-jsdom/node_modules/w3c-xmlserializer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "dev": true, + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/jest-environment-jsdom/node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-environment-jsdom/node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-environment-jsdom/node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-environment-jsdom/node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-haste-map/node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-junit": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-16.0.0.tgz", + "integrity": "sha512-A94mmw6NfJab4Fg/BlvVOUXzXgF0XIH6EmTgJ5NDPp4xoKq0Kr7sErb+4Xs9nZvu58pJojz5RFGpqnZYJTrRfQ==", + "dev": true, + "dependencies": { + "mkdirp": "^1.0.4", + "strip-ansi": "^6.0.1", + "uuid": "^8.3.2", + "xml": "^1.0.1" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner/node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-runner/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/js-base64": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", "dev": true }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "node_modules/jsdom": { + "version": "24.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.0.0.tgz", + "integrity": "sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A==", + "dev": true, + "dependencies": { + "cssstyle": "^4.0.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.4.3", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.7", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.6.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.3", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0", + "ws": "^8.16.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^2.11.2" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/jsdom/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jsdom/node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "node_modules/jsdom/node_modules/https-proxy-agent": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", "dev": true, "dependencies": { - "argparse": "^2.0.1" + "agent-base": "^7.0.2", + "debug": "4" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">= 14" } }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } }, "node_modules/json-buffer": { "version": "3.0.1", @@ -5127,6 +7612,15 @@ "node": ">=0.10.0" } }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/known-css-properties": { "version": "0.29.0", "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", @@ -5152,6 +7646,15 @@ "node": "> 0.8" } }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -5343,6 +7846,21 @@ "node": ">=10" } }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/make-fetch-happen": { "version": "10.2.1", "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", @@ -5379,6 +7897,15 @@ "node": ">=12" } }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, "node_modules/map-obj": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", @@ -5983,6 +8510,12 @@ "imurmurhash": "^0.1.4" } }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, "node_modules/node-releases": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", @@ -6084,6 +8617,12 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/nwsapi": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", + "dev": true + }, "node_modules/object-inspect": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", @@ -6406,6 +8945,15 @@ "node": ">=0.10.0" } }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -6533,6 +9081,32 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -6576,6 +9150,19 @@ "node": ">= 4" } }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -6629,6 +9216,22 @@ "node": ">=6" } }, + "node_modules/pure-rand": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", + "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, "node_modules/qs": { "version": "6.10.4", "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", @@ -6721,6 +9324,12 @@ "node": ">= 0.8" } }, + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "node_modules/read-pkg": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", @@ -6944,6 +9553,15 @@ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -6997,6 +9615,12 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rrweb-cssom": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", + "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", + "dev": true + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -7073,6 +9697,18 @@ "node": ">=12" } }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, "node_modules/schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", @@ -7381,6 +10017,12 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -7549,6 +10191,12 @@ "wbuf": "^1.7.3" } }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, "node_modules/sshpk": { "version": "1.18.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", @@ -7586,6 +10234,27 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -7643,6 +10312,19 @@ "safe-buffer": "~5.2.0" } }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -7669,6 +10351,15 @@ "node": ">=8" } }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -7915,6 +10606,12 @@ "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", "dev": true }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, "node_modules/table": { "version": "6.8.1", "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", @@ -8063,6 +10760,20 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -8102,6 +10813,21 @@ "node": ">=8.17.0" } }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -8147,6 +10873,18 @@ "node": ">= 4.0.0" } }, + "node_modules/tr46": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz", + "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", + "dev": true, + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/trim-newlines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", @@ -8198,6 +10936,15 @@ "node": ">= 0.8.0" } }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/type-fest": { "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", @@ -8353,6 +11100,20 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/v8-to-istanbul": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -8386,6 +11147,27 @@ "extsprintf": "^1.2.0" } }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, "node_modules/watchpack": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", @@ -8408,6 +11190,15 @@ "minimalistic-assert": "^1.0.0" } }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/webpack": { "version": "5.89.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", @@ -8767,6 +11558,52 @@ "node": ">=0.8.0" } }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "dev": true, + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-url": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz", + "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==", + "dev": true, + "dependencies": { + "tr46": "^5.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -8866,6 +11703,27 @@ } } }, + "node_modules/xml": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", + "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==", + "dev": true + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/package.json b/package.json index dd86f4c..4809019 100755 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "kompleter", "version": "1.1.4", - "description": "jQuery auto-complete plugin", + "description": "Vanilla autocomplete module", "main": "src/js/index.js", "type": "module", "author": { @@ -29,9 +29,9 @@ "dist", "src" ], - "browser": "dist/kompletr.min.js", - "unpkg": "dist/kompletr.min.js", - "module": "dist/kompletr.min.js", + "browser": "dist/js/kompletr.min.js", + "unpkg": "dist/js/kompletr.min.js", + "module": "dist/js/kompletr.min.js", "keywords": [ "html", "html5", @@ -47,26 +47,33 @@ ], "license": "ISC", "scripts": { - "build": "mkdir -p dist && cp -r src/index.html src/files/ dist/ & npm run css & npm run js", - "css": "node-sass ./src/sass/kompleter.scss ./dist/css/kompleter.min.css --output-style compressed", - "js": "webpack", + "build": "mkdir -p dist && cp -r src/index.html dist/ & npm run build:css & npm run build:js", + "build:css": "node-sass ./src/sass/kompleter.scss ./dist/css/kompleter.min.css --output-style compressed", + "build:js": "webpack", "cypress:open": "cypress open", "cypress:run": "cypress run --browser chrome ./cypress", - "start": "webpack serve --hot" + "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js ./test/**.spec.js", + "wp:build": "webpack --mode production --config ./webpack.config.prod.js", + "wp:dev": "webpack serve --hot --mode development --config ./webpack.config.js", + "wp:de": "webpack serve --hot", + "wp:deve": "webpack serve --live-reload" }, "devDependencies": { "@babel/runtime": "^7.23.6", + "@jest/globals": "^29.7.0", "cypress": "^13.6.3", "esbuild-loader": "^4.1.0", "eslint": "^8.57.0", "html-loader": "^5.0.0", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "jest-junit": "^16.0.0", + "jsdom": "^24.0.0", "node-sass": "^9.0.0", "prettier": "^3.2.5", "stylelint": "^16.2.1", - "terser": "^5.26.0", "webpack": "^5.89.0", "webpack-cli": "^5.1.4", - "webpack-concat-files-plugin": "^0.5.2", "webpack-dev-server": "^4.15.1" } } diff --git a/src/index.html b/src/index.html index a7ddb66..5990b0d 100644 --- a/src/index.html +++ b/src/index.html @@ -3,7 +3,7 @@ - Auto-complete plugin - Kompleter.js + Vanilla autocomplete module - Kømpletr.js diff --git a/src/js/index.js b/src/js/index.js index 8ff517f..38a1184 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -1 +1 @@ -import kompletr from "./kompleter" \ No newline at end of file +import kompletr from "./kompletr.js" \ No newline at end of file diff --git a/src/js/kompletr.cache.js b/src/js/kompletr.cache.js index 6622e71..996842e 100644 --- a/src/js/kompletr.cache.js +++ b/src/js/kompletr.cache.js @@ -1,21 +1,24 @@ -import { origin } from './kompletr.enums'; +import { EventManager } from "./kompletr.events.js"; - /** - * @description Kompletr caching mechanism implementation. - * - * @see https://developer.mozilla.org/en-US/docs/Web/API/Cache - * @see https://web.dev/articles/cache-api-quick-guide - * - * @todo: Full review / validation of the Cache feature - */ +/** + * @description Kompletr simple caching mechanism implementation. + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/Cache + * @see https://web.dev/articles/cache-api-quick-guide + */ export class Cache { + /** + * @description Cache name value + */ _name = null; + /** + * @description Cache timelife duration + */ _duration = null; - constructor(eventManager, duration = 0, name = 'kompletr.cache') { - this._eventManager = eventManager; + constructor(duration = 0, name = 'kompletr.cache') { this._name = name; this._duration = duration; } @@ -24,22 +27,23 @@ export class Cache { * @description Retrieve the data stored in cache and dispatch event with * * @param {String} string Input value of the current request as string + * @param {Function} done Callback function * * @emits CustomEvent 'kompltetr.request.done' { from, data } * @emits CustomEvent 'kompltetr.error' { error } * * @returns {Void} */ - emit(string) { + get(string, done) { window.caches.open(this._name) .then(cache => { cache.match(string) .then(async (data) => { - this._eventManager.trigger('requestDone', { from: origin.cache, data: await data.json() }); + done(await data.json()); }); }) .catch(e => { - this._eventManager.trigger(this._eventManager.event.error, e); + EventManager.trigger(EventManager.event.error, e); }); } @@ -92,7 +96,7 @@ export class Cache { cache.put(`/${string}`, new Response(JSON.stringify(data), { headers })); }) .catch(e => { - this._eventManager.trigger(this._eventManager.event.error, e); + EventManager.trigger(EventManager.event.error, e); }); } }; \ No newline at end of file diff --git a/src/js/kompletr.dom.js b/src/js/kompletr.dom.js index b23bc45..ff6bea0 100644 --- a/src/js/kompletr.dom.js +++ b/src/js/kompletr.dom.js @@ -1,4 +1,4 @@ -import { build } from './kompletr.utils'; +import { build } from './kompletr.utils.js'; /** * @description diff --git a/src/js/kompletr.enums.js b/src/js/kompletr.enums.js index de60bb4..e02b012 100644 --- a/src/js/kompletr.enums.js +++ b/src/js/kompletr.enums.js @@ -3,7 +3,7 @@ */ const animation = Object.freeze({ fadeIn: 'fadeIn', - slideUp: 'slideUp' + slideUp: 'slideUp', }); /** @@ -11,7 +11,8 @@ const animation = Object.freeze({ */ const origin = Object.freeze({ cache: 'cache', - local: 'local' + callback: 'callback', + local: 'local', }); export { animation, origin } \ No newline at end of file diff --git a/src/js/kompletr.events.js b/src/js/kompletr.events.js index 92ddebd..8113a0f 100644 --- a/src/js/kompletr.events.js +++ b/src/js/kompletr.events.js @@ -9,7 +9,7 @@ export class EventManager { error: 'error', navigationDone: 'navigationDone', renderDone: 'renderDone', - requestDone: 'requestDone', + dataDone: 'dataDone', resultDone: 'resultDone', selectDone: 'selectDone' }) @@ -49,7 +49,7 @@ export class EventManager { * * @returns {CustomEvent} */ - static renderDone = (detail = { }) => new CustomEvent('kompletr.render.done', { + static renderDone = (detail = {}) => new CustomEvent('kompletr.render.done', { detail, bubble: true, cancelable: false, @@ -63,7 +63,7 @@ export class EventManager { * * @returns {CustomEvent} */ - static requestDone = (detail = { from: '', data: null }) => new CustomEvent('kompletr.request.done', { + static dataDone = (detail = { from: '', data: null }) => new CustomEvent('kompletr.data.done', { detail, bubble: true, cancelable: false, diff --git a/src/js/kompleter.js b/src/js/kompletr.js similarity index 82% rename from src/js/kompleter.js rename to src/js/kompletr.js index b18deed..cedbb3b 100644 --- a/src/js/kompleter.js +++ b/src/js/kompletr.js @@ -1,13 +1,13 @@ -import { Validation } from './kompletr.validation'; -import { Options } from './kompletr.options'; -import { Cache } from './kompletr.cache'; -import { Properties } from './kompletr.properties'; -import { DOM } from './kompletr.dom'; -import { ViewEngine } from './kompletr.view-engine'; -import { EventManager } from './kompletr.events'; +import { Validation } from './kompletr.validation.js'; +import { Options } from './kompletr.options.js'; +import { Cache } from './kompletr.cache.js'; +import { Properties } from './kompletr.properties.js'; +import { DOM } from './kompletr.dom.js'; +import { ViewEngine } from './kompletr.view-engine.js'; +import { EventManager } from './kompletr.events.js'; -import { animation, origin } from './kompletr.enums'; -import { fadeIn, fadeOut } from './kompletr.animations'; +import { animation, origin } from './kompletr.enums.js'; +import { fadeIn, fadeOut } from './kompletr.animations.js'; ((window) => { if (window.kompletr) { @@ -81,26 +81,28 @@ import { fadeIn, fadeOut } from './kompletr.animations'; * * @param {String} value Current input value * - * @emits CustomEvent 'kompletr.request.done' { from, queryString, data } + * @emits CustomEvent 'kompletr.request.done' { from, data } * @emits CustomEvent 'kompletr.error' { error } * * @returns {Void} + * + * @todo opotions.data should returns Promise, and same for the onKeyup callback */ hydrate: async function(value) { try { - // TODO manage cache -> if data available in the cache, get it from there - if (kompletr.cache.isActive() && await kompletr.cache.isValid(value)) { - kompletr.cache.emit(value); + kompletr.cache.get(value, (data) => { + EventManager.trigger(EventManager.event.dataDone, { from: origin.cache, data }); + }); } else if (kompletr.callbacks.onKeyup) { kompletr.callbacks.onKeyup(value, (data) => { - EventManager.trigger(EventManager.event.requestDone, { from: origin.local, data }) + EventManager.trigger(EventManager.event.dataDone, { from: origin.callback, data }); }); } else { - EventManager.trigger(EventManager.event.requestDone, { from: origin.local, data: kompletr.props.data }) + EventManager.trigger(EventManager.event.dataDone, { from: origin.local, data: kompletr.props.data }); } } catch(e) { - EventManager.trigger(EventManager.event.error, e) + EventManager.trigger(EventManager.event.error, e); } }, @@ -126,7 +128,6 @@ import { fadeIn, fadeOut } from './kompletr.animations'; kompletr.props.pointer++; } - // todo trigger something ? kompletr.viewEngine.focus(kompletr.props.pointer, 'remove'); kompletr.viewEngine.focus(kompletr.props.pointer, 'add'); }, @@ -140,16 +141,10 @@ import { fadeIn, fadeOut } from './kompletr.animations'; * * @returns {Void} */ - select: function (idx = 0) { - // TODO as a view part ? - + select: function (idx = 0) { kompletr.dom.input.value = typeof kompletr.props.data[idx] === 'object' ? kompletr.props.data[idx][kompletr.options.propToMapAsValue] : kompletr.props.data[idx]; - - // TODO more clean -> give details ? -> put in same handler listener dans selectDone - kompletr.callbacks.onSelect(kompletr.props.data[idx]); - + kompletr.callbacks.onSelect(kompletr.props.data[idx]); EventManager.trigger(EventManager.event.selectDone); - }, }, @@ -175,9 +170,9 @@ import { fadeIn, fadeOut } from './kompletr.animations'; /** * @description 'body.click' && kompletr.select.done listeners */ - onHide: (e) => { + onSelectDone: (e) => { fadeOut(kompletr.dom.result); - EventManager.trigger('navigationDone'); + EventManager.trigger(EventManager.event.navigationDone); }, /** @@ -189,9 +184,10 @@ import { fadeIn, fadeOut } from './kompletr.animations'; /** * @description CustomEvent 'kompletr.request.done' listener + * + * @todo Check something else to determine if we filter or not -> currently just the presence of onKeyup callback */ - onRequestDone: async (e) => { - + onDataDone: async (e) => { kompletr.props.data = e.detail.data; let data = kompletr.props.data.map((record, idx) => ({ idx, data: record }) ); @@ -206,18 +202,13 @@ import { fadeIn, fadeOut } from './kompletr.animations'; }); } - // With CB, the utility is to prevent some HTTP calls, and to retrieve data in small set as well - // Without CB, the utility is to retrieve data in a small lot - - // TODO -> data doit retourner Promise, de même que le callback onKeyup - - if (kompletr.cache.isActive() && await kompletr.cache.isValid(kompletr.dom.input.value) === false) { + const cacheIsActiveAndNotValid = kompletr.cache.isActive() && await kompletr.cache.isValid(kompletr.dom.input.value) === false; + if (cacheIsActiveAndNotValid) { kompletr.cache.set({ string: kompletr.dom.input.value, data: e.detail.data }); } - // TODO do the render done, and plug the show result on it or ? kompletr.viewEngine.showResults(data.slice(0, kompletr.options.maxResults), kompletr.options, function() { - EventManager.trigger('renderDone') + EventManager.trigger(EventManager.event.renderDone); }); }, @@ -316,7 +307,7 @@ import { fadeIn, fadeOut } from './kompletr.animations'; kompletr.callbacks = Object.assign(kompletr.callbacks, { onKeyup, onSelect, onError }); } - kompletr.cache = new Cache(EventManager, options.cache); + kompletr.cache = new Cache(options.cache); // 3. Build DOM @@ -326,15 +317,14 @@ import { fadeIn, fadeOut } from './kompletr.animations'; // 4. Listeners - kompletr.dom.body.addEventListener('click', kompletr.listeners.onHide); + kompletr.dom.body.addEventListener('click', kompletr.listeners.onSelectDone); kompletr.dom.input.addEventListener('keyup', kompletr.listeners.onKeyup); - document.addEventListener('kompletr.select.done', kompletr.listeners.onHide); + document.addEventListener('kompletr.select.done', kompletr.listeners.onSelectDone); document.addEventListener('kompletr.navigation.done', kompletr.listeners.onNavigationDone); - document.addEventListener('kompletr.request.done', kompletr.listeners.onRequestDone); + document.addEventListener('kompletr.data.done', kompletr.listeners.onDataDone); document.addEventListener('kompletr.render.done', kompletr.listeners.onRenderDone); document.addEventListener('kompletr.error', kompletr.listeners.onError); - } catch(e) { console.error(e); } diff --git a/src/js/kompletr.view-engine.js b/src/js/kompletr.view-engine.js index f1d27cb..31844f2 100644 --- a/src/js/kompletr.view-engine.js +++ b/src/js/kompletr.view-engine.js @@ -1,15 +1,15 @@ /** - * @description Test + * @description Dedicated class to manage rendering tasks. ViewEngine is a little bit too much as name, but it's something like that. */ export class ViewEngine { + /** + * @description DOM instance + */ _dom = null; - _eventManager = null; - - constructor(dom, eventManager) { + constructor(dom) { this._dom = dom; - this._eventManager = eventManager; } /** @@ -46,6 +46,8 @@ export class ViewEngine { * @emits CustomEvent 'kompletr.view.result.done' * * @returns {Void} + * + * @todo Try better than the done callback */ showResults(data, options, done) { let html = ''; @@ -76,6 +78,6 @@ export class ViewEngine { this._dom.result.innerHTML = html; - done(); // TODO do better + done(); } } \ No newline at end of file diff --git a/test/kompletr.dom.spec.js b/test/kompletr.dom.spec.js new file mode 100644 index 0000000..3b66331 --- /dev/null +++ b/test/kompletr.dom.spec.js @@ -0,0 +1,44 @@ +import { JSDOM } from 'jsdom'; +import { DOM } from '../src/js/kompletr.dom.js'; + +describe('DOM class', () => { + beforeEach(() => { + const dom = new JSDOM(); + global.document = dom.window.document; + }); + + test('constructor should initialize properties', () => { + const inputElement = document.createElement('input'); + inputElement.id = 'test'; + document.body.appendChild(inputElement); + + const dom = new DOM('test', { theme: 'dark' }); + + expect(dom.body).toBe(document.body); + expect(dom.input).toBe(inputElement); + expect(dom.focused).toBe(null); + expect(dom.result.id).toBe('kpl-result'); + expect(dom.result.className).toBe('form--search__result'); + expect(inputElement.parentElement.className).toContain('kompletr dark'); + }); + + test('getter/setter methods should get and set properties', () => { + const dom = new DOM('test'); + + const newBody = document.createElement('body'); + dom.body = newBody; + expect(dom.body).toBe(newBody); + + const newInput = document.createElement('input'); + dom.input = newInput; + expect(dom.input).toBe(newInput); + + const newFocused = document.createElement('div'); + dom.focused = newFocused; + expect(dom.focused).toBe(newFocused); + + const newResult = document.createElement('div'); + dom.result = newResult; + expect(dom.result).toBe(newResult); + }); +}); diff --git a/test/kompletr.utils.spec.js b/test/kompletr.utils.spec.js new file mode 100644 index 0000000..7ea03c9 --- /dev/null +++ b/test/kompletr.utils.spec.js @@ -0,0 +1,39 @@ +import { JSDOM } from 'jsdom'; +import { build, uuid } from '../src/js/kompletr.utils.js'; + +describe('Utils functions', () => { + describe('::build', () => { + beforeEach(() => { + const dom = new JSDOM(); + global.document = dom.window.document; + }); + + test('should create an element with no attributes', () => { + const element = build('div'); + expect(element.tagName).toBe('DIV'); + expect(element.attributes.length).toBe(0); + }); + + test('should create an element with attributes', () => { + const element = build('div', [{ id: 'test' }, { class: 'test-class' }]); + expect(element.tagName).toBe('DIV'); + expect(element.attributes.length).toBe(2); + expect(element.getAttribute('id')).toBe('test'); + expect(element.getAttribute('class')).toBe('test-class'); + }); + }); + + describe('::uuid', () => { + test('should return a unique identifier for a given string', () => { + const id1 = uuid('test'); + const id2 = uuid('test'); + const id3 = uuid('different'); + + // The generated id should be the same for the same input + expect(id1).toBe(id2); + + // Different input should (in most cases) result in a different id + expect(id1).not.toBe(id3); + }); + }); +}); \ No newline at end of file diff --git a/test/kompletr.validation.spec.js b/test/kompletr.validation.spec.js new file mode 100644 index 0000000..fff84ab --- /dev/null +++ b/test/kompletr.validation.spec.js @@ -0,0 +1,63 @@ +import { JSDOM } from 'jsdom'; +import { Validation } from '../src/js/kompletr.validation.js'; + +describe('Validation class and methods', () => { + beforeEach(() => { + const dom = new JSDOM(); + global.document = dom.window.document; + }); + + describe('::input', () => { + test('input method should validate HTMLInputElement or DOM eligible', () => { + const element = document.createElement('input'); + element.id = 'test'; + document.body.appendChild(element); + + expect(() => Validation.input('test')).not.toThrow(); + expect(() => Validation.input(element)).not.toThrow(); + expect(() => Validation.input('not-exist')).toThrow(); + }); + }); + + describe('::data', () => { + test('data method should validate array', () => { + expect(() => Validation.data([1, 2, 3])).not.toThrow(); + expect(() => Validation.data('not-array')).toThrow(); + }); + }); + + describe('::callbacks', () => { + test('callbacks method should validate callbacks object', () => { + const callbacks = { + onKeyup: () => {}, + onSelect: () => {}, + onError: () => {}, + }; + + expect(() => Validation.callbacks(callbacks)).not.toThrow(); + expect(() => Validation.callbacks({ notValid: () => {} })).toThrow(); + expect(() => Validation.callbacks({ onKeyup: 'not-function' })).toThrow(); + }); + }); + + describe('::validate', () => { + test('validate method should validate input, data, and callbacks', () => { + const element = document.createElement('input'); + element.id = 'test'; + document.body.appendChild(element); + + const data = [1, 2, 3]; + + const callbacks = { + onKeyup: () => {}, + onSelect: () => {}, + onError: () => {}, + }; + + expect(() => Validation.validate('test', data, callbacks)).not.toThrow(); + expect(() => Validation.validate('not-exist', data, callbacks)).toThrow(); + expect(() => Validation.validate('test', 'not-array', callbacks)).toThrow(); + expect(() => Validation.validate('test', data, { notValid: () => {} })).toThrow(); + }); + }); +}); diff --git a/test/kompletr.view-engine.spec.js b/test/kompletr.view-engine.spec.js new file mode 100644 index 0000000..ef8144a --- /dev/null +++ b/test/kompletr.view-engine.spec.js @@ -0,0 +1,60 @@ +import { JSDOM } from 'jsdom'; +import { ViewEngine } from '../src/js/kompletr.view-engine.js'; + +describe('ViewEngine class and methods', () => { + beforeEach(() => { + const dom = new JSDOM(); + global.document = dom.window.document; + }); + + describe('::focus', () => { + test('focus method should add or remove focus', () => { + const dom = { + result: document.createElement('div'), + focused: null, + }; + + const child1 = document.createElement('div'); + const child2 = document.createElement('div'); + + dom.result.appendChild(child1); + dom.result.appendChild(child2); + + const viewEngine = new ViewEngine(dom); + + viewEngine.focus(0, 'add'); + expect(dom.focused).toBe(child1); + expect(child1.className).toContain('focus'); + + viewEngine.focus(0, 'remove'); + expect(dom.focused).toBe(null); + expect(child1.className).toBe('item--result'); + }); + }); + + describe('::showResults', () => { + test('showResults method should display results', done => { + const dom = { + result: document.createElement('div'), + }; + + const viewEngine = new ViewEngine(dom); + + const data = [ + { idx: 0, data: 'test1' }, + { idx: 1, data: { field1: 'test2', field2: 'test3' } }, + ]; + + const options = { + fieldsToDisplay: ['field1'], + }; + + viewEngine.showResults(data, options, () => { + expect(dom.result.innerHTML).toContain('test1'); + expect(dom.result.innerHTML).toContain('test2'); + expect(dom.result.innerHTML).not.toContain('test3'); + done(); + }); + }); + }); +}); \ No newline at end of file diff --git a/test/setup.js b/test/setup.js new file mode 100644 index 0000000..a627c5f --- /dev/null +++ b/test/setup.js @@ -0,0 +1,2 @@ +import { TextEncoder, TextDecoder } from 'util' +Object.assign(global, { TextDecoder, TextEncoder }); \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js index 43e0c67..fe0b783 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,29 +1,12 @@ -const path = require('path'); -const terser = require('terser'); +import path from 'path'; +import * as url from 'url'; -const WebpackConcatPlugin = require('webpack-concat-files-plugin'); +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); -module.exports = { +export default { entry: './src/js/index.js', - mode: 'development', - plugins: [ - new WebpackConcatPlugin({ - bundles: [ - { - src: [ - './src/js/vanilla/kompleter.js', - ], - dest: './dist/js/kompleter.min.js', - transforms: { - after: async (code) => { - const minifiedCode = await terser.minify(code); - return minifiedCode.code; - }, - }, - }, - ], - }), - ], + devtool: "source-map", + mode: "development", module: { rules: [ { @@ -38,7 +21,7 @@ module.exports = { }, devServer: { client: { - logging: 'info', + logging: 'log', overlay: true, }, static: { @@ -48,6 +31,6 @@ module.exports = { port: 9000, historyApiFallback: true, liveReload: true, - watchFiles: path.join(__dirname, './dist') + watchFiles: path.join(__dirname, './dist'), }, }; diff --git a/webpack.config.prod.js b/webpack.config.prod.js new file mode 100644 index 0000000..207c18b --- /dev/null +++ b/webpack.config.prod.js @@ -0,0 +1,20 @@ +import path from 'path'; +import * as url from 'url'; + +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); + +export default { + entry: './src/js/kompletr.js', + experiments: { + outputModule: true, + }, + output: { + path: path.resolve(__dirname, 'dist/js'), + filename: 'kompletr.min.js', + library: { + type: "module", + }, + }, + devtool: "source-map", + mode: "production", +}; From 778cd9e8391dcf45c01a32f278485a7a1569e243 Mon Sep 17 00:00:00 2001 From: Steve Date: Mon, 11 Mar 2024 13:04:54 +0100 Subject: [PATCH 17/48] chore: cleanup scripts --- package.json | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 4809019..8c12ccc 100755 --- a/package.json +++ b/package.json @@ -47,16 +47,14 @@ ], "license": "ISC", "scripts": { - "build": "mkdir -p dist && cp -r src/index.html dist/ & npm run build:css & npm run build:js", + "build": "mkdir -p dist && cp -r src/index.html dist/ & npm run build:css && npm run build:js", "build:css": "node-sass ./src/sass/kompleter.scss ./dist/css/kompleter.min.css --output-style compressed", "build:js": "webpack", "cypress:open": "cypress open", "cypress:run": "cypress run --browser chrome ./cypress", "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js ./test/**.spec.js", "wp:build": "webpack --mode production --config ./webpack.config.prod.js", - "wp:dev": "webpack serve --hot --mode development --config ./webpack.config.js", - "wp:de": "webpack serve --hot", - "wp:deve": "webpack serve --live-reload" + "wp:dev": "webpack serve --hot --mode development --config ./webpack.config.js" }, "devDependencies": { "@babel/runtime": "^7.23.6", From d1adb9f27da5af5a34c2f9c8983f0981666faba1 Mon Sep 17 00:00:00 2001 From: Steve Date: Tue, 12 Mar 2024 21:55:12 +0100 Subject: [PATCH 18/48] feat: add vitepress for doc, quick fix on the cache --- .gitignore | 5 +- docs/.vitepress/config.js | 67 + docs/.vitepress/theme/index.js | 12 + docs/api.md | 5 + docs/guide.md | 3 + docs/guide/browser-support.md | 4 + docs/guide/contributions.md | 52 + docs/guide/examples/callbacks.md | 7 + docs/guide/examples/data.md | 46 + docs/guide/examples/input.md | 1 + docs/guide/examples/options.md | 7 + docs/guide/getting-started.md | 86 + docs/guide/release-notes.md | 1 + docs/guide/support.md | 1 + docs/index.md | 36 + package-lock.json | 18634 ++++++++++++++++++----------- package.json | 10 +- src/index.html | 81 +- src/js/kompletr.animations.js | 234 +- src/js/kompletr.cache.js | 6 +- src/js/kompletr.dom.js | 3 +- src/js/kompletr.enums.js | 2 +- src/js/kompletr.js | 29 +- src/js/kompletr.options.js | 12 +- src/js/kompletr.properties.js | 1 + src/js/kompletr.utils.js | 16 +- test/kompletr.utils.spec.js | 14 - webpack.config.js | 4 + webpack.config.prod.js | 4 + 29 files changed, 11966 insertions(+), 7417 deletions(-) create mode 100644 docs/.vitepress/config.js create mode 100644 docs/.vitepress/theme/index.js create mode 100644 docs/api.md create mode 100644 docs/guide.md create mode 100644 docs/guide/browser-support.md create mode 100644 docs/guide/contributions.md create mode 100644 docs/guide/examples/callbacks.md create mode 100644 docs/guide/examples/data.md create mode 100644 docs/guide/examples/input.md create mode 100644 docs/guide/examples/options.md create mode 100644 docs/guide/getting-started.md create mode 100644 docs/guide/release-notes.md create mode 100644 docs/guide/support.md create mode 100644 docs/index.md diff --git a/.gitignore b/.gitignore index 7c8b486..17e2954 100644 --- a/.gitignore +++ b/.gitignore @@ -17,4 +17,7 @@ src/vendors/* # Do not push dist, build and local api dist/ build/ -api/ \ No newline at end of file +api/ + +docs/.vitepress/dist +docs/.vitepress/cache \ No newline at end of file diff --git a/docs/.vitepress/config.js b/docs/.vitepress/config.js new file mode 100644 index 0000000..737170a --- /dev/null +++ b/docs/.vitepress/config.js @@ -0,0 +1,67 @@ +import { defineConfig } from 'vitepress' +import { tabsMarkdownPlugin } from 'vitepress-plugin-tabs' + +// https://vitepress.dev/reference/site-config +export default defineConfig({ + title: "Kømpletr", + description: "A vanilla JS autocomplete library", + themeConfig: { + // https://vitepress.dev/reference/default-theme-config + nav: [ + { text: 'Home', link: '/' }, + { text: 'Guide', link: '/guide' }, + { text: 'API', link: '/api' }, + { text: 'Demo', link: '/' }, + ], + + sidebar: { + '/guide': [ + { + text: 'Getting started', + collapsed: false, + items: [ + { text: 'Installation', link: '/guide/getting-started#installation' }, + { text: 'Usage', link: '/guide/getting-started#usage' } + ] + }, + { + text: 'Examples', + collapsed: false, + items: [ + { text: 'Input', link: '/guide/examples/input' }, + { text: 'Data', link: '/guide/examples/data' }, + { text: 'Options', link: '/guide/examples/options' }, + { text: 'Callbacks', link: '/guide/examples/callbacks' }, + ] + }, + { + text: 'References', + collapsed: false, + items: [ + { text: 'Support', link: '/guide/support' }, + { text: 'Browser support', link: '/guide/browser-support' }, + { text: 'Contributions', link: '/guide/contributions' }, + { text: 'Release notes', link: '/guide/release-notes' }, + ] + }, + ], + '/api': [] + }, + + socialLinks: [ + { icon: 'github', link: 'https://github.com/steve-lebleu/kompletr' }, + { icon: 'npm', link: 'https://github.com/steve-lebleu/kompletr' }, + { icon: 'slack', link: 'https://github.com/steve-lebleu/kompletr' }, + ], + + footer: { + message: 'Released under the MIT License.', + copyright: 'Copyright © 2019-present Evan You' + } + }, + markdown: { + config(md) { + md.use(tabsMarkdownPlugin) + } + } +}) diff --git a/docs/.vitepress/theme/index.js b/docs/.vitepress/theme/index.js new file mode 100644 index 0000000..b7b527e --- /dev/null +++ b/docs/.vitepress/theme/index.js @@ -0,0 +1,12 @@ +// .vitepress/theme/index.ts + +import DefaultTheme from 'vitepress/theme' +import { enhanceAppWithTabs } from 'vitepress-plugin-tabs/client' + +/** @type {import('vitepress').Theme} */ +export default { + extends: DefaultTheme, + enhanceApp({ app }) { + enhanceAppWithTabs(app) + } +} \ No newline at end of file diff --git a/docs/api.md b/docs/api.md new file mode 100644 index 0000000..a27ac3a --- /dev/null +++ b/docs/api.md @@ -0,0 +1,5 @@ +--- +outline: deep +--- + +# API documentation \ No newline at end of file diff --git a/docs/guide.md b/docs/guide.md new file mode 100644 index 0000000..8cd1d3b --- /dev/null +++ b/docs/guide.md @@ -0,0 +1,3 @@ +# Guide + +There is the guide. \ No newline at end of file diff --git a/docs/guide/browser-support.md b/docs/guide/browser-support.md new file mode 100644 index 0000000..137cb50 --- /dev/null +++ b/docs/guide/browser-support.md @@ -0,0 +1,4 @@ +# Browser support + +Kompletr comes with native support for n% of current browsers on the market. + diff --git a/docs/guide/contributions.md b/docs/guide/contributions.md new file mode 100644 index 0000000..0f69b17 --- /dev/null +++ b/docs/guide/contributions.md @@ -0,0 +1,52 @@ +# Contributions + +If you have any ideas, just open an issue and share them. + +## Pull requests + +If you'd like to contribute, here are the steps: + +1. Fork the project (https://github.com/steve-lebleu/kompletr.git) +2. Create your feature branch +```bash +> git checkout -b feature/foo +``` +3. Commit your changes +```bash +> git commit -m 'feat: amazing new feature' +``` +4. Make sure your branch is not behind +5. Push your branch +```bash +> git push origin feature/foo +``` +6. Create a new pull request +7. Pull requests are warmly welcome + +## Versionning + +For transparency and insight into the release cycle, releases will be numbered with the semver standard: + +```html +.. +``` + +Following guidelines are relevant: + +- Breaking backwards compatibility bumps the major +- New additions without breaking backwards compatibility bumps the minor +- Bug fixes and misc changes bump the patch + +### Release flags + +- [Experimental]: under testing and might be deprecated at any point +- [Deprecated]: not developed / supported anymore, might be removed at any point +- [Removed]: completely gone, no longer exists +- [Changed]: breaking change in the API or the core library +- [Updated]: non-breaking change in the API or the core library +- [Fixed]: bug or issue that was fixed and no longer exists +- [Added]: new feature + +### Commits flags + +:link: [Conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) \ No newline at end of file diff --git a/docs/guide/examples/callbacks.md b/docs/guide/examples/callbacks.md new file mode 100644 index 0000000..767446d --- /dev/null +++ b/docs/guide/examples/callbacks.md @@ -0,0 +1,7 @@ +# Callbacks + +## onKeyup + +## onSelect + +## onError \ No newline at end of file diff --git a/docs/guide/examples/data.md b/docs/guide/examples/data.md new file mode 100644 index 0000000..cf9164f --- /dev/null +++ b/docs/guide/examples/data.md @@ -0,0 +1,46 @@ +# Data + +## Querying on initialization + +```html + +``` + +## Querying on the fly + +```html + +``` + +::: tip +:bulb: Refer to the cache option to improve performances and bandwith consumming. +::: \ No newline at end of file diff --git a/docs/guide/examples/input.md b/docs/guide/examples/input.md new file mode 100644 index 0000000..bc9fdc4 --- /dev/null +++ b/docs/guide/examples/input.md @@ -0,0 +1 @@ +# Input \ No newline at end of file diff --git a/docs/guide/examples/options.md b/docs/guide/examples/options.md new file mode 100644 index 0000000..ff82420 --- /dev/null +++ b/docs/guide/examples/options.md @@ -0,0 +1,7 @@ +# Options + +## animations + +## startQueryingFromChar + +## prefix \ No newline at end of file diff --git a/docs/guide/getting-started.md b/docs/guide/getting-started.md new file mode 100644 index 0000000..acccd53 --- /dev/null +++ b/docs/guide/getting-started.md @@ -0,0 +1,86 @@ +# Getting started + +## Installation + +### With package manager + +:::tabs +== npm +```bash +> npm i kompletr -D +``` +== yarn +```bash +> yarn add kompletr -D +``` +== pnpm +```bash +> pnpm i kompletr -D +``` +::: + +### From CDN + +:::tabs +== jsdelivr +```html + +``` +== cdnjs +```html + +``` +== unpkg +```html + +``` +::: + +### Direct download + +1. Download latest release archive +2. Get JS files from *./dist/js/*.js* +3. Get CSS files from *./dist/css/*.css* + +## Usage + +### 1. Load module + +:::tabs +== HTML +```html + +``` +== CommonJS +```javascript +const { kompletr } = require('kompletr'); +``` +== ESM +```javascript +import { kompletr } from 'kompletr'; +``` +::: + +### 2. Define input element + +```html + +``` + +### 3. Initialize Kompletr + +```html + +``` +:link: See [API section](./api.md) for more informations about available options. diff --git a/docs/guide/release-notes.md b/docs/guide/release-notes.md new file mode 100644 index 0000000..ef831bf --- /dev/null +++ b/docs/guide/release-notes.md @@ -0,0 +1 @@ +# Releases notes \ No newline at end of file diff --git a/docs/guide/support.md b/docs/guide/support.md new file mode 100644 index 0000000..515ea7a --- /dev/null +++ b/docs/guide/support.md @@ -0,0 +1 @@ +# Support \ No newline at end of file diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..89676ad --- /dev/null +++ b/docs/index.md @@ -0,0 +1,36 @@ +--- +# https://vitepress.dev/reference/default-theme-home-page +layout: home + +hero: + name: "Kømpletr" + text: "JS auto-complete" + tagline: 10kb of vanilla lightweight to add highly featured and eco friendly autocompletion on your pages. + actions: + - theme: brand + text: Getting started + link: /guide + - theme: alt + text: API Documentation + link: /api + +features: + - icon: ✨ + title: Light + details: Less than 10kb of Vanilla + - icon: 🚀 + title: Performant + details: Faster than the others + - icon: 🍃 + title: Eco friendly + details: What else ? + - icon: 🌍 + title: Accessible + details: ARIA and WAG + - icon: ⚡ + title: Highly featured + details: Many options + - icon: 🤘 + title: Compatible + details: ESM, CommonJS, UMD and AMD +--- \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 676b7d2..e9d9a20 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,10 +22,11 @@ "node-sass": "^9.0.0", "prettier": "^3.2.5", "stylelint": "^16.2.1", - "terser": "^5.26.0", + "vitepress": "^1.0.0-rc.45", + "vitepress-plugin-tabs": "^0.5.0", "webpack": "^5.89.0", "webpack-cli": "^5.1.4", - "webpack-concat-files-plugin": "^0.5.2", + "webpack-dashboard": "^3.3.8", "webpack-dev-server": "^4.15.1" } }, @@ -38,6 +39,180 @@ "node": ">=0.10.0" } }, + "node_modules/@algolia/autocomplete-core": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz", + "integrity": "sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==", + "dev": true, + "dependencies": { + "@algolia/autocomplete-plugin-algolia-insights": "1.9.3", + "@algolia/autocomplete-shared": "1.9.3" + } + }, + "node_modules/@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz", + "integrity": "sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==", + "dev": true, + "dependencies": { + "@algolia/autocomplete-shared": "1.9.3" + }, + "peerDependencies": { + "search-insights": ">= 1 < 3" + } + }, + "node_modules/@algolia/autocomplete-preset-algolia": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz", + "integrity": "sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==", + "dev": true, + "dependencies": { + "@algolia/autocomplete-shared": "1.9.3" + }, + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/autocomplete-shared": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz", + "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==", + "dev": true, + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/cache-browser-local-storage": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.22.1.tgz", + "integrity": "sha512-Sw6IAmOCvvP6QNgY9j+Hv09mvkvEIDKjYW8ow0UDDAxSXy664RBNQk3i/0nt7gvceOJ6jGmOTimaZoY1THmU7g==", + "dev": true, + "dependencies": { + "@algolia/cache-common": "4.22.1" + } + }, + "node_modules/@algolia/cache-common": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.22.1.tgz", + "integrity": "sha512-TJMBKqZNKYB9TptRRjSUtevJeQVXRmg6rk9qgFKWvOy8jhCPdyNZV1nB3SKGufzvTVbomAukFR8guu/8NRKBTA==", + "dev": true + }, + "node_modules/@algolia/cache-in-memory": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.22.1.tgz", + "integrity": "sha512-ve+6Ac2LhwpufuWavM/aHjLoNz/Z/sYSgNIXsinGofWOysPilQZPUetqLj8vbvi+DHZZaYSEP9H5SRVXnpsNNw==", + "dev": true, + "dependencies": { + "@algolia/cache-common": "4.22.1" + } + }, + "node_modules/@algolia/client-account": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.22.1.tgz", + "integrity": "sha512-k8m+oegM2zlns/TwZyi4YgCtyToackkOpE+xCaKCYfBfDtdGOaVZCM5YvGPtK+HGaJMIN/DoTL8asbM3NzHonw==", + "dev": true, + "dependencies": { + "@algolia/client-common": "4.22.1", + "@algolia/client-search": "4.22.1", + "@algolia/transporter": "4.22.1" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.22.1.tgz", + "integrity": "sha512-1ssi9pyxyQNN4a7Ji9R50nSdISIumMFDwKNuwZipB6TkauJ8J7ha/uO60sPJFqQyqvvI+px7RSNRQT3Zrvzieg==", + "dev": true, + "dependencies": { + "@algolia/client-common": "4.22.1", + "@algolia/client-search": "4.22.1", + "@algolia/requester-common": "4.22.1", + "@algolia/transporter": "4.22.1" + } + }, + "node_modules/@algolia/client-common": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.22.1.tgz", + "integrity": "sha512-IvaL5v9mZtm4k4QHbBGDmU3wa/mKokmqNBqPj0K7lcR8ZDKzUorhcGp/u8PkPC/e0zoHSTvRh7TRkGX3Lm7iOQ==", + "dev": true, + "dependencies": { + "@algolia/requester-common": "4.22.1", + "@algolia/transporter": "4.22.1" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.22.1.tgz", + "integrity": "sha512-sl+/klQJ93+4yaqZ7ezOttMQ/nczly/3GmgZXJ1xmoewP5jmdP/X/nV5U7EHHH3hCUEHeN7X1nsIhGPVt9E1cQ==", + "dev": true, + "dependencies": { + "@algolia/client-common": "4.22.1", + "@algolia/requester-common": "4.22.1", + "@algolia/transporter": "4.22.1" + } + }, + "node_modules/@algolia/client-search": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.22.1.tgz", + "integrity": "sha512-yb05NA4tNaOgx3+rOxAmFztgMTtGBi97X7PC3jyNeGiwkAjOZc2QrdZBYyIdcDLoI09N0gjtpClcackoTN0gPA==", + "dev": true, + "dependencies": { + "@algolia/client-common": "4.22.1", + "@algolia/requester-common": "4.22.1", + "@algolia/transporter": "4.22.1" + } + }, + "node_modules/@algolia/logger-common": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.22.1.tgz", + "integrity": "sha512-OnTFymd2odHSO39r4DSWRFETkBufnY2iGUZNrMXpIhF5cmFE8pGoINNPzwg02QLBlGSaLqdKy0bM8S0GyqPLBg==", + "dev": true + }, + "node_modules/@algolia/logger-console": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.22.1.tgz", + "integrity": "sha512-O99rcqpVPKN1RlpgD6H3khUWylU24OXlzkavUAMy6QZd1776QAcauE3oP8CmD43nbaTjBexZj2nGsBH9Tc0FVA==", + "dev": true, + "dependencies": { + "@algolia/logger-common": "4.22.1" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.22.1.tgz", + "integrity": "sha512-dtQGYIg6MteqT1Uay3J/0NDqD+UciHy3QgRbk7bNddOJu+p3hzjTRYESqEnoX/DpEkaNYdRHUKNylsqMpgwaEw==", + "dev": true, + "dependencies": { + "@algolia/requester-common": "4.22.1" + } + }, + "node_modules/@algolia/requester-common": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.22.1.tgz", + "integrity": "sha512-dgvhSAtg2MJnR+BxrIFqlLtkLlVVhas9HgYKMk2Uxiy5m6/8HZBL40JVAMb2LovoPFs9I/EWIoFVjOrFwzn5Qg==", + "dev": true + }, + "node_modules/@algolia/requester-node-http": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.22.1.tgz", + "integrity": "sha512-JfmZ3MVFQkAU+zug8H3s8rZ6h0ahHZL/SpMaSasTCGYR5EEJsCc8SI5UZ6raPN2tjxa5bxS13BRpGSBUens7EA==", + "dev": true, + "dependencies": { + "@algolia/requester-common": "4.22.1" + } + }, + "node_modules/@algolia/transporter": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.22.1.tgz", + "integrity": "sha512-kzWgc2c9IdxMa3YqA6TN0NW5VrKYYW/BELIn7vnLyn+U/RFdZ4lxxt9/8yq3DKV5snvoDzzO4ClyejZRdV3lMQ==", + "dev": true, + "dependencies": { + "@algolia/cache-common": "4.22.1", + "@algolia/logger-common": "4.22.1", + "@algolia/requester-common": "4.22.1" + } + }, "node_modules/@ampproject/remapping": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", @@ -709,648 +884,601 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "node_modules/@changesets/apply-release-plan": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-7.0.0.tgz", + "integrity": "sha512-vfi69JR416qC9hWmFGSxj7N6wA5J222XNBmezSVATPWDVPIF7gkd4d8CpbEbXmRWbVrkoli3oerGS6dcL/BGsQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.20.1", + "@changesets/config": "^3.0.0", + "@changesets/get-version-range-type": "^0.4.0", + "@changesets/git": "^3.0.0", + "@changesets/types": "^6.0.0", + "@manypkg/get-packages": "^1.1.3", + "detect-indent": "^6.0.0", + "fs-extra": "^7.0.1", + "lodash.startcase": "^4.4.0", + "outdent": "^0.5.0", + "prettier": "^2.7.1", + "resolve-from": "^5.0.0", + "semver": "^7.5.3" + } + }, + "node_modules/@changesets/apply-release-plan/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, - "optional": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, "engines": { - "node": ">=0.1.90" + "node": ">=6 <7 || >=8" } }, - "node_modules/@csstools/css-parser-algorithms": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.0.tgz", - "integrity": "sha512-YfEHq0eRH98ffb5/EsrrDspVWAuph6gDggAE74ZtjecsmyyWpW768hOyiONa8zwWGbIWYfa2Xp4tRTrpQQ00CQ==", + "node_modules/@changesets/apply-release-plan/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@changesets/apply-release-plan/node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, "engines": { - "node": "^14 || ^16 || >=18" + "node": ">=10.13.0" }, - "peerDependencies": { - "@csstools/css-tokenizer": "^2.2.3" + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/@csstools/css-tokenizer": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.3.tgz", - "integrity": "sha512-pp//EvZ9dUmGuGtG1p+n17gTHEOqu9jO+FiCUjNN3BDmyhdA2Jq9QsVeR7K8/2QCK17HSsioPlTW9ZkzoWb3Lg==", + "node_modules/@changesets/apply-release-plan/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], "engines": { - "node": "^14 || ^16 || >=18" + "node": ">= 4.0.0" } }, - "node_modules/@csstools/media-query-list-parser": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.8.tgz", - "integrity": "sha512-DiD3vG5ciNzeuTEoh74S+JMjQDs50R3zlxHnBnfd04YYfA/kh2KiBCGhzqLxlJcNq+7yNQ3stuZZYLX6wK/U2g==", + "node_modules/@changesets/assemble-release-plan": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.0.tgz", + "integrity": "sha512-4QG7NuisAjisbW4hkLCmGW2lRYdPrKzro+fCtZaILX+3zdUELSvYjpL4GTv0E4aM9Mef3PuIQp89VmHJ4y2bfw==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": "^14 || ^16 || >=18" + "dependencies": { + "@babel/runtime": "^7.20.1", + "@changesets/errors": "^0.2.0", + "@changesets/get-dependents-graph": "^2.0.0", + "@changesets/types": "^6.0.0", + "@manypkg/get-packages": "^1.1.3", + "semver": "^7.5.3" + } + }, + "node_modules/@changesets/changelog-git": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@changesets/changelog-git/-/changelog-git-0.2.0.tgz", + "integrity": "sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==", + "dev": true, + "dependencies": { + "@changesets/types": "^6.0.0" + } + }, + "node_modules/@changesets/cli": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/@changesets/cli/-/cli-2.27.1.tgz", + "integrity": "sha512-iJ91xlvRnnrJnELTp4eJJEOPjgpF3NOh4qeQehM6Ugiz9gJPRZ2t+TsXun6E3AMN4hScZKjqVXl0TX+C7AB3ZQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.20.1", + "@changesets/apply-release-plan": "^7.0.0", + "@changesets/assemble-release-plan": "^6.0.0", + "@changesets/changelog-git": "^0.2.0", + "@changesets/config": "^3.0.0", + "@changesets/errors": "^0.2.0", + "@changesets/get-dependents-graph": "^2.0.0", + "@changesets/get-release-plan": "^4.0.0", + "@changesets/git": "^3.0.0", + "@changesets/logger": "^0.1.0", + "@changesets/pre": "^2.0.0", + "@changesets/read": "^0.6.0", + "@changesets/types": "^6.0.0", + "@changesets/write": "^0.3.0", + "@manypkg/get-packages": "^1.1.3", + "@types/semver": "^7.5.0", + "ansi-colors": "^4.1.3", + "chalk": "^2.1.0", + "ci-info": "^3.7.0", + "enquirer": "^2.3.0", + "external-editor": "^3.1.0", + "fs-extra": "^7.0.1", + "human-id": "^1.0.2", + "meow": "^6.0.0", + "outdent": "^0.5.0", + "p-limit": "^2.2.0", + "preferred-pm": "^3.0.0", + "resolve-from": "^5.0.0", + "semver": "^7.5.3", + "spawndamnit": "^2.0.0", + "term-size": "^2.1.0", + "tty-table": "^4.1.5" }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.6.0", - "@csstools/css-tokenizer": "^2.2.3" + "bin": { + "changeset": "bin.js" } }, - "node_modules/@csstools/selector-specificity": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.2.tgz", - "integrity": "sha512-RpHaZ1h9LE7aALeQXmXrJkRG84ZxIsctEN2biEUmFyKpzFM3zZ35eUMcIzZFsw/2olQE6v69+esEqU2f1MKycg==", + "node_modules/@changesets/cli/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": "^14 || ^16 || >=18" + "dependencies": { + "color-convert": "^1.9.0" }, - "peerDependencies": { - "postcss-selector-parser": "^6.0.13" + "engines": { + "node": ">=4" } }, - "node_modules/@cypress/request": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.1.tgz", - "integrity": "sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ==", + "node_modules/@changesets/cli/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "http-signature": "~1.3.6", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "performance-now": "^2.1.0", - "qs": "6.10.4", - "safe-buffer": "^5.1.2", - "tough-cookie": "^4.1.3", - "tunnel-agent": "^0.6.0", - "uuid": "^8.3.2" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">= 6" + "node": ">=4" } }, - "node_modules/@cypress/xvfb": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", - "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", + "node_modules/@changesets/cli/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "dependencies": { - "debug": "^3.1.0", - "lodash.once": "^4.1.1" + "color-name": "1.1.3" } }, - "node_modules/@cypress/xvfb/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/@changesets/cli/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@changesets/cli/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "dependencies": { - "ms": "^2.1.1" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" } }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "node_modules/@changesets/cli/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "engines": { - "node": ">=10.0.0" + "node": ">=4" } }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.1.tgz", - "integrity": "sha512-m55cpeupQ2DbuRGQMMZDzbv9J9PgVelPjlcmM5kxHnrBdBx6REaEd7LamYV7Dm8N7rCyR/XwU6rVP8ploKtIkA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } + "node_modules/@changesets/cli/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true }, - "node_modules/@esbuild/android-arm": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.1.tgz", - "integrity": "sha512-4j0+G27/2ZXGWR5okcJi7pQYhmkVgb4D7UKwxcqrjhvp5TKWx3cUjgB1CGj1mfdmJBQ9VnUGgUhign+FPF2Zgw==", - "cpu": [ - "arm" - ], + "node_modules/@changesets/cli/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@esbuild/android-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.1.tgz", - "integrity": "sha512-hCnXNF0HM6AjowP+Zou0ZJMWWa1VkD77BXe959zERgGJBBxB+sV+J9f/rcjeg2c5bsukD/n17RKWXGFCO5dD5A==", - "cpu": [ - "arm64" - ], + "node_modules/@changesets/cli/node_modules/meow": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-6.1.1.tgz", + "integrity": "sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==", "dev": true, - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "^4.0.2", + "normalize-package-data": "^2.5.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.13.1", + "yargs-parser": "^18.1.3" + }, "engines": { - "node": ">=12" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@esbuild/android-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.1.tgz", - "integrity": "sha512-MSfZMBoAsnhpS+2yMFYIQUPs8Z19ajwfuaSZx+tSl09xrHZCjbeXXMsUF/0oq7ojxYEpsSo4c0SfjxOYXRbpaA==", - "cpu": [ - "x64" - ], + "node_modules/@changesets/cli/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.1.tgz", - "integrity": "sha512-Ylk6rzgMD8klUklGPzS414UQLa5NPXZD5tf8JmQU8GQrj6BrFA/Ic9tb2zRe1kOZyCbGl+e8VMbDRazCEBqPvA==", - "cpu": [ - "arm64" - ], + "node_modules/@changesets/cli/node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" + "bin": { + "semver": "bin/semver" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.1.tgz", - "integrity": "sha512-pFIfj7U2w5sMp52wTY1XVOdoxw+GDwy9FsK3OFz4BpMAjvZVs0dT1VXs8aQm22nhwoIWUmIRaE+4xow8xfIDZA==", - "cpu": [ - "x64" - ], + "node_modules/@changesets/cli/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "has-flag": "^3.0.0" + }, "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.1.tgz", - "integrity": "sha512-UyW1WZvHDuM4xDz0jWun4qtQFauNdXjXOtIy7SYdf7pbxSWWVlqhnR/T2TpX6LX5NI62spt0a3ldIIEkPM6RHw==", - "cpu": [ - "arm64" - ], + "node_modules/@changesets/cli/node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], "engines": { - "node": ">=12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.1.tgz", - "integrity": "sha512-itPwCw5C+Jh/c624vcDd9kRCCZVpzpQn8dtwoYIt2TJF3S9xJLiRohnnNrKwREvcZYx0n8sCSbvGH349XkcQeg==", - "cpu": [ - "x64" - ], + "node_modules/@changesets/cli/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], "engines": { - "node": ">=12" + "node": ">= 4.0.0" } }, - "node_modules/@esbuild/linux-arm": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.1.tgz", - "integrity": "sha512-LojC28v3+IhIbfQ+Vu4Ut5n3wKcgTu6POKIHN9Wpt0HnfgUGlBuyDDQR4jWZUZFyYLiz4RBBBmfU6sNfn6RhLw==", - "cpu": [ - "arm" - ], + "node_modules/@changesets/cli/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, "engines": { - "node": ">=12" + "node": ">=6" } }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.1.tgz", - "integrity": "sha512-cX8WdlF6Cnvw/DO9/X7XLH2J6CkBnz7Twjpk56cshk9sjYVcuh4sXQBy5bmTwzBjNVZze2yaV1vtcJS04LbN8w==", - "cpu": [ - "arm64" - ], + "node_modules/@changesets/config": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@changesets/config/-/config-3.0.0.tgz", + "integrity": "sha512-o/rwLNnAo/+j9Yvw9mkBQOZySDYyOr/q+wptRLcAVGlU6djOeP9v1nlalbL9MFsobuBVQbZCTp+dIzdq+CLQUA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "dependencies": { + "@changesets/errors": "^0.2.0", + "@changesets/get-dependents-graph": "^2.0.0", + "@changesets/logger": "^0.1.0", + "@changesets/types": "^6.0.0", + "@manypkg/get-packages": "^1.1.3", + "fs-extra": "^7.0.1", + "micromatch": "^4.0.2" } }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.1.tgz", - "integrity": "sha512-4H/sQCy1mnnGkUt/xszaLlYJVTz3W9ep52xEefGtd6yXDQbz/5fZE5dFLUgsPdbUOQANcVUa5iO6g3nyy5BJiw==", - "cpu": [ - "ia32" - ], + "node_modules/@changesets/config/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, "engines": { - "node": ">=12" + "node": ">=6 <7 || >=8" } }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.1.tgz", - "integrity": "sha512-c0jgtB+sRHCciVXlyjDcWb2FUuzlGVRwGXgI+3WqKOIuoo8AmZAddzeOHeYLtD+dmtHw3B4Xo9wAUdjlfW5yYA==", - "cpu": [ - "loong64" - ], + "node_modules/@changesets/config/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.1.tgz", - "integrity": "sha512-TgFyCfIxSujyuqdZKDZ3yTwWiGv+KnlOeXXitCQ+trDODJ+ZtGOzLkSWngynP0HZnTsDyBbPy7GWVXWaEl6lhA==", - "cpu": [ - "mips64el" - ], + "node_modules/@changesets/config/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=12" + "node": ">= 4.0.0" } }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.1.tgz", - "integrity": "sha512-b+yuD1IUeL+Y93PmFZDZFIElwbmFfIKLKlYI8M6tRyzE6u7oEP7onGk0vZRh8wfVGC2dZoy0EqX1V8qok4qHaw==", - "cpu": [ - "ppc64" - ], + "node_modules/@changesets/errors": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@changesets/errors/-/errors-0.2.0.tgz", + "integrity": "sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "dependencies": { + "extendable-error": "^0.1.5" } }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.1.tgz", - "integrity": "sha512-wpDlpE0oRKZwX+GfomcALcouqjjV8MIX8DyTrxfyCfXxoKQSDm45CZr9fanJ4F6ckD4yDEPT98SrjvLwIqUCgg==", - "cpu": [ - "riscv64" - ], + "node_modules/@changesets/get-dependents-graph": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-2.0.0.tgz", + "integrity": "sha512-cafUXponivK4vBgZ3yLu944mTvam06XEn2IZGjjKc0antpenkYANXiiE6GExV/yKdsCnE8dXVZ25yGqLYZmScA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "dependencies": { + "@changesets/types": "^6.0.0", + "@manypkg/get-packages": "^1.1.3", + "chalk": "^2.1.0", + "fs-extra": "^7.0.1", + "semver": "^7.5.3" } }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.1.tgz", - "integrity": "sha512-5BepC2Au80EohQ2dBpyTquqGCES7++p7G+7lXe1bAIvMdXm4YYcEfZtQrP4gaoZ96Wv1Ute61CEHFU7h4FMueQ==", - "cpu": [ - "s390x" - ], + "node_modules/@changesets/get-dependents-graph/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "color-convert": "^1.9.0" + }, "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/@esbuild/linux-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.1.tgz", - "integrity": "sha512-5gRPk7pKuaIB+tmH+yKd2aQTRpqlf1E4f/mC+tawIm/CGJemZcHZpp2ic8oD83nKgUPMEd0fNanrnFljiruuyA==", - "cpu": [ - "x64" - ], + "node_modules/@changesets/get-dependents-graph/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.1.tgz", - "integrity": "sha512-4fL68JdrLV2nVW2AaWZBv3XEm3Ae3NZn/7qy2KGAt3dexAgSVT+Hc97JKSZnqezgMlv9x6KV0ZkZY7UO5cNLCg==", - "cpu": [ - "x64" - ], + "node_modules/@changesets/get-dependents-graph/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" + "dependencies": { + "color-name": "1.1.3" } }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.1.tgz", - "integrity": "sha512-GhRuXlvRE+twf2ES+8REbeCb/zeikNqwD3+6S5y5/x+DYbAQUNl0HNBs4RQJqrechS4v4MruEr8ZtAin/hK5iw==", - "cpu": [ - "x64" - ], + "node_modules/@changesets/get-dependents-graph/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@changesets/get-dependents-graph/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, - "optional": true, - "os": [ - "openbsd" - ], + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, "engines": { - "node": ">=12" + "node": ">=6 <7 || >=8" } }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.1.tgz", - "integrity": "sha512-ZnWEyCM0G1Ex6JtsygvC3KUUrlDXqOihw8RicRuQAzw+c4f1D66YlPNNV3rkjVW90zXVsHwZYWbJh3v+oQFM9Q==", - "cpu": [ - "x64" - ], + "node_modules/@changesets/get-dependents-graph/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, - "optional": true, - "os": [ - "sunos" - ], "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.1.tgz", - "integrity": "sha512-QZ6gXue0vVQY2Oon9WyLFCdSuYbXSoxaZrPuJ4c20j6ICedfsDilNPYfHLlMH7vGfU5DQR0czHLmJvH4Nzis/A==", - "cpu": [ - "arm64" - ], + "node_modules/@changesets/get-dependents-graph/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.1.tgz", - "integrity": "sha512-HzcJa1NcSWTAU0MJIxOho8JftNp9YALui3o+Ny7hCh0v5f90nprly1U3Sj1Ldj/CvKKdvvFsCRvDkpsEMp4DNw==", - "cpu": [ - "ia32" - ], + "node_modules/@changesets/get-dependents-graph/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "has-flag": "^3.0.0" + }, "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/@esbuild/win32-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.1.tgz", - "integrity": "sha512-0MBh53o6XtI6ctDnRMeQ+xoCN8kD2qI1rY1KgF/xdWQwoFeKou7puvDfV8/Wv4Ctx2rRpET/gGdz3YlNtNACSA==", - "cpu": [ - "x64" - ], + "node_modules/@changesets/get-dependents-graph/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, - "optional": true, - "os": [ - "win32" - ], "engines": { - "node": ">=12" + "node": ">= 4.0.0" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "node_modules/@changesets/get-release-plan": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-4.0.0.tgz", + "integrity": "sha512-9L9xCUeD/Tb6L/oKmpm8nyzsOzhdNBBbt/ZNcjynbHC07WW4E1eX8NMGC5g5SbM5z/V+MOrYsJ4lRW41GCbg3w==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "@babel/runtime": "^7.20.1", + "@changesets/assemble-release-plan": "^6.0.0", + "@changesets/config": "^3.0.0", + "@changesets/pre": "^2.0.0", + "@changesets/read": "^0.6.0", + "@changesets/types": "^6.0.0", + "@manypkg/get-packages": "^1.1.3" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "node_modules/@changesets/get-version-range-type": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@changesets/get-version-range-type/-/get-version-range-type-0.4.0.tgz", + "integrity": "sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==", + "dev": true + }, + "node_modules/@changesets/git": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@changesets/git/-/git-3.0.0.tgz", + "integrity": "sha512-vvhnZDHe2eiBNRFHEgMiGd2CT+164dfYyrJDhwwxTVD/OW0FUD6G7+4DIx1dNwkwjHyzisxGAU96q0sVNBns0w==", "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "dependencies": { + "@babel/runtime": "^7.20.1", + "@changesets/errors": "^0.2.0", + "@changesets/types": "^6.0.0", + "@manypkg/get-packages": "^1.1.3", + "is-subdir": "^1.1.1", + "micromatch": "^4.0.2", + "spawndamnit": "^2.0.0" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "node_modules/@changesets/logger": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@changesets/logger/-/logger-0.1.0.tgz", + "integrity": "sha512-pBrJm4CQm9VqFVwWnSqKEfsS2ESnwqwH+xR7jETxIErZcfd1u2zBSqrHbRHR7xjhSgep9x2PSKFKY//FAshA3g==", "dev": true, "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "chalk": "^2.1.0" } }, - "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "node_modules/@changesets/logger/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=4" } }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "node_modules/@changesets/logger/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=10.10.0" + "node": ">=4" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "node_modules/@changesets/logger/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "dependencies": { + "color-name": "1.1.3" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "node_modules/@changesets/logger/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "node_modules/@changesets/logger/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, + "node_modules/@changesets/logger/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@changesets/parse": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@changesets/parse/-/parse-0.4.0.tgz", + "integrity": "sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==", + "dev": true, + "dependencies": { + "@changesets/types": "^6.0.0", + "js-yaml": "^3.13.1" + } + }, + "node_modules/@changesets/parse/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "dependencies": { "sprintf-js": "~1.0.2" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "node_modules/@changesets/parse/node_modules/js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", @@ -1363,2302 +1491,5868 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "node_modules/@changesets/pre": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@changesets/pre/-/pre-2.0.0.tgz", + "integrity": "sha512-HLTNYX/A4jZxc+Sq8D1AMBsv+1qD6rmmJtjsCJa/9MSRybdxh0mjbTvE6JYZQ/ZiQ0mMlDOlGPXTm9KLTU3jyw==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "@babel/runtime": "^7.20.1", + "@changesets/errors": "^0.2.0", + "@changesets/types": "^6.0.0", + "@manypkg/get-packages": "^1.1.3", + "fs-extra": "^7.0.1" } }, - "node_modules/@jest/console": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "node_modules/@changesets/pre/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=6 <7 || >=8" } }, - "node_modules/@jest/core": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", - "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "node_modules/@changesets/pre/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@changesets/pre/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "node": ">= 4.0.0" } }, - "node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "node_modules/@changesets/read": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@changesets/read/-/read-0.6.0.tgz", + "integrity": "sha512-ZypqX8+/im1Fm98K4YcZtmLKgjs1kDQ5zHpc2U1qdtNBmZZfo/IBiG162RoP0CUF05tvp2y4IspH11PLnPxuuw==", "dev": true, "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@babel/runtime": "^7.20.1", + "@changesets/git": "^3.0.0", + "@changesets/logger": "^0.1.0", + "@changesets/parse": "^0.4.0", + "@changesets/types": "^6.0.0", + "chalk": "^2.1.0", + "fs-extra": "^7.0.1", + "p-filter": "^2.1.0" } }, - "node_modules/@jest/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "node_modules/@changesets/read/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "dependencies": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" + "color-convert": "^1.9.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=4" } }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "node_modules/@changesets/read/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "dependencies": { - "jest-get-type": "^29.6.3" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=4" } }, - "node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "node_modules/@changesets/read/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "color-name": "1.1.3" } }, - "node_modules/@jest/globals": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "node_modules/@changesets/read/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@changesets/read/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=6 <7 || >=8" } }, - "node_modules/@jest/reporters": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", - "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "node_modules/@changesets/read/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "node": ">=4" } }, - "node_modules/@jest/reporters/node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "node_modules/@changesets/read/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@changesets/read/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "has-flag": "^3.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=4" } }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "node_modules/@changesets/read/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 4.0.0" } }, - "node_modules/@jest/source-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "node_modules/@changesets/types": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@changesets/types/-/types-6.0.0.tgz", + "integrity": "sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==", + "dev": true + }, + "node_modules/@changesets/write": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@changesets/write/-/write-0.3.0.tgz", + "integrity": "sha512-slGLb21fxZVUYbyea+94uFiD6ntQW0M2hIKNznFizDhZPDgn2c/fv1UzzlW43RVzh1BEDuIqW6hzlJ1OflNmcw==", "dev": true, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" + "@babel/runtime": "^7.20.1", + "@changesets/types": "^6.0.0", + "fs-extra": "^7.0.1", + "human-id": "^1.0.2", + "prettier": "^2.7.1" + } + }, + "node_modules/@changesets/write/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=6 <7 || >=8" } }, - "node_modules/@jest/test-result": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", - "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "node_modules/@changesets/write/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@jest/test-sequencer": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", - "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "node_modules/@changesets/write/node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, - "dependencies": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" + "bin": { + "prettier": "bin-prettier.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "node_modules/@changesets/write/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 4.0.0" } }, - "node_modules/@jest/transform/node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, + "optional": true, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=0.1.90" } }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "node_modules/@csstools/css-parser-algorithms": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.0.tgz", + "integrity": "sha512-YfEHq0eRH98ffb5/EsrrDspVWAuph6gDggAE74ZtjecsmyyWpW768hOyiONa8zwWGbIWYfa2Xp4tRTrpQQ00CQ==", "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^2.2.3" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "node_modules/@csstools/css-tokenizer": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.3.tgz", + "integrity": "sha512-pp//EvZ9dUmGuGtG1p+n17gTHEOqu9jO+FiCUjNN3BDmyhdA2Jq9QsVeR7K8/2QCK17HSsioPlTW9ZkzoWb3Lg==", "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "engines": { - "node": ">=6.0.0" + "node": "^14 || ^16 || >=18" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "node_modules/@csstools/media-query-list-parser": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.8.tgz", + "integrity": "sha512-DiD3vG5ciNzeuTEoh74S+JMjQDs50R3zlxHnBnfd04YYfA/kh2KiBCGhzqLxlJcNq+7yNQ3stuZZYLX6wK/U2g==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "engines": { - "node": ">=6.0.0" + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^2.6.0", + "@csstools/css-tokenizer": "^2.2.3" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "node_modules/@csstools/selector-specificity": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.2.tgz", + "integrity": "sha512-RpHaZ1h9LE7aALeQXmXrJkRG84ZxIsctEN2biEUmFyKpzFM3zZ35eUMcIzZFsw/2olQE6v69+esEqU2f1MKycg==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "engines": { - "node": ">=6.0.0" + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.13" } }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "node_modules/@cypress/request": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.1.tgz", + "integrity": "sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ==", "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "http-signature": "~1.3.6", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "performance-now": "^2.1.0", + "qs": "6.10.4", + "safe-buffer": "^5.1.2", + "tough-cookie": "^4.1.3", + "tunnel-agent": "^0.6.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "node_modules/@cypress/xvfb": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", + "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "debug": "^3.1.0", + "lodash.once": "^4.1.1" } }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", - "dev": true - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@cypress/xvfb/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" + "ms": "^2.1.1" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "dev": true, "engines": { - "node": ">= 8" + "node": ">=10.0.0" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@docsearch/css": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.6.0.tgz", + "integrity": "sha512-+sbxb71sWre+PwDK7X2T8+bhS6clcVMLwBPznX45Qu6opJcgRjAp7gYSDzVFp187J+feSj5dNBN1mJoi6ckkUQ==", + "dev": true + }, + "node_modules/@docsearch/js": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.6.0.tgz", + "integrity": "sha512-QujhqINEElrkIfKwyyyTfbsfMAYCkylInLYMRqHy7PHc8xTBQCow73tlo/Kc7oIwBrCLf0P3YhjlOeV4v8hevQ==", "dev": true, "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" + "@docsearch/react": "3.6.0", + "preact": "^10.0.0" } }, - "node_modules/@npmcli/fs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", - "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "node_modules/@docsearch/react": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.6.0.tgz", + "integrity": "sha512-HUFut4ztcVNmqy9gp/wxNbC7pTOHhgVVkHVGCACTuLhUKUhKAF9KYHJtMiLUJxEqiFLQiuri1fWF8zqwM/cu1w==", "dev": true, "dependencies": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" + "@algolia/autocomplete-core": "1.9.3", + "@algolia/autocomplete-preset-algolia": "1.9.3", + "@docsearch/css": "3.6.0", + "algoliasearch": "^4.19.1" }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "peerDependencies": { + "@types/react": ">= 16.8.0 < 19.0.0", + "react": ">= 16.8.0 < 19.0.0", + "react-dom": ">= 16.8.0 < 19.0.0", + "search-insights": ">= 1 < 3" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "search-insights": { + "optional": true + } } }, - "node_modules/@npmcli/move-file": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", - "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", - "deprecated": "This functionality has been moved to @npmcli/fs", + "node_modules/@esbuild/aix-ppc64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.1.tgz", + "integrity": "sha512-m55cpeupQ2DbuRGQMMZDzbv9J9PgVelPjlcmM5kxHnrBdBx6REaEd7LamYV7Dm8N7rCyR/XwU6rVP8ploKtIkA==", + "cpu": [ + "ppc64" + ], "dev": true, - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=12" } }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "node_modules/@esbuild/android-arm": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.1.tgz", + "integrity": "sha512-4j0+G27/2ZXGWR5okcJi7pQYhmkVgb4D7UKwxcqrjhvp5TKWx3cUjgB1CGj1mfdmJBQ9VnUGgUhign+FPF2Zgw==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "type-detect": "4.0.8" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "node_modules/@esbuild/android-arm64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.1.tgz", + "integrity": "sha512-hCnXNF0HM6AjowP+Zou0ZJMWWa1VkD77BXe959zERgGJBBxB+sV+J9f/rcjeg2c5bsukD/n17RKWXGFCO5dD5A==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@sinonjs/commons": "^3.0.0" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "node_modules/@esbuild/android-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.1.tgz", + "integrity": "sha512-MSfZMBoAsnhpS+2yMFYIQUPs8Z19ajwfuaSZx+tSl09xrHZCjbeXXMsUF/0oq7ojxYEpsSo4c0SfjxOYXRbpaA==", + "cpu": [ + "x64" + ], "dev": true, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">= 10" + "node": ">=12" } }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "node_modules/@esbuild/darwin-arm64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.1.tgz", + "integrity": "sha512-Ylk6rzgMD8klUklGPzS414UQLa5NPXZD5tf8JmQU8GQrj6BrFA/Ic9tb2zRe1kOZyCbGl+e8VMbDRazCEBqPvA==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@types/babel__generator": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "node_modules/@esbuild/darwin-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.1.tgz", + "integrity": "sha512-pFIfj7U2w5sMp52wTY1XVOdoxw+GDwy9FsK3OFz4BpMAjvZVs0dT1VXs8aQm22nhwoIWUmIRaE+4xow8xfIDZA==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.1.tgz", + "integrity": "sha512-UyW1WZvHDuM4xDz0jWun4qtQFauNdXjXOtIy7SYdf7pbxSWWVlqhnR/T2TpX6LX5NI62spt0a3ldIIEkPM6RHw==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@types/babel__traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", - "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", + "node_modules/@esbuild/freebsd-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.1.tgz", + "integrity": "sha512-itPwCw5C+Jh/c624vcDd9kRCCZVpzpQn8dtwoYIt2TJF3S9xJLiRohnnNrKwREvcZYx0n8sCSbvGH349XkcQeg==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@babel/types": "^7.20.7" + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "node_modules/@esbuild/linux-arm": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.1.tgz", + "integrity": "sha512-LojC28v3+IhIbfQ+Vu4Ut5n3wKcgTu6POKIHN9Wpt0HnfgUGlBuyDDQR4jWZUZFyYLiz4RBBBmfU6sNfn6RhLw==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@types/bonjour": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", - "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "node_modules/@esbuild/linux-arm64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.1.tgz", + "integrity": "sha512-cX8WdlF6Cnvw/DO9/X7XLH2J6CkBnz7Twjpk56cshk9sjYVcuh4sXQBy5bmTwzBjNVZze2yaV1vtcJS04LbN8w==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@types/node": "*" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "node_modules/@esbuild/linux-ia32": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.1.tgz", + "integrity": "sha512-4H/sQCy1mnnGkUt/xszaLlYJVTz3W9ep52xEefGtd6yXDQbz/5fZE5dFLUgsPdbUOQANcVUa5iO6g3nyy5BJiw==", + "cpu": [ + "ia32" + ], "dev": true, - "dependencies": { - "@types/node": "*" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", - "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "node_modules/@esbuild/linux-loong64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.1.tgz", + "integrity": "sha512-c0jgtB+sRHCciVXlyjDcWb2FUuzlGVRwGXgI+3WqKOIuoo8AmZAddzeOHeYLtD+dmtHw3B4Xo9wAUdjlfW5yYA==", + "cpu": [ + "loong64" + ], "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.1.tgz", + "integrity": "sha512-TgFyCfIxSujyuqdZKDZ3yTwWiGv+KnlOeXXitCQ+trDODJ+ZtGOzLkSWngynP0HZnTsDyBbPy7GWVXWaEl6lhA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.1.tgz", + "integrity": "sha512-b+yuD1IUeL+Y93PmFZDZFIElwbmFfIKLKlYI8M6tRyzE6u7oEP7onGk0vZRh8wfVGC2dZoy0EqX1V8qok4qHaw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.1.tgz", + "integrity": "sha512-wpDlpE0oRKZwX+GfomcALcouqjjV8MIX8DyTrxfyCfXxoKQSDm45CZr9fanJ4F6ckD4yDEPT98SrjvLwIqUCgg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.1.tgz", + "integrity": "sha512-5BepC2Au80EohQ2dBpyTquqGCES7++p7G+7lXe1bAIvMdXm4YYcEfZtQrP4gaoZ96Wv1Ute61CEHFU7h4FMueQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.1.tgz", + "integrity": "sha512-5gRPk7pKuaIB+tmH+yKd2aQTRpqlf1E4f/mC+tawIm/CGJemZcHZpp2ic8oD83nKgUPMEd0fNanrnFljiruuyA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.1.tgz", + "integrity": "sha512-4fL68JdrLV2nVW2AaWZBv3XEm3Ae3NZn/7qy2KGAt3dexAgSVT+Hc97JKSZnqezgMlv9x6KV0ZkZY7UO5cNLCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.1.tgz", + "integrity": "sha512-GhRuXlvRE+twf2ES+8REbeCb/zeikNqwD3+6S5y5/x+DYbAQUNl0HNBs4RQJqrechS4v4MruEr8ZtAin/hK5iw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.1.tgz", + "integrity": "sha512-ZnWEyCM0G1Ex6JtsygvC3KUUrlDXqOihw8RicRuQAzw+c4f1D66YlPNNV3rkjVW90zXVsHwZYWbJh3v+oQFM9Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.1.tgz", + "integrity": "sha512-QZ6gXue0vVQY2Oon9WyLFCdSuYbXSoxaZrPuJ4c20j6ICedfsDilNPYfHLlMH7vGfU5DQR0czHLmJvH4Nzis/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.1.tgz", + "integrity": "sha512-HzcJa1NcSWTAU0MJIxOho8JftNp9YALui3o+Ny7hCh0v5f90nprly1U3Sj1Ldj/CvKKdvvFsCRvDkpsEMp4DNw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.1.tgz", + "integrity": "sha512-0MBh53o6XtI6ctDnRMeQ+xoCN8kD2qI1rY1KgF/xdWQwoFeKou7puvDfV8/Wv4Ctx2rRpET/gGdz3YlNtNACSA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "dev": true + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform/node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "dev": true + }, + "node_modules/@manypkg/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.5.5", + "@types/node": "^12.7.1", + "find-up": "^4.1.0", + "fs-extra": "^8.1.0" + } + }, + "node_modules/@manypkg/find-root/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "dev": true + }, + "node_modules/@manypkg/find-root/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@manypkg/find-root/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@manypkg/find-root/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@manypkg/get-packages": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@manypkg/get-packages/-/get-packages-1.1.3.tgz", + "integrity": "sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.5.5", + "@changesets/types": "^4.0.1", + "@manypkg/find-root": "^1.1.0", + "fs-extra": "^8.1.0", + "globby": "^11.0.0", + "read-yaml-file": "^1.1.0" + } + }, + "node_modules/@manypkg/get-packages/node_modules/@changesets/types": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@changesets/types/-/types-4.1.0.tgz", + "integrity": "sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==", + "dev": true + }, + "node_modules/@manypkg/get-packages/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@manypkg/get-packages/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@manypkg/get-packages/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@manypkg/get-packages/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "dev": true, + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "dev": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz", + "integrity": "sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.0.tgz", + "integrity": "sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.0.tgz", + "integrity": "sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.0.tgz", + "integrity": "sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.0.tgz", + "integrity": "sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.0.tgz", + "integrity": "sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.0.tgz", + "integrity": "sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.0.tgz", + "integrity": "sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.0.tgz", + "integrity": "sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.0.tgz", + "integrity": "sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.0.tgz", + "integrity": "sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.0.tgz", + "integrity": "sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.0.tgz", + "integrity": "sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@shikijs/core": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.1.7.tgz", + "integrity": "sha512-gTYLUIuD1UbZp/11qozD3fWpUTuMqPSf3svDMMrL0UmlGU7D9dPw/V1FonwAorCUJBltaaESxq90jrSjQyGixg==", + "dev": true + }, + "node_modules/@shikijs/transformers": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-1.1.7.tgz", + "integrity": "sha512-lXz011ao4+rvweps/9h3CchBfzb1U5OtP5D51Tqc9lQYdLblWMIxQxH6Ybe1GeGINcEVM4goMyPrI0JvlIp4UQ==", + "dev": true, + "dependencies": { + "shiki": "1.1.7" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", + "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", + "dev": true + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", + "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "dev": true + }, + "node_modules/@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.56.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.2.tgz", + "integrity": "sha512-uQDwm1wFHmbBbCZCqAlq6Do9LYwByNZHWzXppSnay9SuwJ+VRbjkbLABer54kcPnMSlG6Fdiy2yaFXm/z9Z5gw==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.41", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", + "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, + "node_modules/@types/http-proxy": { + "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jsdom": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", + "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/linkify-it": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.5.tgz", + "integrity": "sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==", + "dev": true + }, + "node_modules/@types/markdown-it": { + "version": "13.0.7", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-13.0.7.tgz", + "integrity": "sha512-U/CBi2YUUcTHBt5tjO2r5QV/x0Po6nsYwQU4Y04fBS6vfoImaiZ6f8bi3CjTCxBPQSO1LMyUqkByzi8AidyxfA==", + "dev": true, + "dependencies": { + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + }, + "node_modules/@types/mdurl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.5.tgz", + "integrity": "sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==", + "dev": true + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, + "node_modules/@types/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.11.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.5.tgz", + "integrity": "sha512-g557vgQjUUfN76MZAN/dt1z3dzcUsimuysco0KeluHgrPdJXkP/XdAURgyO2W9fZWHRtRBiVKzKn8vyOAwlG+w==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true + }, + "node_modules/@types/qs": { + "version": "6.9.11", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", + "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", + "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", + "dev": true, + "dependencies": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", + "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", + "dev": true + }, + "node_modules/@types/sizzle": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.8.tgz", + "integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==", + "dev": true + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "dev": true + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", + "dev": true + }, + "node_modules/@types/ws": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.4.tgz", + "integrity": "sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==", + "dev": true, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.21.tgz", + "integrity": "sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.23.9", + "@vue/shared": "3.4.21", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.21.tgz", + "integrity": "sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==", + "dev": true, + "dependencies": { + "@vue/compiler-core": "3.4.21", + "@vue/shared": "3.4.21" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.21.tgz", + "integrity": "sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.23.9", + "@vue/compiler-core": "3.4.21", + "@vue/compiler-dom": "3.4.21", + "@vue/compiler-ssr": "3.4.21", + "@vue/shared": "3.4.21", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.7", + "postcss": "^8.4.35", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.21.tgz", + "integrity": "sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==", + "dev": true, + "dependencies": { + "@vue/compiler-dom": "3.4.21", + "@vue/shared": "3.4.21" + } + }, + "node_modules/@vue/devtools-api": { + "version": "7.0.17", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.0.17.tgz", + "integrity": "sha512-UWU9tqzUBv+ttUxYLaQcL5IxSSdF+i6yheFiEtz7mh88YZUYkxpEmT43iKBs3YsC54ROwPD2iZIndnju6PWfOQ==", + "dev": true, + "dependencies": { + "@vue/devtools-kit": "^7.0.17" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.0.17", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.0.17.tgz", + "integrity": "sha512-znPLSOoTP3RnR9fvkq5M+nnpEA+WocybzOo5ID73vYkE0/n0VcfU8Ld0j4AHQjV/omTdAzh6QLpPlUYdIHXg+w==", + "dev": true, + "dependencies": { + "@vue/devtools-shared": "^7.0.17", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.0.17", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.0.17.tgz", + "integrity": "sha512-QNg2TMQBFFffRbTKE9NjytXBywGR77p2UMi/gJ0ow58S+1jkAvL8ikU/JnSs9ePvsVtspHX32m2cdfe4DJ4ygw==", + "dev": true, + "dependencies": { + "rfdc": "^1.3.1" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.21.tgz", + "integrity": "sha512-UhenImdc0L0/4ahGCyEzc/pZNwVgcglGy9HVzJ1Bq2Mm9qXOpP8RyNTjookw/gOCUlXSEtuZ2fUg5nrHcoqJcw==", + "dev": true, + "dependencies": { + "@vue/shared": "3.4.21" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.21.tgz", + "integrity": "sha512-pQthsuYzE1XcGZznTKn73G0s14eCJcjaLvp3/DKeYWoFacD9glJoqlNBxt3W2c5S40t6CCcpPf+jG01N3ULyrA==", + "dev": true, + "dependencies": { + "@vue/reactivity": "3.4.21", + "@vue/shared": "3.4.21" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.21.tgz", + "integrity": "sha512-gvf+C9cFpevsQxbkRBS1NpU8CqxKw0ebqMvLwcGQrNpx6gqRDodqKqA+A2VZZpQ9RpK2f9yfg8VbW/EpdFUOJw==", + "dev": true, + "dependencies": { + "@vue/runtime-core": "3.4.21", + "@vue/shared": "3.4.21", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.21.tgz", + "integrity": "sha512-aV1gXyKSN6Rz+6kZ6kr5+Ll14YzmIbeuWe7ryJl5muJ4uwSwY/aStXTixx76TwkZFJLm1aAlA/HSWEJ4EyiMkg==", + "dev": true, + "dependencies": { + "@vue/compiler-ssr": "3.4.21", + "@vue/shared": "3.4.21" + }, + "peerDependencies": { + "vue": "3.4.21" + } + }, + "node_modules/@vue/shared": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.21.tgz", + "integrity": "sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==", + "dev": true + }, + "node_modules/@vueuse/core": { + "version": "10.9.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.9.0.tgz", + "integrity": "sha512-/1vjTol8SXnx6xewDEKfS0Ra//ncg4Hb0DaZiwKf7drgfMsKFExQ+FnnENcN6efPen+1kIzhLQoGSy0eDUVOMg==", + "dev": true, + "dependencies": { + "@types/web-bluetooth": "^0.0.20", + "@vueuse/metadata": "10.9.0", + "@vueuse/shared": "10.9.0", + "vue-demi": ">=0.14.7" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/core/node_modules/vue-demi": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz", + "integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vueuse/integrations": { + "version": "10.9.0", + "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-10.9.0.tgz", + "integrity": "sha512-acK+A01AYdWSvL4BZmCoJAcyHJ6EqhmkQEXbQLwev1MY7NBnS+hcEMx/BzVoR9zKI+UqEPMD9u6PsyAuiTRT4Q==", + "dev": true, + "dependencies": { + "@vueuse/core": "10.9.0", + "@vueuse/shared": "10.9.0", + "vue-demi": ">=0.14.7" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "async-validator": "*", + "axios": "*", + "change-case": "*", + "drauu": "*", + "focus-trap": "*", + "fuse.js": "*", + "idb-keyval": "*", + "jwt-decode": "*", + "nprogress": "*", + "qrcode": "*", + "sortablejs": "*", + "universal-cookie": "*" + }, + "peerDependenciesMeta": { + "async-validator": { + "optional": true + }, + "axios": { + "optional": true + }, + "change-case": { + "optional": true + }, + "drauu": { + "optional": true + }, + "focus-trap": { + "optional": true + }, + "fuse.js": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "jwt-decode": { + "optional": true + }, + "nprogress": { + "optional": true + }, + "qrcode": { + "optional": true + }, + "sortablejs": { + "optional": true + }, + "universal-cookie": { + "optional": true + } + } + }, + "node_modules/@vueuse/integrations/node_modules/vue-demi": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz", + "integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vueuse/metadata": { + "version": "10.9.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.9.0.tgz", + "integrity": "sha512-iddNbg3yZM0X7qFY2sAotomgdHK7YJ6sKUvQqbvwnf7TmaVPxS4EJydcNsVejNdS8iWCtDk+fYXr7E32nyTnGA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "10.9.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.9.0.tgz", + "integrity": "sha512-Uud2IWncmAfJvRaFYzv5OHDli+FbOzxiVEQdLCKQKLyhz94PIyFC3CHcH7EDMwIn8NPtD06+PNbC/PiO0LGLtw==", + "dev": true, + "dependencies": { + "vue-demi": ">=0.14.7" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared/node_modules/vue-demi": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz", + "integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", + "dev": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", + "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", + "dev": true, + "dependencies": { + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "dev": true, + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/algoliasearch": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.22.1.tgz", + "integrity": "sha512-jwydKFQJKIx9kIZ8Jm44SdpigFwRGPESaxZBaHSV0XWN2yBJAOT4mT7ppvlrpA4UGzz92pqFnVKr/kaZXrcreg==", + "dev": true, + "dependencies": { + "@algolia/cache-browser-local-storage": "4.22.1", + "@algolia/cache-common": "4.22.1", + "@algolia/cache-in-memory": "4.22.1", + "@algolia/client-account": "4.22.1", + "@algolia/client-analytics": "4.22.1", + "@algolia/client-common": "4.22.1", + "@algolia/client-personalization": "4.22.1", + "@algolia/client-search": "4.22.1", + "@algolia/logger-common": "4.22.1", + "@algolia/logger-console": "4.22.1", + "@algolia/requester-browser-xhr": "4.22.1", + "@algolia/requester-common": "4.22.1", + "@algolia/requester-node-http": "4.22.1", + "@algolia/transporter": "4.22.1" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "node_modules/arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "dev": true + }, + "node_modules/async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha512-VUeSMD8nEGBWaZK4lizI1sf3yEC7pnAQ/mrI7pC2fBz2s/tq5jWWEngTwaf0Gruu/OoXRGLGg1XFqpYBiGTYJA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "dev": true + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true, + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/better-path-resolve": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/better-path-resolve/-/better-path-resolve-1.0.0.tgz", + "integrity": "sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==", + "dev": true, + "dependencies": { + "is-windows": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/blob-util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", + "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", + "dev": true + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/bonjour-service": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/breakword": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/breakword/-/breakword-1.0.6.tgz", + "integrity": "sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw==", + "dev": true, + "dependencies": { + "wcwidth": "^1.0.1" + } + }, + "node_modules/browserslist": { + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cachedir": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz", + "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001579", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001579.tgz", + "integrity": "sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/check-more-types": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/@types/eslint": { - "version": "8.56.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.2.tgz", - "integrity": "sha512-uQDwm1wFHmbBbCZCqAlq6Do9LYwByNZHWzXppSnay9SuwJ+VRbjkbLABer54kcPnMSlG6Fdiy2yaFXm/z9Z5gw==", + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", + "dev": true + }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", "dev": true, "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" } }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "node_modules/cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "dev": true }, - "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", "dev": true, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" + "engines": { + "node": ">=4.0.0" } }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.41", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", - "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dev": true, "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dev": true, "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { - "@types/node": "*" + "ms": "2.0.0" } }, - "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "node_modules/@types/http-proxy": { - "version": "1.17.14", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", - "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", - "dev": true, - "dependencies": { - "@types/node": "*" - } + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" + "engines": { + "node": ">=0.8" } }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, "dependencies": { - "@types/istanbul-lib-report": "*" + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/@types/jsdom": { - "version": "20.0.1", - "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", - "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true, - "dependencies": { - "@types/node": "*", - "@types/tough-cookie": "*", - "parse5": "^7.0.0" + "engines": { + "node": ">= 0.6" } }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } }, - "node_modules/@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "dev": true }, - "node_modules/@types/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", "dev": true }, - "node_modules/@types/node": { - "version": "20.11.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.5.tgz", - "integrity": "sha512-g557vgQjUUfN76MZAN/dt1z3dzcUsimuysco0KeluHgrPdJXkP/XdAURgyO2W9fZWHRtRBiVKzKn8vyOAwlG+w==", + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "dev": true, "dependencies": { - "undici-types": "~5.26.4" + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" } }, - "node_modules/@types/node-forge": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", - "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, "dependencies": { - "@types/node": "*" + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true - }, - "node_modules/@types/qs": { - "version": "6.9.11", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", - "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", - "dev": true - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } }, - "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "node_modules/css-functions-list": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.1.tgz", + "integrity": "sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==", "dev": true, - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" + "engines": { + "node": ">=12 || >=16" } }, - "node_modules/@types/serve-index": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", - "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", "dev": true, "dependencies": { - "@types/express": "*" + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" } }, - "node_modules/@types/serve-static": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", - "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, - "dependencies": { - "@types/http-errors": "*", - "@types/mime": "*", - "@types/node": "*" + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" } }, - "node_modules/@types/sinonjs__fake-timers": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", - "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", + "node_modules/cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", "dev": true }, - "node_modules/@types/sizzle": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.8.tgz", - "integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==", + "node_modules/cssstyle": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.0.1.tgz", + "integrity": "sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==", + "dev": true, + "dependencies": { + "rrweb-cssom": "^0.6.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", "dev": true }, - "node_modules/@types/sockjs": { - "version": "0.3.36", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", - "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "node_modules/csv": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/csv/-/csv-5.5.3.tgz", + "integrity": "sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==", "dev": true, "dependencies": { - "@types/node": "*" + "csv-generate": "^3.4.3", + "csv-parse": "^4.16.3", + "csv-stringify": "^5.6.5", + "stream-transform": "^2.1.3" + }, + "engines": { + "node": ">= 0.1.90" } }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "node_modules/csv-generate": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/csv-generate/-/csv-generate-3.4.3.tgz", + "integrity": "sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==", "dev": true }, - "node_modules/@types/tough-cookie": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", - "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "node_modules/csv-parse": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-4.16.3.tgz", + "integrity": "sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==", "dev": true }, - "node_modules/@types/ws": { - "version": "8.5.10", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", - "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "node_modules/csv-stringify": { + "version": "5.6.5", + "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.6.5.tgz", + "integrity": "sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==", + "dev": true + }, + "node_modules/cypress": { + "version": "13.6.3", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.6.3.tgz", + "integrity": "sha512-d/pZvgwjAyZsoyJ3FOsJT5lDsqnxQ/clMqnNc++rkHjbkkiF2h9s0JsZSyyH4QXhVFW3zPFg82jD25roFLOdZA==", "dev": true, + "hasInstallScript": true, "dependencies": { - "@types/node": "*" + "@cypress/request": "^3.0.0", + "@cypress/xvfb": "^1.2.4", + "@types/sinonjs__fake-timers": "8.1.1", + "@types/sizzle": "^2.3.2", + "arch": "^2.2.0", + "blob-util": "^2.0.2", + "bluebird": "^3.7.2", + "buffer": "^5.6.0", + "cachedir": "^2.3.0", + "chalk": "^4.1.0", + "check-more-types": "^2.24.0", + "cli-cursor": "^3.1.0", + "cli-table3": "~0.6.1", + "commander": "^6.2.1", + "common-tags": "^1.8.0", + "dayjs": "^1.10.4", + "debug": "^4.3.4", + "enquirer": "^2.3.6", + "eventemitter2": "6.4.7", + "execa": "4.1.0", + "executable": "^4.1.1", + "extract-zip": "2.0.1", + "figures": "^3.2.0", + "fs-extra": "^9.1.0", + "getos": "^3.2.1", + "is-ci": "^3.0.0", + "is-installed-globally": "~0.4.0", + "lazy-ass": "^1.6.0", + "listr2": "^3.8.3", + "lodash": "^4.17.21", + "log-symbols": "^4.0.0", + "minimist": "^1.2.8", + "ospath": "^1.2.2", + "pretty-bytes": "^5.6.0", + "process": "^0.11.10", + "proxy-from-env": "1.0.0", + "request-progress": "^3.0.0", + "semver": "^7.5.3", + "supports-color": "^8.1.1", + "tmp": "~0.2.1", + "untildify": "^4.0.0", + "yauzl": "^2.10.0" + }, + "bin": { + "cypress": "bin/cypress" + }, + "engines": { + "node": "^16.0.0 || ^18.0.0 || >=20.0.0" } }, - "node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", "dev": true, "dependencies": { - "@types/yargs-parser": "*" + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" } }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true - }, - "node_modules/@types/yauzl": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", - "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "node_modules/data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", "dev": true, - "optional": true, "dependencies": { - "@types/node": "*" + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "node_modules/dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==", "dev": true }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", - "dev": true + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "node_modules/decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", "dev": true }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "node_modules/dedent": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } } }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "dev": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" } }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "node_modules/default-gateway/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "node_modules/default-gateway/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "node_modules/default-gateway/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "engines": { + "node": ">=10.17.0" } }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@xtuc/long": "4.2.2" + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@webpack-cli/configtest": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", - "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, "engines": { - "node": ">=14.15.0" + "node": ">= 0.4" }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@webpack-cli/info": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", - "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true, "engines": { - "node": ">=14.15.0" - }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" + "node": ">=8" } }, - "node_modules/@webpack-cli/serve": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", - "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, - "engines": { - "node": ">=14.15.0" + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, - "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" + "engines": { + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "deprecated": "Use your platform's native atob() and btoa() methods instead", - "dev": true - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, "engines": { - "node": ">= 0.6" + "node": ">=0.4.0" } }, - "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, - "bin": { - "acorn": "bin/acorn" - }, "engines": { - "node": ">=0.4.0" + "node": ">= 0.8" } }, - "node_modules/acorn-globals": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", - "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, - "dependencies": { - "acorn": "^8.1.0", - "acorn-walk": "^8.0.2" + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true, - "peerDependencies": { - "acorn": "^8" + "engines": { + "node": ">=8" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/acorn-walk": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, "engines": { - "node": ">=0.4.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "dependencies": { - "debug": "4" + "path-type": "^4.0.0" }, "engines": { - "node": ">= 6.0.0" + "node": ">=8" } }, - "node_modules/agentkeepalive": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", - "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "dev": true, "dependencies": { - "humanize-ms": "^1.2.1" + "@leichtgewicht/ip-codec": "^2.0.1" }, "engines": { - "node": ">= 8.0.0" + "node": ">=6" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "esutils": "^2.0.2" }, "engines": { - "node": ">=8" + "node": ">=6.0.0" } }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "deprecated": "Use your platform's native DOMException instead", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "webidl-conversions": "^7.0.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": ">=12" } }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", "dev": true, "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } + "no-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "dev": true }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "node_modules/electron-to-chromium": { + "version": "1.4.642", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.642.tgz", + "integrity": "sha512-M4+u22ZJGpk4RY7tne6W+APkZhnnhmAH48FNl8iEFK2lEgob+U5rUQsIqQhvAwCXYpfd3H20pHK/ENsCvwTbsA==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true, "engines": { - "node": ">=6" + "node": ">= 4" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.8" } }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "once": "^1.4.0" } }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "node_modules/engine.io": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.4.tgz", + "integrity": "sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==", "dev": true, "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0" }, "engines": { - "node": ">= 8" + "node": ">=10.2.0" } }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true + "node_modules/engine.io-client": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.3.tgz", + "integrity": "sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==", + "dev": true, + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0", + "xmlhttprequest-ssl": "~2.0.0" + } }, - "node_modules/arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "node_modules/engine.io-client/node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true }, - { - "type": "consulting", - "url": "https://feross.org/support" + "utf-8-validate": { + "optional": true } - ] + } }, - "node_modules/are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "node_modules/engine.io-parser": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.2.tgz", + "integrity": "sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==", "dev": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=10.0.0" } }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "node_modules/engine.io/node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", "dev": true, "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "node_modules/engine.io/node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", "dev": true, "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true, + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, "engines": { - "node": ">=0.8" + "node": ">=10.13.0" } }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, "engines": { - "node": ">=8" + "node": ">=8.6" } }, - "node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", - "dev": true - }, - "node_modules/async-foreach": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "integrity": "sha512-VUeSMD8nEGBWaZK4lizI1sf3yEC7pnAQ/mrI7pC2fBz2s/tq5jWWEngTwaf0Gruu/OoXRGLGg1XFqpYBiGTYJA==", + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, "engines": { - "node": "*" + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, "engines": { - "node": ">= 4.0.0" + "node": ">=6" } }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "node_modules/envinfo": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.0.tgz", + "integrity": "sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==", "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, "engines": { - "node": "*" + "node": ">=4" } }, - "node_modules/aws4": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", "dev": true }, - "node_modules/babel-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "dependencies": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.22.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.5.tgz", + "integrity": "sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.1", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.0", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.5", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.14" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.4" }, - "peerDependencies": { - "@babel/core": "^7.8.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" + "get-intrinsic": "^1.2.4" }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/babel-plugin-istanbul/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } + "node_modules/es-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", + "dev": true }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.4" } }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "hasown": "^2.0.0" } }, - "node_modules/babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.4" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "node_modules/esbuild": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.1.tgz", + "integrity": "sha512-OJwEgrpWm/PCMsLVWXKqvcjme3bHNpOgN7Tb6cQnR5n0TPbQx1/Xrn7rqM+wn17bYeT6MGB5sn1Bh5YiGi70nA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.1", + "@esbuild/android-arm": "0.20.1", + "@esbuild/android-arm64": "0.20.1", + "@esbuild/android-x64": "0.20.1", + "@esbuild/darwin-arm64": "0.20.1", + "@esbuild/darwin-x64": "0.20.1", + "@esbuild/freebsd-arm64": "0.20.1", + "@esbuild/freebsd-x64": "0.20.1", + "@esbuild/linux-arm": "0.20.1", + "@esbuild/linux-arm64": "0.20.1", + "@esbuild/linux-ia32": "0.20.1", + "@esbuild/linux-loong64": "0.20.1", + "@esbuild/linux-mips64el": "0.20.1", + "@esbuild/linux-ppc64": "0.20.1", + "@esbuild/linux-riscv64": "0.20.1", + "@esbuild/linux-s390x": "0.20.1", + "@esbuild/linux-x64": "0.20.1", + "@esbuild/netbsd-x64": "0.20.1", + "@esbuild/openbsd-x64": "0.20.1", + "@esbuild/sunos-x64": "0.20.1", + "@esbuild/win32-arm64": "0.20.1", + "@esbuild/win32-ia32": "0.20.1", + "@esbuild/win32-x64": "0.20.1" + } }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "node_modules/esbuild-loader": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/esbuild-loader/-/esbuild-loader-4.1.0.tgz", + "integrity": "sha512-543TtIvqbqouEMlOHg4xKoDQkmdImlwIpyAIgpUtDPvMuklU/c2k+Qt2O3VeDBgAwozxmlEbjOzV+F8CZ0g+Bw==", "dev": true, "dependencies": { - "tweetnacl": "^0.14.3" + "esbuild": "^0.20.0", + "get-tsconfig": "^4.7.0", + "loader-utils": "^2.0.4", + "webpack-sources": "^1.4.3" + }, + "funding": { + "url": "https://github.com/privatenumber/esbuild-loader?sponsor=1" + }, + "peerDependencies": { + "webpack": "^4.40.0 || ^5.0.0" } }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "node_modules/esbuild-loader/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "dev": true, - "engines": { - "node": "*" + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" } }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/blob-util": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", - "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "dev": true }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } }, - "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" } }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, "engines": { - "node": ">= 0.8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "dependencies": { - "ms": "2.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, "engines": { - "node": ">=0.6" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/bonjour-service": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", - "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" + "url": "https://opencollective.com/eslint" } }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/browserslist": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", - "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001565", - "electron-to-chromium": "^1.4.601", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" - }, - "bin": { - "browserslist": "cli.js" - }, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": ">=4.0" } }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { - "node-int64": "^0.4.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, + "is-glob": "^4.0.3" + }, "engines": { - "node": "*" + "node": ">=10.13.0" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, "engines": { - "node": ">= 0.8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cacache": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", - "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "dependencies": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^2.0.0" + "yocto-queue": "^0.1.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cacache/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0" + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cacache/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://opencollective.com/eslint" } }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/cacache/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" + "estraverse": "^5.1.0" }, "engines": { - "node": ">=10" + "node": ">=0.10" } }, - "node_modules/cachedir": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz", - "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==", + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "engines": { - "node": ">=6" + "node": ">=4.0" } }, - "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "dependencies": { - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "estraverse": "^5.2.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=4.0" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "engines": { - "node": ">=6" + "node": ">=4.0" } }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" + "engines": { + "node": ">=4.0" } }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.6" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001579", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001579.tgz", - "integrity": "sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] + "node_modules/eventemitter2": { + "version": "6.4.7", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", + "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", + "dev": true }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/executable": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "pify": "^2.2.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "dev": true, "engines": { - "node": ">=10" + "node": ">= 0.8.0" } }, - "node_modules/check-more-types": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", - "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, "engines": { - "node": ">= 0.8.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, "engines": { - "node": ">=6.0" + "node": ">= 0.10.0" } }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "node_modules/clean-css": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", - "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "node_modules/express/node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dev": true, "dependencies": { - "source-map": "~0.6.0" + "side-channel": "^1.0.4" }, "engines": { - "node": ">= 10.0" + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true }, - "node_modules/cli-cursor": { + "node_modules/extendable-error": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/extendable-error/-/extendable-error-0.1.7.tgz", + "integrity": "sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==", + "dev": true + }, + "node_modules/external-editor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, "dependencies": { - "restore-cursor": "^3.1.0" + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "node_modules/external-editor/node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "dependencies": { - "string-width": "^4.2.0" + "os-tmpdir": "~1.0.2" }, "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" + "node": ">=0.6.0" } }, - "node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" }, "engines": { - "node": ">=8" + "node": ">= 10.17.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "@types/yauzl": "^2.9.1" } }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } + "engines": [ + "node >=0.6.0" + ] }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" }, "engines": { - "node": ">=6" + "node": ">=8.6.0" } }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" + "node": ">= 4.9.1" } }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true + "node_modules/fastq": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", + "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "websocket-driver": ">=0.5.1" }, "engines": { - "node": ">=7.0.0" + "node": ">=0.8.0" } }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, - "bin": { - "color-support": "bin.js" + "dependencies": { + "bser": "2.1.1" } }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "dev": true - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, "dependencies": { - "delayed-stream": "~1.0.0" + "escape-string-regexp": "^1.0.5" }, "engines": { - "node": ">= 0.8" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, "engines": { - "node": ">= 6" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "node_modules/filesize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-7.0.0.tgz", + "integrity": "sha512-Wsstw+O1lZ9gVmOI1thyeQvODsaoId2qw14lCqIzUhoHKXX7T2hVpB7BR6SvgodMBgWccrx/y2eyV8L7tDmY6A==", "dev": true, "engines": { - "node": ">=4.0.0" + "node": ">= 0.4.0" } }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "dependencies": { - "mime-db": ">= 1.43.0 < 2" + "to-regex-range": "^5.0.1" }, "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dev": true, "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 0.8" } }, - "node_modules/compression/node_modules/debug": { + "node_modules/finalhandler/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", @@ -3667,1426 +7361,1396 @@ "ms": "2.0.0" } }, - "node_modules/compression/node_modules/ms": { + "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, "engines": { - "node": ">=0.8" + "node": ">=8" } }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "node_modules/find-yarn-workspace-root2": { + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root2/-/find-yarn-workspace-root2-1.2.16.tgz", + "integrity": "sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==", "dev": true, "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" + "micromatch": "^4.0.2", + "pkg-dir": "^4.2.0" } }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, - "engines": { - "node": ">= 0.6" + "bin": { + "flat": "cli.js" } }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, "engines": { - "node": ">= 0.6" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, - "node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "node_modules/focus-trap": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.5.4.tgz", + "integrity": "sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==", "dev": true, "dependencies": { - "env-paths": "^2.2.1", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0" - }, + "tabbable": "^6.2.0" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" + "node": ">=4.0" }, "peerDependenciesMeta": { - "typescript": { + "debug": { "optional": true } } }, - "node_modules/create-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", - "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "prompts": "^2.0.1" - }, - "bin": { - "create-jest": "bin/create-jest.js" - }, + "is-callable": "^1.1.3" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "*" } }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" }, "engines": { - "node": ">= 8" + "node": ">= 0.12" } }, - "node_modules/css-functions-list": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.1.tgz", - "integrity": "sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==", + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true, "engines": { - "node": ">=12 || >=16" + "node": ">= 0.6" } }, - "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "node_modules/fp-ts": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-2.16.3.tgz", + "integrity": "sha512-REm0sOecd4inACbAiFeOxpyOgB+f0OqhmZBBVOc5Ku1HqdroDU5uxYu9mybKj+be4DQ5L2YI6LuosjAfmuJCBQ==", + "dev": true + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + "node": ">=10" } }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, - "bin": { - "cssesc": "bin/cssesc" + "dependencies": { + "minipass": "^3.0.0" }, "engines": { - "node": ">=4" + "node": ">= 8" } }, - "node_modules/cssom": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", - "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "node_modules/fs-monkey": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", + "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==", "dev": true }, - "node_modules/cssstyle": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.0.1.tgz", - "integrity": "sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==", + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, - "dependencies": { - "rrweb-cssom": "^0.6.0" - }, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=18" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/cypress": { - "version": "13.6.3", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.6.3.tgz", - "integrity": "sha512-d/pZvgwjAyZsoyJ3FOsJT5lDsqnxQ/clMqnNc++rkHjbkkiF2h9s0JsZSyyH4QXhVFW3zPFg82jD25roFLOdZA==", + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, - "hasInstallScript": true, "dependencies": { - "@cypress/request": "^3.0.0", - "@cypress/xvfb": "^1.2.4", - "@types/sinonjs__fake-timers": "8.1.1", - "@types/sizzle": "^2.3.2", - "arch": "^2.2.0", - "blob-util": "^2.0.2", - "bluebird": "^3.7.2", - "buffer": "^5.6.0", - "cachedir": "^2.3.0", - "chalk": "^4.1.0", - "check-more-types": "^2.24.0", - "cli-cursor": "^3.1.0", - "cli-table3": "~0.6.1", - "commander": "^6.2.1", - "common-tags": "^1.8.0", - "dayjs": "^1.10.4", - "debug": "^4.3.4", - "enquirer": "^2.3.6", - "eventemitter2": "6.4.7", - "execa": "4.1.0", - "executable": "^4.1.1", - "extract-zip": "2.0.1", - "figures": "^3.2.0", - "fs-extra": "^9.1.0", - "getos": "^3.2.1", - "is-ci": "^3.0.0", - "is-installed-globally": "~0.4.0", - "lazy-ass": "^1.6.0", - "listr2": "^3.8.3", - "lodash": "^4.17.21", - "log-symbols": "^4.0.0", - "minimist": "^1.2.8", - "ospath": "^1.2.2", - "pretty-bytes": "^5.6.0", - "process": "^0.11.10", - "proxy-from-env": "1.0.0", - "request-progress": "^3.0.0", - "semver": "^7.5.3", - "supports-color": "^8.1.1", - "tmp": "~0.2.1", - "untildify": "^4.0.0", - "yauzl": "^2.10.0" - }, - "bin": { - "cypress": "bin/cypress" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { - "node": "^16.0.0 || ^18.0.0 || >=20.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", "dev": true, "dependencies": { - "assert-plus": "^1.0.0" + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" }, "engines": { - "node": ">=0.10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/data-urls": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", - "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "node_modules/gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", "dev": true, "dependencies": { - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0" + "globule": "^1.0.0" }, "engines": { - "node": ">=18" + "node": ">= 4.0.0" } }, - "node_modules/dayjs": { - "version": "1.11.10", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", - "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, - "dependencies": { - "ms": "2.1.2" - }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">=6.9.0" } }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/decamelize-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", - "dev": true - }, - "node_modules/dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", - "dev": true, - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } + "node": ">=8.0.0" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "node_modules/get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", "dev": true, "engines": { "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, "dependencies": { - "execa": "^5.0.0" + "pump": "^3.0.0" }, "engines": { - "node": ">= 10" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/default-gateway/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/default-gateway/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "node_modules/get-tsconfig": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz", + "integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "resolve-pkg-maps": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/default-gateway/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "node_modules/getos": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", + "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", "dev": true, - "engines": { - "node": ">=10.17.0" + "dependencies": { + "async": "^3.2.0" } }, - "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" + "assert-plus": "^1.0.0" } }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, "engines": { - "node": ">=8" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, "engines": { - "node": ">=0.4.0" + "node": ">= 6" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "node_modules/global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", "dev": true, + "dependencies": { + "ini": "2.0.0" + }, "engines": { - "node": ">= 0.8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dev": true, + "dependencies": { + "global-prefix": "^3.0.0" + }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=6" } }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "dev": true, + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "node_modules/global-prefix/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { - "path-type": "^4.0.0" + "type-fest": "^0.20.2" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/dns-packet": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", - "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "node_modules/globals/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dev": true, "dependencies": { - "esutils": "^2.0.2" + "define-properties": "^1.1.3" }, "engines": { - "node": ">=6.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/domexception": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", - "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", - "deprecated": "Use your platform's native DOMException instead", + "node_modules/globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", + "dev": true + }, + "node_modules/globule": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.4.tgz", + "integrity": "sha512-OPTIfhMBh7JbBYDpa5b+Q5ptmMWKwcNcFSR/0c6t8V4f3ZAVBEsKNY37QdVqmLRYSMhOUGYrY0QhSoEpzGr/Eg==", "dev": true, "dependencies": { - "webidl-conversions": "^7.0.0" + "glob": "~7.1.1", + "lodash": "^4.17.21", + "minimatch": "~3.0.2" }, "engines": { - "node": ">=12" + "node": ">= 0.10" } }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "node_modules/globule/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "node_modules/globule/node_modules/minimatch": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", "dev": true, "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true - }, - "node_modules/electron-to-chromium": { - "version": "1.4.642", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.642.tgz", - "integrity": "sha512-M4+u22ZJGpk4RY7tne6W+APkZhnnhmAH48FNl8iEFK2lEgob+U5rUQsIqQhvAwCXYpfd3H20pHK/ENsCvwTbsA==", - "dev": true - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, - "engines": { - "node": ">=12" + "dependencies": { + "get-intrinsic": "^1.1.3" }, "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "engines": { - "node": ">= 4" - } + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "engines": { - "node": ">= 0.8" - } + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, - "optional": true, "dependencies": { - "iconv-lite": "^0.6.2" + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" } }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, - "dependencies": { - "once": "^1.4.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, "engines": { - "node": ">=10.13.0" + "node": ">=8" } }, - "node_modules/enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" + "es-define-property": "^1.0.0" }, - "engines": { - "node": ">=8.6" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true, "engines": { - "node": ">=0.12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/envinfo": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.0.tgz", - "integrity": "sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==", + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, - "bin": { - "envinfo": "dist/cli.js" + "dependencies": { + "has-symbols": "^1.0.3" }, "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-module-lexer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", - "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", - "dev": true - }, - "node_modules/esbuild": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.1.tgz", - "integrity": "sha512-OJwEgrpWm/PCMsLVWXKqvcjme3bHNpOgN7Tb6cQnR5n0TPbQx1/Xrn7rqM+wn17bYeT6MGB5sn1Bh5YiGi70nA==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" + "function-bind": "^1.1.2" }, "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.20.1", - "@esbuild/android-arm": "0.20.1", - "@esbuild/android-arm64": "0.20.1", - "@esbuild/android-x64": "0.20.1", - "@esbuild/darwin-arm64": "0.20.1", - "@esbuild/darwin-x64": "0.20.1", - "@esbuild/freebsd-arm64": "0.20.1", - "@esbuild/freebsd-x64": "0.20.1", - "@esbuild/linux-arm": "0.20.1", - "@esbuild/linux-arm64": "0.20.1", - "@esbuild/linux-ia32": "0.20.1", - "@esbuild/linux-loong64": "0.20.1", - "@esbuild/linux-mips64el": "0.20.1", - "@esbuild/linux-ppc64": "0.20.1", - "@esbuild/linux-riscv64": "0.20.1", - "@esbuild/linux-s390x": "0.20.1", - "@esbuild/linux-x64": "0.20.1", - "@esbuild/netbsd-x64": "0.20.1", - "@esbuild/openbsd-x64": "0.20.1", - "@esbuild/sunos-x64": "0.20.1", - "@esbuild/win32-arm64": "0.20.1", - "@esbuild/win32-ia32": "0.20.1", - "@esbuild/win32-x64": "0.20.1" + "node": ">= 0.4" } }, - "node_modules/esbuild-loader": { + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "dev": true + }, + "node_modules/hosted-git-info": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/esbuild-loader/-/esbuild-loader-4.1.0.tgz", - "integrity": "sha512-543TtIvqbqouEMlOHg4xKoDQkmdImlwIpyAIgpUtDPvMuklU/c2k+Qt2O3VeDBgAwozxmlEbjOzV+F8CZ0g+Bw==", - "dev": true, - "dependencies": { - "esbuild": "^0.20.0", - "get-tsconfig": "^4.7.0", - "loader-utils": "^2.0.4", - "webpack-sources": "^1.4.3" - }, - "funding": { - "url": "https://github.com/privatenumber/esbuild-loader?sponsor=1" + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" }, - "peerDependencies": { - "webpack": "^4.40.0 || ^5.0.0" + "engines": { + "node": ">=10" } }, - "node_modules/esbuild-loader/node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", "dev": true, "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" } }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, - "engines": { - "node": ">=6" + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, - "engines": { - "node": ">=0.8.0" + "dependencies": { + "safe-buffer": "~5.1.0" } }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", "dev": true, "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" + "whatwg-encoding": "^3.1.1" }, "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" + "node": ">=18" } }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/html-entities": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", + "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", "dev": true, - "engines": { - "node": ">=4.0" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] }, - "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/html-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-5.0.0.tgz", + "integrity": "sha512-puaGKdjdVVIFRtgIC2n5dt5bt0N5j6heXlAQZ4Do1MLjHmOT1gCE1Ogg7XZNeJlnOVHHsrZKGs5dfh+XwZ3XPw==", "dev": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" + "html-minifier-terser": "^7.2.0", + "parse5": "^7.1.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 18.12.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" } }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/html-minifier-terser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", + "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "camel-case": "^4.1.2", + "clean-css": "~5.3.2", + "commander": "^10.0.0", + "entities": "^4.4.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.15.1" + }, + "bin": { + "html-minifier-terser": "cli.js" }, "engines": { - "node": ">=8.0.0" + "node": "^14.13.1 || >=16.0.0" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=14" } }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", "dev": true, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">= 0.8" } }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true }, - "node_modules/eslint/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8.0.0" } }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, "dependencies": { - "is-glob": "^4.0.3" + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">=10.13.0" + "node": ">= 6" } }, - "node_modules/eslint/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", "dev": true, "dependencies": { - "p-locate": "^5.0.0" + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" }, "engines": { - "node": ">=10" + "node": ">=12.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } } }, - "node_modules/eslint/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/http-signature": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", + "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", "dev": true, "dependencies": { - "yocto-queue": "^0.1.0" + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.14.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10" } }, - "node_modules/eslint/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, "dependencies": { - "p-limit": "^3.0.2" + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 6" } }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "node_modules/human-id": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/human-id/-/human-id-1.0.2.tgz", + "integrity": "sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==", + "dev": true + }, + "node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "dev": true, - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=8.12.0" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" + "dependencies": { + "ms": "^2.0.0" } }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "dependencies": { - "estraverse": "^5.1.0" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { - "node": ">=0.10" + "node": ">=0.10.0" } }, - "node_modules/esquery/node_modules/estraverse": { + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", "dev": true, "engines": { - "node": ">=4.0" + "node": ">= 4" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "dependencies": { - "estraverse": "^5.2.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">=4.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, "engines": { - "node": ">=4.0" + "node": ">=4" } }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, "engines": { - "node": ">=4.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=0.8.19" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/eventemitter2": { - "version": "6.4.7", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", - "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", "dev": true }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "dev": true, "engines": { - "node": ">=0.8.x" + "node": ">=10" } }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "node_modules/inspectpack": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/inspectpack/-/inspectpack-4.7.1.tgz", + "integrity": "sha512-XoDJbKSM9I2KA+8+OLFJHm8m4NM2pMEgsDD2hze6swVfynEed9ngCx36mRR+otzOsskwnxIZWXjI23FTW1uHqA==", "dev": true, "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" + "chalk": "^4.1.0", + "fp-ts": "^2.6.1", + "io-ts": "^2.2.13", + "io-ts-reporters": "^1.2.2", + "pify": "^5.0.0", + "semver-compare": "^1.0.0", + "yargs": "^16.2.0" }, - "engines": { - "node": ">=10" + "bin": { + "inspectpack": "bin/inspectpack.js" }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "engines": { + "node": ">=6.0.0" } }, - "node_modules/executable": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", - "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "node_modules/inspectpack/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "dependencies": { - "pify": "^2.2.0" - }, - "engines": { - "node": ">=4" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "node_modules/inspectpack/node_modules/pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", "dev": true, "engines": { - "node": ">= 0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "node_modules/inspectpack/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" }, "engines": { - "node": ">= 0.10.0" + "node": ">= 0.4" } }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true, - "dependencies": { - "ms": "2.0.0" + "engines": { + "node": ">=10.13.0" } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "node_modules/io-ts": { + "version": "2.2.21", + "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-2.2.21.tgz", + "integrity": "sha512-zz2Z69v9ZIC3mMLYWIeoUcwWD6f+O7yP92FMVVaXEOSZH1jnVBmET/urd/uoarD1WGBY4rCj8TAyMPzsGNzMFQ==", + "dev": true, + "peerDependencies": { + "fp-ts": "^2.5.0" + } + }, + "node_modules/io-ts-reporters": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/io-ts-reporters/-/io-ts-reporters-1.2.2.tgz", + "integrity": "sha512-igASwWWkDY757OutNcM6zTtdJf/eTZYkoe2ymsX2qpm5bKZLo74FJYjsCtMQOEdY7dRHLLEulCyFQwdN69GBCg==", + "dev": true, + "peerDependencies": { + "fp-ts": "^2.0.2", + "io-ts": "^2.0.0" + } + }, + "node_modules/ip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz", + "integrity": "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==", "dev": true }, - "node_modules/express/node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "node_modules/ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, "dependencies": { - "side-channel": "^1.0.4" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" }, "engines": { - "node": ">=0.6" + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" + "has-bigints": "^1.0.1" }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "binary-extensions": "^2.0.0" }, "engines": { - "node": ">=8.6.0" + "node": ">=8" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">= 4.9.1" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fastq": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", - "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, - "dependencies": { - "reusify": "^1.0.4" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", "dev": true, "dependencies": { - "websocket-driver": ">=0.5.1" + "ci-info": "^3.2.0" }, - "engines": { - "node": ">=0.8.0" + "bin": { + "is-ci": "bin.js" } }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, "dependencies": { - "bser": "2.1.1" + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, "dependencies": { - "pend": "~1.2.0" + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" + "bin": { + "is-docker": "cli.js" }, "engines": { "node": ">=8" @@ -5095,472 +8759,536 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=0.10.0" } }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, "engines": { "node": ">=8" } }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">= 0.8" + "node": ">=0.10.0" } }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "dev": true, "dependencies": { - "ms": "2.0.0" + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", "dev": true }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, "engines": { "node": ">=8" } }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "dev": true, - "bin": { - "flat": "cli.js" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "isobject": "^3.0.1" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=0.10.0" } }, - "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, - "node_modules/follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">=4.0" + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, + "dependencies": { + "call-bind": "^1.0.7" + }, "engines": { - "node": "*" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, "engines": { - "node": ">= 0.12" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "node_modules/is-subdir": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-subdir/-/is-subdir-1.2.0.tgz", + "integrity": "sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==", "dev": true, + "dependencies": { + "better-path-resolve": "1.0.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=4" } }, - "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "has-symbols": "^1.0.2" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, "dependencies": { - "minipass": "^3.0.0" + "which-typed-array": "^1.1.14" }, "engines": { - "node": ">= 8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fs-monkey": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", - "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==", - "dev": true - }, - "node_modules/fs.realpath": { + "node_modules/is-typedarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "dev": true }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=0.10.0" } }, - "node_modules/gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, "dependencies": { - "globule": "^1.0.0" + "is-docker": "^2.0.0" }, "engines": { - "node": ">= 4.0.0" + "node": ">=8" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, "engines": { - "node": ">=6.9.0" + "node": ">=0.10.0" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=8" } }, - "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "node_modules/istanbul-lib-instrument": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", + "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==", "dev": true, "dependencies": { - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, "engines": { - "node": ">=8.0.0" + "node": ">=10" } }, - "node_modules/get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "pump": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-tsconfig": { - "version": "4.7.3", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz", - "integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==", + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "dependencies": { - "resolve-pkg-maps": "^1.0.0" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/getos": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", - "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", - "dev": true, - "dependencies": { - "async": "^3.2.0" + "engines": { + "node": ">=10" } }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, "dependencies": { - "assert-plus": "^1.0.0" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "engines": { - "node": "*" + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, "dependencies": { - "is-glob": "^4.0.1" + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" }, "engines": { - "node": ">= 6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "node_modules/global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "node_modules/jest-changed-files/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "dependencies": { - "ini": "2.0.0" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "node_modules/jest-changed-files/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, - "dependencies": { - "global-prefix": "^3.0.0" - }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "node_modules/jest-changed-files/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, "engines": { - "node": ">=6" + "node": ">=10.17.0" } }, - "node_modules/global-prefix/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "node_modules/jest-changed-files/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "dependencies": { - "isexe": "^2.0.0" + "yocto-queue": "^0.1.0" }, - "bin": { - "which": "bin/which" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, "dependencies": { - "type-fest": "^0.20.2" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/globals/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/jest-circus/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, "engines": { "node": ">=10" }, @@ -5568,2291 +9296,2309 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globby": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, "dependencies": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/globjoin": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", - "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", - "dev": true - }, - "node_modules/globule": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.4.tgz", - "integrity": "sha512-OPTIfhMBh7JbBYDpa5b+Q5ptmMWKwcNcFSR/0c6t8V4f3ZAVBEsKNY37QdVqmLRYSMhOUGYrY0QhSoEpzGr/Eg==", - "dev": true, - "dependencies": { - "glob": "~7.1.1", - "lodash": "^4.17.21", - "minimatch": "~3.0.2" + "bin": { + "jest": "bin/jest.js" }, "engines": { - "node": ">= 0.10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/globule/node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": "*" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } } }, - "node_modules/globule/node_modules/minimatch": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", - "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": "*" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.3" + "detect-newline": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true, "engines": { - "node": ">=6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "node_modules/jest-environment-jsdom": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", + "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2" + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/jsdom": "^20.0.0", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0", + "jsdom": "^20.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "node_modules/jest-environment-jsdom/node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", "dev": true, - "engines": { - "node": ">= 0.4" + "dependencies": { + "cssom": "~0.3.6" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8" } }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "node_modules/jest-environment-jsdom/node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", "dev": true }, - "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "node_modules/jest-environment-jsdom/node_modules/data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", "dev": true, "dependencies": { - "function-bind": "^1.1.2" + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=12" } }, - "node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "node_modules/jest-environment-jsdom/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, "engines": { - "node": ">=10" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "node": ">= 6" } }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/jest-environment-jsdom/node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", "dev": true, "dependencies": { - "safe-buffer": "~5.1.0" + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" } }, - "node_modules/html-encoding-sniffer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", - "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "node_modules/jest-environment-jsdom/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "dependencies": { - "whatwg-encoding": "^3.1.1" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">=18" + "node": ">=0.10.0" } }, - "node_modules/html-entities": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", - "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ] - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/html-loader": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-5.0.0.tgz", - "integrity": "sha512-puaGKdjdVVIFRtgIC2n5dt5bt0N5j6heXlAQZ4Do1MLjHmOT1gCE1Ogg7XZNeJlnOVHHsrZKGs5dfh+XwZ3XPw==", + "node_modules/jest-environment-jsdom/node_modules/jsdom": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", + "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", "dev": true, "dependencies": { - "html-minifier-terser": "^7.2.0", - "parse5": "^7.1.2" + "abab": "^2.0.6", + "acorn": "^8.8.1", + "acorn-globals": "^7.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.2", + "decimal.js": "^10.4.2", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0", + "ws": "^8.11.0", + "xml-name-validator": "^4.0.0" }, "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "node": ">=14" }, "peerDependencies": { - "webpack": "^5.0.0" + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } } }, - "node_modules/html-minifier-terser": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", - "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", + "node_modules/jest-environment-jsdom/node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", "dev": true, "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "~5.3.2", - "commander": "^10.0.0", - "entities": "^4.4.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.15.1" - }, - "bin": { - "html-minifier-terser": "cli.js" + "punycode": "^2.1.1" }, "engines": { - "node": "^14.13.1 || >=16.0.0" + "node": ">=12" } }, - "node_modules/html-minifier-terser/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "node_modules/jest-environment-jsdom/node_modules/w3c-xmlserializer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", "dev": true, + "dependencies": { + "xml-name-validator": "^4.0.0" + }, "engines": { "node": ">=14" } }, - "node_modules/html-tags": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "node_modules/jest-environment-jsdom/node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "iconv-lite": "0.6.3" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=12" } }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true + "node_modules/jest-environment-jsdom/node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "engines": { + "node": ">=12" + } }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "node_modules/jest-environment-jsdom/node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", "dev": true, "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">=12" } }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true + "node_modules/jest-environment-jsdom/node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "engines": { + "node": ">=12" + } }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": ">=8.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, "engines": { - "node": ">= 6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" }, "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "node_modules/http-signature": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", - "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", + "node_modules/jest-haste-map/node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^2.0.2", - "sshpk": "^1.14.1" + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { - "node": ">=0.10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "node_modules/jest-junit": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-16.0.0.tgz", + "integrity": "sha512-A94mmw6NfJab4Fg/BlvVOUXzXgF0XIH6EmTgJ5NDPp4xoKq0Kr7sErb+4Xs9nZvu58pJojz5RFGpqnZYJTrRfQ==", "dev": true, "dependencies": { - "agent-base": "6", - "debug": "4" + "mkdirp": "^1.0.4", + "strip-ansi": "^6.0.1", + "uuid": "^8.3.2", + "xml": "^1.0.1" }, "engines": { - "node": ">= 6" + "node": ">=10.12.0" } }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, "engines": { - "node": ">=8.12.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, "dependencies": { - "ms": "^2.0.0" + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, "engines": { - "node": ">= 4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, "engines": { "node": ">=6" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } } }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, "engines": { - "node": ">=4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, "engines": { - "node": ">=0.8.19" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "node_modules/jest-runner/node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "node_modules/jest-runner/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/interpret": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", - "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "node_modules/jest-runner/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, - "engines": { - "node": ">=10.13.0" + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/ip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz", - "integrity": "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==", - "dev": true - }, - "node_modules/ipaddr.js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, "engines": { - "node": ">= 10" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, "dependencies": { - "binary-extensions": "^2.0.0" + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, "dependencies": { - "ci-info": "^3.2.0" + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" }, - "bin": { - "is-ci": "bin.js" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, "dependencies": { - "hasown": "^2.0.0" + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, - "bin": { - "is-docker": "cli.js" - }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, "engines": { - "node": ">=8" + "node": ">= 10.13.0" } }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "engines": { - "node": ">=6" - } + "node_modules/js-base64": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", + "dev": true }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { - "is-extglob": "^2.1.1" + "argparse": "^2.0.1" }, - "engines": { - "node": ">=0.10.0" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, + "node_modules/jsdom": { + "version": "24.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.0.0.tgz", + "integrity": "sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A==", "dev": true, "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" + "cssstyle": "^4.0.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.4.3", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.7", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.6.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.3", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0", + "ws": "^8.16.0", + "xml-name-validator": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "canvas": "^2.11.2" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } } }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/jsdom/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, "engines": { - "node": ">=0.12.0" + "node": ">= 14" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "node_modules/jsdom/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, "engines": { - "node": ">=8" + "node": ">= 6" } }, - "node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "node_modules/jsdom/node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 14" } }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/jsdom/node_modules/https-proxy-agent": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", "dev": true, "dependencies": { - "isobject": "^3.0.1" + "agent-base": "^7.0.2", + "debug": "4" }, "engines": { - "node": ">=0.10.0" + "node": ">= 14" } }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true, - "engines": { - "node": ">=8" + "bin": { + "jsesc": "bin/jsesc" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=4" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, - "engines": { - "node": ">=10" + "bin": { + "json5": "lib/cli.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=6" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "dependencies": { - "is-docker": "^2.0.0" + "universalify": "^2.0.0" }, - "engines": { - "node": ">=8" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "node_modules/jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", "dev": true, - "engines": { - "node": ">=0.10.0" + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" } }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", - "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==", + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, - "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "node_modules/known-css-properties": { + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", + "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", + "dev": true + }, + "node_modules/launch-editor": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", + "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", "dev": true, "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" } }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/lazy-ass": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": "> 0.8" } }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { - "node": ">=8" + "node": ">= 0.8.0" } }, - "node_modules/jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/listr2": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", + "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", "dev": true, "dependencies": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" - }, - "bin": { - "jest": "bin/jest.js" + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10.0.0" }, "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "enquirer": ">= 2.3.0 < 3" }, "peerDependenciesMeta": { - "node-notifier": { + "enquirer": { "optional": true } } }, - "node_modules/jest-changed-files": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "node_modules/load-yaml-file": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/load-yaml-file/-/load-yaml-file-0.2.0.tgz", + "integrity": "sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==", "dev": true, "dependencies": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0" + "graceful-fs": "^4.1.5", + "js-yaml": "^3.13.0", + "pify": "^4.0.1", + "strip-bom": "^3.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=6" } }, - "node_modules/jest-changed-files/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "node_modules/load-yaml-file/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "sprintf-js": "~1.0.2" } }, - "node_modules/jest-changed-files/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "node_modules/load-yaml-file/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jest-changed-files/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "node_modules/load-yaml-file/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, "engines": { - "node": ">=10.17.0" + "node": ">=6" } }, - "node_modules/jest-changed-files/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/load-yaml-file/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/jest-circus": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.7.0", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.7.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=6.11.5" } }, - "node_modules/jest-circus/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dev": true, "dependencies": { - "yocto-queue": "^0.1.0" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8.9.0" } }, - "node_modules/jest-cli": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "dependencies": { - "@jest/core": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "create-jest": "^29.7.0", - "exit": "^0.1.2", - "import-local": "^3.0.2", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" + "p-locate": "^4.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "node": ">=8" } }, - "node_modules/jest-config": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true + }, + "node_modules/lodash.startcase": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", + "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-jest": "^29.7.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" + "node": ">=10" }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", "dev": true, "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-docblock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "node_modules/log-update/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "dependencies": { - "detect-newline": "^3.0.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/jest-each": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-environment-jsdom": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", - "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", "dev": true, "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/jsdom": "^20.0.0", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0", - "jsdom": "^20.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } + "tslib": "^2.0.3" } }, - "node_modules/jest-environment-jsdom/node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "cssom": "~0.3.6" + "yallist": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/jest-environment-jsdom/node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "node_modules/jest-environment-jsdom/node_modules/data-urls": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", - "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "node_modules/magic-string": { + "version": "0.30.8", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", + "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", "dev": true, "dependencies": { - "abab": "^2.0.6", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0" + "@jridgewell/sourcemap-codec": "^1.4.15" }, "engines": { "node": ">=12" } }, - "node_modules/jest-environment-jsdom/node_modules/form-data": { + "node_modules/make-dir": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "semver": "^7.5.3" }, "engines": { - "node": ">= 6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-environment-jsdom/node_modules/html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "node_modules/make-fetch-happen": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", "dev": true, "dependencies": { - "whatwg-encoding": "^2.0.0" + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" }, "engines": { - "node": ">=12" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/jest-environment-jsdom/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/jest-environment-jsdom/node_modules/jsdom": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", - "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, "dependencies": { - "abab": "^2.0.6", - "acorn": "^8.8.1", - "acorn-globals": "^7.0.0", - "cssom": "^0.5.0", - "cssstyle": "^2.3.0", - "data-urls": "^3.0.2", - "decimal.js": "^10.4.2", - "domexception": "^4.0.0", - "escodegen": "^2.0.0", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.1", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.2", - "parse5": "^7.1.1", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.2", - "w3c-xmlserializer": "^4.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^2.0.0", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0", - "ws": "^8.11.0", - "xml-name-validator": "^4.0.0" - }, + "tmpl": "1.0.5" + } + }, + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true, "engines": { - "node": ">=14" - }, - "peerDependencies": { - "canvas": "^2.5.0" + "node": ">=8" }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-environment-jsdom/node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "node_modules/mark.js": { + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", + "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==", + "dev": true + }, + "node_modules/mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", "dev": true, "dependencies": { - "punycode": "^2.1.1" + "fs-monkey": "^1.0.4" }, "engines": { - "node": ">=12" + "node": ">= 4.0.0" } }, - "node_modules/jest-environment-jsdom/node_modules/w3c-xmlserializer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", - "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "node_modules/meow": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", "dev": true, "dependencies": { - "xml-name-validator": "^4.0.0" + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" }, "engines": { - "node": ">=14" - } - }, - "node_modules/jest-environment-jsdom/node_modules/whatwg-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", - "dev": true, - "dependencies": { - "iconv-lite": "0.6.3" + "node": ">=10" }, - "engines": { - "node": ">=12" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-environment-jsdom/node_modules/whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, "engines": { - "node": ">=12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-environment-jsdom/node_modules/whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, - "dependencies": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" - }, "engines": { - "node": ">=12" + "node": ">= 8" } }, - "node_modules/jest-environment-jsdom/node_modules/xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "dev": true, "engines": { - "node": ">=12" + "node": ">= 0.6" } }, - "node_modules/jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8.6" } }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, + "bin": { + "mime": "cli.js" + }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=4" } }, - "node_modules/jest-haste-map": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" + "node": ">= 0.6" } }, - "node_modules/jest-haste-map/node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "mime-db": "1.52.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.6" } }, - "node_modules/jest-junit": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-16.0.0.tgz", - "integrity": "sha512-A94mmw6NfJab4Fg/BlvVOUXzXgF0XIH6EmTgJ5NDPp4xoKq0Kr7sErb+4Xs9nZvu58pJojz5RFGpqnZYJTrRfQ==", + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, - "dependencies": { - "mkdirp": "^1.0.4", - "strip-ansi": "^6.0.1", - "uuid": "^8.3.2", - "xml": "^1.0.1" - }, "engines": { - "node": ">=10.12.0" + "node": ">=6" } }, - "node_modules/jest-leak-detector": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, - "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=4" } }, - "node_modules/jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "*" } }, - "node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 6" } }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "node_modules/minimist-options/node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } + "node": ">=0.10.0" } }, - "node_modules/jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-resolve": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", "dev": true, "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" + "minipass": "^3.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 8" } }, - "node_modules/jest-resolve-dependencies": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "node_modules/minipass-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", "dev": true, "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" } }, - "node_modules/jest-runner": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "dev": true, "dependencies": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" + "minipass": "^3.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 8" } }, - "node_modules/jest-runner/node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "dev": true, "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "minipass": "^3.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-runner/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", "dev": true, "dependencies": { - "yocto-queue": "^0.1.0" + "minipass": "^3.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/jest-runner/node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "node_modules/minisearch": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-6.3.0.tgz", + "integrity": "sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==", + "dev": true + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dev": true, "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/jest-runtime": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "dev": true + }, + "node_modules/mixme": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/mixme/-/mixme-0.5.10.tgz", + "integrity": "sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q==", "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/globals": "^29.7.0", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 8.0.0" } }, - "node_modules/jest-snapshot": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" + "bin": { + "mkdirp": "bin/cmd.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", "dev": true, "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "bin": { + "multicast-dns": "cli.js" } }, - "node_modules/jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "node_modules/nan": { + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", + "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.6" } }, - "node_modules/jest-watcher": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/neo-blessed": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/neo-blessed/-/neo-blessed-0.2.0.tgz", + "integrity": "sha512-C2kC4K+G2QnNQFXUIxTQvqmrdSIzGTX1ZRKeDW6ChmvPRw8rTkTEJzbEQHiHy06d36PCl/yMOCjquCRV8SpSQw==", "dev": true, - "dependencies": { - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.7.0", - "string-length": "^4.0.1" + "bin": { + "neo-blessed": "bin/tput.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 8.0.0" } }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dev": true, "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" + "lower-case": "^2.0.2", + "tslib": "^2.0.3" } }, - "node_modules/js-base64": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", - "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", - "dev": true - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "node_modules/node-gyp": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", "dev": true, "dependencies": { - "argparse": "^2.0.1" + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" }, "bin": { - "js-yaml": "bin/js-yaml.js" + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 10.12.0" } }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true - }, - "node_modules/jsdom": { - "version": "24.0.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.0.0.tgz", - "integrity": "sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A==", + "node_modules/node-gyp/node_modules/@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", "dev": true, "dependencies": { - "cssstyle": "^4.0.1", - "data-urls": "^5.0.0", - "decimal.js": "^10.4.3", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^4.0.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.2", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.7", - "parse5": "^7.1.2", - "rrweb-cssom": "^0.6.0", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.3", - "w3c-xmlserializer": "^5.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^3.1.1", - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0", - "ws": "^8.16.0", - "xml-name-validator": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "canvas": "^2.11.2" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" } }, - "node_modules/jsdom/node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "node_modules/node-gyp/node_modules/@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "deprecated": "This functionality has been moved to @npmcli/fs", "dev": true, "dependencies": { - "debug": "^4.3.4" + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" }, "engines": { - "node": ">= 14" + "node": ">=10" } }, - "node_modules/jsdom/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "node_modules/node-gyp/node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, "engines": { "node": ">= 6" } }, - "node_modules/jsdom/node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "node_modules/node-gyp/node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", "dev": true, "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" }, "engines": { - "node": ">= 14" + "node": ">= 10" } }, - "node_modules/jsdom/node_modules/https-proxy-agent": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", - "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "node_modules/node-gyp/node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, "dependencies": { - "agent-base": "^7.0.2", + "@tootallnate/once": "1", + "agent-base": "6", "debug": "4" }, "engines": { - "node": ">= 14" + "node": ">= 6" } }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "node_modules/node-gyp/node_modules/make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true + "node_modules/node-gyp/node_modules/minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "dev": true, + "dependencies": { + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "encoding": "^0.1.12" + } }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "node_modules/node-gyp/node_modules/socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", "dev": true, - "bin": { - "json5": "lib/cli.js" + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" }, "engines": { - "node": ">=6" + "node": ">= 10" } }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "node_modules/node-gyp/node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", "dev": true, "dependencies": { - "universalify": "^2.0.0" + "minipass": "^3.1.1" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": ">= 8" } }, - "node_modules/jsprim": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", - "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", + "node_modules/node-gyp/node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, - "engines": [ - "node >=0.6.0" - ], "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" + "unique-slug": "^2.0.0" } }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "node_modules/node-gyp/node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", "dev": true, "dependencies": { - "json-buffer": "3.0.1" + "imurmurhash": "^0.1.4" } }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/node-sass": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-9.0.0.tgz", + "integrity": "sha512-yltEuuLrfH6M7Pq2gAj5B6Zm7m+gdZoG66wTqG6mIZV/zijq3M2OO2HswtT6oBspPyFhHDcaxWpsBm0fRNDHPg==", "dev": true, + "hasInstallScript": true, + "dependencies": { + "async-foreach": "^0.1.3", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "gaze": "^1.0.0", + "get-stdin": "^4.0.1", + "glob": "^7.0.3", + "lodash": "^4.17.15", + "make-fetch-happen": "^10.0.4", + "meow": "^9.0.0", + "nan": "^2.17.0", + "node-gyp": "^8.4.1", + "sass-graph": "^4.0.1", + "stdout-stream": "^1.4.0", + "true-case-path": "^2.2.1" + }, + "bin": { + "node-sass": "bin/node-sass" + }, "engines": { - "node": ">=0.10.0" + "node": ">=16" } }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, "engines": { "node": ">=6" } }, - "node_modules/known-css-properties": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", - "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", - "dev": true - }, - "node_modules/launch-editor": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", - "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", + "node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.8.1" + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" } }, - "node_modules/lazy-ass": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", - "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, "engines": { - "node": "> 0.8" + "node": ">=0.10.0" } }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", "dev": true, "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "node_modules/nwsapi": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", "dev": true }, - "node_modules/listr2": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", - "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, - "dependencies": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.1", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - }, - "peerDependenciesMeta": { - "enquirer": { - "optional": true - } + "node": ">=0.10.0" } }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, "engines": { - "node": ">=6.11.5" + "node": ">= 0.4" } }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" }, "engines": { - "node": ">=8.9.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, "dependencies": { - "p-locate": "^4.1.0" + "ee-first": "1.1.1" }, "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "dev": true + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">=10" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dev": true, "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "node": ">= 0.8.0" } }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ospath": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", + "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", + "dev": true + }, + "node_modules/outdent": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.5.0.tgz", + "integrity": "sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==", + "dev": true + }, + "node_modules/p-filter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", + "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", "dev": true, "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "p-map": "^2.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "node_modules/p-filter/node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { - "tslib": "^2.0.3" + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "p-limit": "^2.2.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/make-dir": { + "node_modules/p-map": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, "dependencies": { - "semver": "^7.5.3" + "aggregate-error": "^3.0.0" }, "engines": { "node": ">=10" @@ -7861,56 +11607,61 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-fetch-happen": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", - "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", "dev": true, "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" + "@types/retry": "0.12.0", + "retry": "^0.13.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=8" } }, - "node_modules/make-fetch-happen/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, "engines": { - "node": ">=12" + "node": ">=6" } }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", "dev": true, "dependencies": { - "tmpl": "1.0.5" + "dot-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, "engines": { "node": ">=8" }, @@ -7918,3233 +11669,3596 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mathml-tag-names": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", - "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "dev": true - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, - "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", "dev": true, "dependencies": { - "fs-monkey": "^1.0.4" - }, + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, "engines": { - "node": ">= 4.0.0" + "node": ">=8" } }, - "node_modules/meow": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", "dev": true }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "dev": true + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, "engines": { - "node": ">=8.6" + "node": ">=0.10.0" } }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "dev": true, - "bin": { - "mime": "cli.js" + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" } }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "node_modules/postcss": { + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "mime-db": "1.52.0" + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" }, "engines": { - "node": ">= 0.6" + "node": "^10 || ^12 || >=14" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "node_modules/postcss-resolve-nested-selector": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", + "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==", + "dev": true + }, + "node_modules/postcss-safe-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.0.tgz", + "integrity": "sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "engines": { - "node": ">=6" + "node": ">=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" } }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "node_modules/postcss-selector-parser": { + "version": "6.0.15", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", + "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, "engines": { "node": ">=4" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/preact": { + "version": "10.19.6", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.19.6.tgz", + "integrity": "sha512-gympg+T2Z1fG1unB8NH29yHJwnEaCH37Z32diPDku316OTnRPeMbiRV9kTrfZpocXjdfnWuFUl/Mj4BHaf6gnw==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/preferred-pm": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/preferred-pm/-/preferred-pm-3.1.3.tgz", + "integrity": "sha512-MkXsENfftWSRpzCzImcp4FRsCc3y1opwB73CfCNWyzMqArju2CrlMHlqB7VexKiPEOjGMbttv1r9fSCn5S610w==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "find-up": "^5.0.0", + "find-yarn-workspace-root2": "1.2.16", + "path-exists": "^4.0.0", + "which-pm": "2.0.0" }, "engines": { - "node": "*" + "node": ">=10" } }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "node_modules/preferred-pm/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "node_modules/preferred-pm/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" + "p-locate": "^5.0.0" }, "engines": { - "node": ">= 6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minimist-options/node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "node_modules/preferred-pm/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/preferred-pm/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, "engines": { - "node": ">= 8" + "node": ">= 0.8.0" } }, - "node_modules/minipass-fetch": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", - "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", + "node_modules/prettier": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", "dev": true, - "dependencies": { - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" + "bin": { + "prettier": "bin/prettier.cjs" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=14" }, - "optionalDependencies": { - "encoding": "^0.1.13" + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, "engines": { - "node": ">= 8" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { - "minipass": "^3.0.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "dev": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, "engines": { - "node": ">= 8" + "node": ">= 0.6.0" } }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" }, "engines": { "node": ">=10" } }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "node_modules/promise-retry/node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" }, - "bin": { - "multicast-dns": "cli.js" + "engines": { + "node": ">= 6" } }, - "node_modules/nan": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", - "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": ">= 0.10" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">= 0.10" } }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "node_modules/proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", "dev": true }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", + "dev": true + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "engines": { - "node": ">= 6.13.0" + "node": ">=6" } }, - "node_modules/node-gyp": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", - "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "node_modules/pure-rand": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", + "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, + "node_modules/qs": { + "version": "6.10.4", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", + "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", "dev": true, "dependencies": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^9.1.0", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" + "side-channel": "^1.0.4" }, "engines": { - "node": ">= 10.12.0" + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/node-gyp/node_modules/@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "dev": true, - "dependencies": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true }, - "node_modules/node-gyp/node_modules/@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "deprecated": "This functionality has been moved to @npmcli/fs", + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=10" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "node_modules/node-gyp/node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true, "engines": { - "node": ">= 6" + "node": ">=8" } }, - "node_modules/node-gyp/node_modules/cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": ">= 10" + "safe-buffer": "^5.1.0" } }, - "node_modules/node-gyp/node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, "engines": { - "node": ">= 6" + "node": ">= 0.6" } }, - "node_modules/node-gyp/node_modules/make-fetch-happen": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dev": true, "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" }, "engines": { - "node": ">= 10" + "node": ">= 0.8" } }, - "node_modules/node-gyp/node_modules/minipass-fetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, - "dependencies": { - "minipass": "^3.1.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" - }, "engines": { - "node": ">=8" - }, - "optionalDependencies": { - "encoding": "^0.1.12" + "node": ">= 0.8" } }, - "node_modules/node-gyp/node_modules/socks-proxy-agent": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", - "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" }, "engines": { - "node": ">= 10" + "node": ">=8" } }, - "node_modules/node-gyp/node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "dependencies": { - "minipass": "^3.1.1" + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" }, "engines": { - "node": ">= 8" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-gyp/node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, - "dependencies": { - "unique-slug": "^2.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/node-gyp/node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "dependencies": { - "imurmurhash": "^0.1.4" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "dev": true - }, - "node_modules/node-sass": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-9.0.0.tgz", - "integrity": "sha512-yltEuuLrfH6M7Pq2gAj5B6Zm7m+gdZoG66wTqG6mIZV/zijq3M2OO2HswtT6oBspPyFhHDcaxWpsBm0fRNDHPg==", + "node_modules/read-pkg/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "hasInstallScript": true, - "dependencies": { - "async-foreach": "^0.1.3", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "gaze": "^1.0.0", - "get-stdin": "^4.0.1", - "glob": "^7.0.3", - "lodash": "^4.17.15", - "make-fetch-happen": "^10.0.4", - "meow": "^9.0.0", - "nan": "^2.17.0", - "node-gyp": "^8.4.1", - "sass-graph": "^4.0.1", - "stdout-stream": "^1.4.0", - "true-case-path": "^2.2.1" - }, "bin": { - "node-sass": "bin/node-sass" - }, - "engines": { - "node": ">=16" + "semver": "bin/semver" } }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "node_modules/read-yaml-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-1.1.0.tgz", + "integrity": "sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==", "dev": true, "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" + "graceful-fs": "^4.1.5", + "js-yaml": "^3.6.1", + "pify": "^4.0.1", + "strip-bom": "^3.0.0" }, "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "node_modules/read-yaml-file/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "sprintf-js": "~1.0.2" } }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "node_modules/read-yaml-file/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "dependencies": { - "path-key": "^3.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "engines": { - "node": ">=8" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "node_modules/read-yaml-file/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=6" } }, - "node_modules/nwsapi": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", - "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", - "dev": true - }, - "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "node_modules/read-yaml-file/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=4" } }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "dependencies": { - "ee-first": "1.1.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": ">= 0.8" + "node": ">= 6" } }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, "engines": { - "node": ">= 0.8" + "node": ">=8.10.0" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", "dev": true, "dependencies": { - "wrappy": "1" + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" } }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, "dependencies": { - "mimic-fn": "^2.1.0" + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { - "node": ">=12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/request-progress": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", "dev": true, "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - }, + "throttleit": "^1.0.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, "engines": { - "node": ">= 0.8.0" + "node": ">=0.10.0" } }, - "node_modules/ospath": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", - "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { - "p-try": "^2.0.0" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">=6" + "bin": { + "resolve": "bin/resolve" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "dependencies": { - "p-limit": "^2.2.0" + "resolve-from": "^5.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, "engines": { - "node": ">=10" - }, + "node": ">=8" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", "dev": true, - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true, - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" + "engines": { + "node": ">= 4" } }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, "engines": { - "node": ">=6" + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "node_modules/rfdc": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", + "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", + "dev": true + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" + "glob": "^7.1.3" }, - "engines": { - "node": ">=8" + "bin": { + "rimraf": "bin.js" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "node_modules/rollup": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.0.tgz", + "integrity": "sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==", "dev": true, "dependencies": { - "entities": "^4.4.0" + "@types/estree": "1.0.5" }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.13.0", + "@rollup/rollup-android-arm64": "4.13.0", + "@rollup/rollup-darwin-arm64": "4.13.0", + "@rollup/rollup-darwin-x64": "4.13.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.13.0", + "@rollup/rollup-linux-arm64-gnu": "4.13.0", + "@rollup/rollup-linux-arm64-musl": "4.13.0", + "@rollup/rollup-linux-riscv64-gnu": "4.13.0", + "@rollup/rollup-linux-x64-gnu": "4.13.0", + "@rollup/rollup-linux-x64-musl": "4.13.0", + "@rollup/rollup-win32-arm64-msvc": "4.13.0", + "@rollup/rollup-win32-ia32-msvc": "4.13.0", + "@rollup/rollup-win32-x64-msvc": "4.13.0", + "fsevents": "~2.3.2" } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "node_modules/rrweb-cssom": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", + "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", + "dev": true + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, - "engines": { - "node": ">= 0.8" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" } }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dev": true, "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "tslib": "^2.1.0" } }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, "engines": { - "node": ">=8" + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, - "engines": { - "node": ">=0.10.0" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "node_modules/sass-graph": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-4.0.1.tgz", + "integrity": "sha512-5YCfmGBmxoIRYHnKK2AKzrAkCoQ8ozO+iumT8K4tXJXRVCPf+7s1/9KxTSW3Rbvf+7Y7b4FR3mWyLnQr3PHocA==", "dev": true, + "dependencies": { + "glob": "^7.0.0", + "lodash": "^4.17.11", + "scss-tokenizer": "^0.4.3", + "yargs": "^17.2.1" + }, + "bin": { + "sassgraph": "bin/sassgraph" + }, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, "engines": { - "node": ">=8.6" + "node": ">= 10.13.0" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "node_modules/scss-tokenizer": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.4.3.tgz", + "integrity": "sha512-raKLgf1LI5QMQnG+RxHz6oK0sL3x3I4FN2UDLqgLOGO8hodECNnNh5BXn7fAyBxrA8zVzdQizQ6XjNJQ+uBwMw==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "js-base64": "^2.4.9", + "source-map": "^0.7.3" } }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "node_modules/scss-tokenizer/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, "engines": { - "node": ">= 6" + "node": ">= 8" } }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "node_modules/search-insights": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.13.0.tgz", + "integrity": "sha512-Orrsjf9trHHxFRuo9/rzm0KIWmgzE8RMlZMzuhZOJ01Rnz3D0YBAe+V6473t6/H6c7irs6Lt48brULAiRWb3Vw==", + "dev": true, + "peer": true + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", "dev": true, "dependencies": { - "find-up": "^4.0.0" + "@types/node-forge": "^1.3.0", + "node-forge": "^1" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/postcss": { - "version": "8.4.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", - "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": "^10 || ^12 || >=14" + "node": ">=10" } }, - "node_modules/postcss-resolve-nested-selector": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", - "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==", + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", "dev": true }, - "node_modules/postcss-safe-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.0.tgz", - "integrity": "sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg==", + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "engines": { - "node": ">=18.0" + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" }, - "peerDependencies": { - "postcss": "^8.4.31" + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/postcss-selector-parser": { - "version": "6.0.15", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", - "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" + "ms": "2.0.0" } }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, - "node_modules/prettier": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", - "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "dependencies": { + "randombytes": "^2.1.0" } }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", "dev": true, - "engines": { - "node": ">=6" + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "ms": "2.0.0" } }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 0.6" } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, "engines": { - "node": ">= 0.6.0" + "node": ">= 0.6" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", "dev": true }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dev": true, "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" }, "engines": { - "node": ">=10" + "node": ">= 0.8.0" } }, - "node_modules/promise-retry/node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, "engines": { - "node": ">= 4" + "node": ">= 0.4" } }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" }, "engines": { - "node": ">= 6" + "node": ">= 0.4" } }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" + "kind-of": "^6.0.2" }, "engines": { - "node": ">= 0.10" + "node": ">=8" } }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, "engines": { - "node": ">= 0.10" + "node": ">=8" } }, - "node_modules/proxy-from-env": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", - "dev": true - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "node_modules/pump": { + "node_modules/shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "engines": { + "node": ">=8" } }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", "dev": true, - "engines": { - "node": ">=6" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/pure-rand": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", - "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", + "node_modules/shiki": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.1.7.tgz", + "integrity": "sha512-9kUTMjZtcPH3i7vHunA6EraTPpPOITYTdA5uMrvsJRexktqP0s7P3s9HVK80b4pP42FRVe03D7fT3NmJv2yYhw==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ] + "dependencies": { + "@shikijs/core": "1.1.7" + } }, - "node_modules/qs": { - "version": "6.10.4", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", - "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true }, - "node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "engines": { "node": ">=8" } }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "dev": true, "dependencies": { - "safe-buffer": "^5.1.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">= 6.0.0", + "npm": ">= 3.0.0" } }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "node_modules/smartwrap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/smartwrap/-/smartwrap-2.0.2.tgz", + "integrity": "sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==", "dev": true, "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "array.prototype.flat": "^1.2.3", + "breakword": "^1.0.5", + "grapheme-splitter": "^1.0.4", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1", + "yargs": "^15.1.0" + }, + "bin": { + "smartwrap": "src/terminal-adapter.js" }, "engines": { - "node": ">= 0.8" + "node": ">=6" } }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "node_modules/smartwrap/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, - "engines": { - "node": ">= 0.8" + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" } }, - "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "node_modules/smartwrap/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "node_modules/smartwrap/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/smartwrap/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "node_modules/smartwrap/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "node_modules/socket.io": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.4.tgz", + "integrity": "sha512-DcotgfP1Zg9iP/dH9zvAQcWrE0TtbMVwXmlV4T4mqsvY+gw+LqUGPfx2AoVyRk0FLME+GQhufDMyacFmw7ksqw==", "dev": true, "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.5.2", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" } }, - "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "node_modules/socket.io-adapter": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.4.tgz", + "integrity": "sha512-wDNHGXGewWAjQPt3pyeYBtpWSq9cLE5UW1ZUPL/2eGK9jtse/FpXib7epSTsz0Q0m+6sg6Y4KtcFTlah1bdOVg==", "dev": true, - "bin": { - "semver": "bin/semver" + "dependencies": { + "debug": "~4.3.4", + "ws": "~8.11.0" } }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "node_modules/socket.io-adapter/node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", "dev": true, "engines": { - "node": ">=8" + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "node_modules/socket.io-client": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.4.tgz", + "integrity": "sha512-wh+OkeF0rAVCrABWQBaEjLfb7DVPotMbu0cgWgyR0v6eA4EoVnAwcIeIbcdTE3GT/H3kbdLl7OoH2+asoDRIIg==", "dev": true, "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.2", + "engine.io-client": "~6.5.2", + "socket.io-parser": "~4.2.4" }, "engines": { - "node": ">= 6" + "node": ">=10.0.0" } }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", "dev": true, "dependencies": { - "picomatch": "^2.2.1" + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" }, "engines": { - "node": ">=8.10.0" + "node": ">=10.0.0" } }, - "node_modules/rechoir": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", - "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dev": true, "dependencies": { - "resolve": "^1.20.0" + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dev": true, + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 10.13.0", + "npm": ">= 3.0.0" } }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", "dev": true, "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">= 10" } }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", "dev": true }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/request-progress": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", - "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", - "dev": true, - "dependencies": { - "throttleit": "^1.0.0" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "node_modules/spawndamnit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawndamnit/-/spawndamnit-2.0.0.tgz", + "integrity": "sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==", "dev": true, "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" + "cross-spawn": "^5.1.0", + "signal-exit": "^3.0.2" } }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "node_modules/spawndamnit/node_modules/cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", "dev": true, - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + "dependencies": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, - "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "node_modules/spawndamnit/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "node_modules/spawndamnit/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "shebang-regex": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "node_modules/spawndamnit/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true, "engines": { - "node": ">= 4" + "node": ">=0.10.0" } }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "node_modules/spawndamnit/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, - "node_modules/rfdc": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", - "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", + "node_modules/spawndamnit/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", "dev": true }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/rrweb-cssom": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", - "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], "dependencies": { - "queue-microtask": "^1.2.2" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "node_modules/spdx-license-ids": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", + "dev": true + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, "dependencies": { - "tslib": "^2.1.0" + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, - "node_modules/sass-graph": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-4.0.1.tgz", - "integrity": "sha512-5YCfmGBmxoIRYHnKK2AKzrAkCoQ8ozO+iumT8K4tXJXRVCPf+7s1/9KxTSW3Rbvf+7Y7b4FR3mWyLnQr3PHocA==", + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", "dev": true, "dependencies": { - "glob": "^7.0.0", - "lodash": "^4.17.11", - "scss-tokenizer": "^0.4.3", - "yargs": "^17.2.1" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" }, "bin": { - "sassgraph": "bin/sassgraph" + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" }, "engines": { - "node": ">=12" + "node": ">=0.10.0" } }, - "node_modules/saxes": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", - "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "node_modules/ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", "dev": true, "dependencies": { - "xmlchars": "^2.2.0" + "minipass": "^3.1.1" }, "engines": { - "node": ">=v12.22.7" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "escape-string-regexp": "^2.0.0" }, "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "node": ">=10" } }, - "node_modules/scss-tokenizer": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.4.3.tgz", - "integrity": "sha512-raKLgf1LI5QMQnG+RxHz6oK0sL3x3I4FN2UDLqgLOGO8hodECNnNh5BXn7fAyBxrA8zVzdQizQ6XjNJQ+uBwMw==", + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, - "dependencies": { - "js-base64": "^2.4.9", - "source-map": "^0.7.3" + "engines": { + "node": ">=8" } }, - "node_modules/scss-tokenizer/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, "engines": { - "node": ">= 8" + "node": ">= 0.8" } }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "node_modules/stdout-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.1" + } + }, + "node_modules/stdout-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/stdout-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, - "node_modules/selfsigned": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", - "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "node_modules/stdout-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "dependencies": { - "@types/node-forge": "^1.3.0", - "node-forge": "^1" + "safe-buffer": "~5.1.0" + } + }, + "node_modules/stream-transform": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/stream-transform/-/stream-transform-2.1.3.tgz", + "integrity": "sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==", + "dev": true, + "dependencies": { + "mixme": "^0.5.1" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" }, "engines": { "node": ">=10" } }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", "dev": true, "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", "dev": true, "dependencies": { - "ms": "2.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { - "randombytes": "^2.1.0" + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, "engines": { - "node": ">= 0.8.0" + "node": ">=6" } }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, "dependencies": { - "ms": "2.0.0" + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "node_modules/stylelint": { + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.2.1.tgz", + "integrity": "sha512-SfIMGFK+4n7XVAyv50CpVfcGYWG4v41y6xG7PqOgQSY8M/PgdK0SQbjWFblxjJZlN9jNq879mB4BCZHJRIJ1hA==", "dev": true, "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "@csstools/css-parser-algorithms": "^2.5.0", + "@csstools/css-tokenizer": "^2.2.3", + "@csstools/media-query-list-parser": "^2.1.7", + "@csstools/selector-specificity": "^3.0.1", + "balanced-match": "^2.0.0", + "colord": "^2.9.3", + "cosmiconfig": "^9.0.0", + "css-functions-list": "^3.2.1", + "css-tree": "^2.3.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "fastest-levenshtein": "^1.0.16", + "file-entry-cache": "^8.0.0", + "global-modules": "^2.0.0", + "globby": "^11.1.0", + "globjoin": "^0.1.4", + "html-tags": "^3.3.1", + "ignore": "^5.3.0", + "imurmurhash": "^0.1.4", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.29.0", + "mathml-tag-names": "^2.1.3", + "meow": "^13.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.33", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^7.0.0", + "postcss-selector-parser": "^6.0.15", + "postcss-value-parser": "^4.2.0", + "resolve-from": "^5.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^7.1.0", + "supports-hyperlinks": "^3.0.0", + "svg-tags": "^1.0.0", + "table": "^6.8.1", + "write-file-atomic": "^5.0.1" + }, + "bin": { + "stylelint": "bin/stylelint.mjs" }, "engines": { - "node": ">= 0.6" + "node": ">=18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" } }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true + "node_modules/stylelint/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } }, - "node_modules/serve-index/node_modules/ms": { + "node_modules/stylelint/node_modules/balanced-match": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", "dev": true }, - "node_modules/serve-index/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "node_modules/stylelint/node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, + "dependencies": { + "flat-cache": "^4.0.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=16.0.0" } }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "node_modules/stylelint/node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" + "flatted": "^3.2.9", + "keyv": "^4.5.4" }, "engines": { - "node": ">= 0.8.0" + "node": ">=16" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "node_modules/set-function-length": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", - "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", + "node_modules/stylelint/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "dependencies": { - "define-data-property": "^1.1.1", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.2", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true + "node_modules/stylelint/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "node_modules/stylelint/node_modules/meow": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylelint/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "dependencies": { - "kind-of": "^6.0.2" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "dependencies": { - "shebang-regex": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/shebang-regex": { + "node_modules/supports-hyperlinks": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz", + "integrity": "sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==", "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, "engines": { - "node": ">=8" + "node": ">=14.18" } }, - "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", "dev": true }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } + "node_modules/tabbable": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", + "dev": true }, - "node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "node_modules/table": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", "dev": true, "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=8" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" + "node": ">=10.0.0" } }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "node_modules/table/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/table/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "dependencies": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, "engines": { - "node": ">= 10" + "node": ">=6" } }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/tar": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", + "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "node_modules/term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "node_modules/terser": { + "version": "5.27.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.0.tgz", + "integrity": "sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==", "dev": true, "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" } }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "dev": true, "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } } }, - "node_modules/spdx-license-ids": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", - "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" }, "engines": { - "node": ">=6.0.0" + "node": ">=8" } }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/throttleit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz", + "integrity": "sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==", "dev": true, - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, - "node_modules/sshpk": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", - "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" + "rimraf": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.17.0" } }, - "node_modules/ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, - "dependencies": { - "minipass": "^3.1.1" - }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=4" } }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "dependencies": { - "escape-string-regexp": "^2.0.0" + "is-number": "^7.0.0" }, "engines": { - "node": ">=10" + "node": ">=8.0" } }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, "engines": { - "node": ">=8" + "node": ">=0.6" } }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "node_modules/tough-cookie": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, "engines": { - "node": ">= 0.8" + "node": ">=6" } }, - "node_modules/stdout-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", - "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", "dev": true, - "dependencies": { - "readable-stream": "^2.0.1" + "engines": { + "node": ">= 4.0.0" } }, - "node_modules/stdout-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "node_modules/tr46": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz", + "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", "dev": true, "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" } }, - "node_modules/stdout-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/stdout-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" + "engines": { + "node": ">=8" } }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } + "node_modules/true-case-path": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", + "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==", + "dev": true }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/tty-table": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/tty-table/-/tty-table-4.2.3.tgz", + "integrity": "sha512-Fs15mu0vGzCrj8fmJNP7Ynxt5J7praPXqFN0leZeZBXJwkMxv9cb2D454k1ltrtUSJbZ4yH4e0CynsHLxmUfFA==", "dev": true, "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" + "chalk": "^4.1.2", + "csv": "^5.5.3", + "kleur": "^4.1.5", + "smartwrap": "^2.0.2", + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.1", + "yargs": "^17.7.1" + }, + "bin": { + "tty-table": "adapters/terminal-adapter.js" }, "engines": { - "node": ">=10" + "node": ">=8.0.0" } }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/tty-table/node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.1" + "safe-buffer": "^5.0.1" }, "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, "engines": { - "node": ">=6" + "node": ">= 0.8.0" } }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, - "dependencies": { - "min-indent": "^1.0.0" - }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stylelint": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.2.1.tgz", - "integrity": "sha512-SfIMGFK+4n7XVAyv50CpVfcGYWG4v41y6xG7PqOgQSY8M/PgdK0SQbjWFblxjJZlN9jNq879mB4BCZHJRIJ1hA==", + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, "dependencies": { - "@csstools/css-parser-algorithms": "^2.5.0", - "@csstools/css-tokenizer": "^2.2.3", - "@csstools/media-query-list-parser": "^2.1.7", - "@csstools/selector-specificity": "^3.0.1", - "balanced-match": "^2.0.0", - "colord": "^2.9.3", - "cosmiconfig": "^9.0.0", - "css-functions-list": "^3.2.1", - "css-tree": "^2.3.1", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^8.0.0", - "global-modules": "^2.0.0", - "globby": "^11.1.0", - "globjoin": "^0.1.4", - "html-tags": "^3.3.1", - "ignore": "^5.3.0", - "imurmurhash": "^0.1.4", - "is-plain-object": "^5.0.0", - "known-css-properties": "^0.29.0", - "mathml-tag-names": "^2.1.3", - "meow": "^13.1.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.33", - "postcss-resolve-nested-selector": "^0.1.1", - "postcss-safe-parser": "^7.0.0", - "postcss-selector-parser": "^6.0.15", - "postcss-value-parser": "^4.2.0", - "resolve-from": "^5.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^7.1.0", - "supports-hyperlinks": "^3.0.0", - "svg-tags": "^1.0.0", - "table": "^6.8.1", - "write-file-atomic": "^5.0.1" - }, - "bin": { - "stylelint": "bin/stylelint.mjs" + "media-typer": "0.3.0", + "mime-types": "~2.1.24" }, "engines": { - "node": ">=18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/stylelint" + "node": ">= 0.6" } }, - "node_modules/stylelint/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, - "engines": { - "node": ">=12" + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "engines": { + "node": ">= 0.4" } }, - "node_modules/stylelint/node_modules/balanced-match": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", - "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", - "dev": true - }, - "node_modules/stylelint/node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, "dependencies": { - "flat-cache": "^4.0.0" + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { - "node": ">=16.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/stylelint/node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { - "node": ">=16" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/stylelint/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/typed-array-length": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.5.tgz", + "integrity": "sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==", "dev": true, "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/stylelint/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, "engines": { - "node": ">=0.10.0" + "node": ">=0.8.0" } }, - "node_modules/stylelint/node_modules/meow": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", - "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, - "engines": { - "node": ">=18" + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/stylelint/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", "dev": true, "dependencies": { - "ansi-regex": "^6.0.1" + "unique-slug": "^3.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "imurmurhash": "^0.1.4" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/supports-hyperlinks": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz", - "integrity": "sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==", + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, "engines": { - "node": ">=14.18" + "node": ">= 10.0.0" } }, - "node_modules/supports-hyperlinks/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "has-flag": "^4.0.0" + "escalade": "^3.1.1", + "picocolors": "^1.0.0" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" + "bin": { + "update-browserslist-db": "cli.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "node_modules/svg-tags": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", - "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", - "dev": true - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "node_modules/table": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" + "punycode": "^2.1.0" } }, - "node_modules/table/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" } }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, - "node_modules/table/node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "node": ">= 0.4.0" } }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, - "engines": { - "node": ">=6" + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/tar": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", - "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "node_modules/v8-to-istanbul": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", "dev": true, "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=10.12.0" } }, - "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true, "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/terser": { - "version": "5.27.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.0.tgz", - "integrity": "sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==", + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", "dev": true, + "engines": [ + "node >=0.6.0" + ], "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" } }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "node_modules/vite": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.6.tgz", + "integrity": "sha512-yYIAZs9nVfRJ/AiOLCA91zzhjsHUgMjB+EigzFb6W2XTLO8JixBCKCjvhKZaye+NKYHCrkv3Oh50dH9EdLU2RA==", "dev": true, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.20", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" + "esbuild": "^0.19.3", + "postcss": "^8.4.35", + "rollup": "^4.2.0" + }, + "bin": { + "vite": "bin/vite.js" }, "engines": { - "node": ">= 10.13.0" + "node": "^18.0.0 || >=20.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" }, "peerDependencies": { - "webpack": "^5.1.0" + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" }, "peerDependenciesMeta": { - "@swc/core": { + "@types/node": { "optional": true }, - "esbuild": { + "less": { "optional": true }, - "uglify-js": { + "lightningcss": { "optional": true - } - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/throttleit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz", - "integrity": "sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } } }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], "dev": true, + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=8.0" + "node": ">=12" } }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], "dev": true, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=0.6" + "node": ">=12" } }, - "node_modules/tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], "dev": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 4.0.0" + "node": ">=12" } }, - "node_modules/tr46": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz", - "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "punycode": "^2.3.1" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], "dev": true, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/true-case-path": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", - "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==", - "dev": true - }, - "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": "*" + "node": ">=12" } }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.8.0" + "node": ">=12" } }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], "dev": true, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.6" + "node": ">=12" } }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true - }, - "node_modules/unique-filename": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", - "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], "dev": true, - "dependencies": { - "unique-slug": "^3.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=12" } }, - "node_modules/unique-slug": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", - "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=12" } }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 10.0.0" + "node": ">=12" } }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.8" + "node": ">=12" } }, - "node_modules/untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } + "optional": true, + "os": [ + "netbsd" ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" + "engines": { + "node": ">=12" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "punycode": "^2.1.0" + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" } }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], "dev": true, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 0.4.0" + "node": ">=12" } }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], "dev": true, - "bin": { - "uuid": "dist/bin/uuid" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "node_modules/v8-to-istanbul": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", - "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=10.12.0" + "node": ">=12" } }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "node_modules/vite/node_modules/esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + }, + "node_modules/vitepress": { + "version": "1.0.0-rc.45", + "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.0.0-rc.45.tgz", + "integrity": "sha512-/OiYsu5UKpQKA2c0BAZkfyywjfauDjvXyv6Mo4Ra57m5n4Bxg1HgUGoth1CLH2vwUbR/BHvDA9zOM0RDvgeSVQ==", + "dev": true, + "dependencies": { + "@docsearch/css": "^3.5.2", + "@docsearch/js": "^3.5.2", + "@shikijs/core": "^1.1.5", + "@shikijs/transformers": "^1.1.5", + "@types/markdown-it": "^13.0.7", + "@vitejs/plugin-vue": "^5.0.4", + "@vue/devtools-api": "^7.0.14", + "@vueuse/core": "^10.7.2", + "@vueuse/integrations": "^10.7.2", + "focus-trap": "^7.5.4", + "mark.js": "8.11.1", + "minisearch": "^6.3.0", + "shiki": "^1.1.5", + "vite": "^5.1.3", + "vue": "^3.4.19" + }, + "bin": { + "vitepress": "bin/vitepress.js" + }, + "peerDependencies": { + "markdown-it-mathjax3": "^4.3.2", + "postcss": "^8.4.35" + }, + "peerDependenciesMeta": { + "markdown-it-mathjax3": { + "optional": true + }, + "postcss": { + "optional": true + } } }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "node_modules/vitepress-plugin-tabs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/vitepress-plugin-tabs/-/vitepress-plugin-tabs-0.5.0.tgz", + "integrity": "sha512-SIhFWwGsUkTByfc2b279ray/E0Jt8vDTsM1LiHxmCOBAEMmvzIBZSuYYT1DpdDTiS3SuJieBheJkYnwCq/yD9A==", "dev": true, - "engines": { - "node": ">= 0.8" + "peerDependencies": { + "vitepress": "^1.0.0-rc.27", + "vue": "^3.3.8" } }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "node_modules/vue": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.21.tgz", + "integrity": "sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==", "dev": true, - "engines": [ - "node >=0.6.0" - ], "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "@vue/compiler-dom": "3.4.21", + "@vue/compiler-sfc": "3.4.21", + "@vue/runtime-dom": "3.4.21", + "@vue/server-renderer": "3.4.21", + "@vue/shared": "3.4.21" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/w3c-xmlserializer": { @@ -11190,6 +15304,15 @@ "minimalistic-assert": "^1.0.0" } }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, "node_modules/webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", @@ -11300,28 +15423,40 @@ "node": ">=14" } }, - "node_modules/webpack-concat-files-plugin": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/webpack-concat-files-plugin/-/webpack-concat-files-plugin-0.5.2.tgz", - "integrity": "sha512-bnsTzDTI5Ur1JaeLs6yeKlNdfRukJR9tgdZIIwy4c5Uyy0kJ0UhrOX42COG42vFZhwAZfo+tzU2/awhKoZw3Ug==", + "node_modules/webpack-dashboard": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/webpack-dashboard/-/webpack-dashboard-3.3.8.tgz", + "integrity": "sha512-pL0I837oxNY3a5CHnCmIrMMJo2VRYgHZUcHWpWCFY7ZPCM2Ye4bS/bnhZBjRPYpA7aMFkiSlS24JH6wgT/Dqyg==", "dev": true, "dependencies": { - "globby": "^10.0.1", - "schema-utils": "^3.0.0", - "webpack-sources": "^1.4.3" + "@changesets/cli": "^2.26.1", + "chalk": "^4.1.1", + "commander": "^8.0.0", + "cross-spawn": "^7.0.3", + "filesize": "^7.0.0", + "handlebars": "^4.1.2", + "inspectpack": "^4.7.1", + "neo-blessed": "^0.2.0", + "socket.io": "^4.1.3", + "socket.io-client": "^4.1.3" + }, + "bin": { + "webpack-dashboard": "bin/webpack-dashboard.js" + }, + "engines": { + "node": ">=8.0.0" }, "peerDependencies": { - "webpack": "4.x || 5.x" + "webpack": "*" } }, - "node_modules/webpack-concat-files-plugin/node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "node_modules/webpack-dashboard/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true, - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "engines": { + "node": ">= 12" } }, "node_modules/webpack-dev-middleware": { @@ -11619,6 +15754,60 @@ "node": ">= 8" } }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "dev": true + }, + "node_modules/which-pm": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-pm/-/which-pm-2.0.0.tgz", + "integrity": "sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==", + "dev": true, + "dependencies": { + "load-yaml-file": "^0.2.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8.15" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", @@ -11634,6 +15823,12 @@ "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "dev": true }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -11724,6 +15919,15 @@ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true }, + "node_modules/xmlhttprequest-ssl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", + "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/package.json b/package.json index 8c12ccc..17632e2 100755 --- a/package.json +++ b/package.json @@ -53,8 +53,11 @@ "cypress:open": "cypress open", "cypress:run": "cypress run --browser chrome ./cypress", "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js ./test/**.spec.js", - "wp:build": "webpack --mode production --config ./webpack.config.prod.js", - "wp:dev": "webpack serve --hot --mode development --config ./webpack.config.js" + "wp:build": "webpack-dashboard -- webpack --mode production --config ./webpack.config.prod.js", + "wp:dev": "webpack-dashboard -- webpack serve --hot --mode development --config ./webpack.config.js", + "docs:dev": "vitepress dev docs", + "docs:build": "vitepress build docs", + "docs:preview": "vitepress preview docs" }, "devDependencies": { "@babel/runtime": "^7.23.6", @@ -70,8 +73,11 @@ "node-sass": "^9.0.0", "prettier": "^3.2.5", "stylelint": "^16.2.1", + "vitepress": "^1.0.0-rc.45", + "vitepress-plugin-tabs": "^0.5.0", "webpack": "^5.89.0", "webpack-cli": "^5.1.4", + "webpack-dashboard": "^3.3.8", "webpack-dev-server": "^4.15.1" } } diff --git a/src/index.html b/src/index.html index 5990b0d..1206c20 100644 --- a/src/index.html +++ b/src/index.html @@ -45,7 +45,6 @@

Kømpletr

type="text" name="auto-complete" id="auto-complete" - class="input--search" autocomplete="off" placeholder="Enter a city name ..." value="" /> @@ -69,42 +68,7 @@

Kømpletr

ready(() => { const input = document.getElementById('auto-complete'); - const options = { - input: null, // Optional - data: [], - options: { - animation: { - type: 'fadeIn', - duration: 500 - }, - theme: 'dark', - multiple: false, - fieldsToDisplay: [ - 'Name', - 'CountryCode', - 'Population' - ], - maxResults: 5, - propToMapAsValue: 'Name', - startQueriyngFromChar: 2, - filterOn: 'prefix', - cache: 50000 - }, - /**onKeyup: async function (value, cb) { - console.log('cb.onKeyup ', value); - console.log('I\'m doing scrappy stuffs with the data!'); - data = ['string', 'string', 'string']; - //cb(data.data); - },**/ - onSelect: (value) => { - console.log('cb.onSelect', value); - }, - onError: (value) => { - console.log('cb.onError ', value); - }, - }; - - // Way 1 + // --- Way 1 const headers = new Headers(); headers.append('content-type', 'application/x-www-form-urlencoded'); @@ -113,17 +77,52 @@

Kømpletr

fetch(`http://localhost:3000/api`, headers) .then(result => result.json()) .then(data => { - options.data = data; - input.kompletr(options); + input.kompletr({ + input: null, // Optional + data, + options: { + animation: { + type: 'slideDown', + duration: 1000 + }, + theme: 'dark', + multiple: false, + fieldsToDisplay: [ + 'Name', + 'CountryCode', + 'Population' + ], + maxResults: 5, + propToMapAsValue: 'Name', + startQueriyngFromChar: 2, + filterOn: 'prefix', + // cache: 50000 + }, + onKeyup: async function (value, done) { + console.log('cb.onKeyup ', value); + console.log('I\'m doing scrappy stuffs with the data!'); + const result = await fetch(`http://localhost:3000/api?q=${value}`, headers); + const d = await result.json(); + console.log('DATA', d) + // data = ['string', 'string', 'string']; + done(d); + }, + onSelect: (selected) => { + console.log('cb.onSelect', selected); + }, + onError: (error) => { + console.log('cb.onError ', error); + }, + }); }) .catch(e => { console.log(e); }); - // Way 2.1 + // --- Way 2.1 // kompletr(input, d, cbs, options); - // Way 2.2 + // --- Way 2.2 // kompletr('auto-complete', d, cbs, options); }); diff --git a/src/js/kompletr.animations.js b/src/js/kompletr.animations.js index 83f7fa7..7e8fced 100644 --- a/src/js/kompletr.animations.js +++ b/src/js/kompletr.animations.js @@ -1,119 +1,139 @@ +import { animation } from "./kompletr.enums.js"; + /** * @descrption Animations functions. */ +export class Animation { + constructor() {} -/** - * @description Apply a fadeIn animation effect - * - * @param {HTMLElement} element Target HTML element - * @param {String} display CSS3 display property value - * @param {Number} duration Duration of the animation in ms - * - * @returns {Void} - * - * @todo Manage duration - */ -const fadeIn = (element, display = 'block', duration = 500) => { - element.style.opacity = 0; - element.style.display = display; - (function fade(){ - let value = parseFloat(element.style.opacity); - if (!((value += .1) > 1)) { - element.style.opacity = value; - requestAnimationFrame(fade); - } - })() -}; + /** + * @description Apply a fadeIn animation effect + * + * @param {HTMLElement} element Target HTML element + * @param {String} display CSS3 display property value + * @param {Number} duration Duration of the animation in ms + * + * @returns {Void} + * + * @todo Manage duration + */ + static fadeIn(element, display = 'block', duration = 500) { + element.style.opacity = 0; + element.style.display = display; + (function fade(){ + let value = parseFloat(element.style.opacity); + if (!((value += .1) > 1)) { + element.style.opacity = value; + requestAnimationFrame(fade); + } + })() + }; -/** - * @description Apply a fadeOut animation effect - * - * @param {HTMLElement} element Target HTML element - * @param {Number} duration Duration of the animation in ms. Default 500ms - * - * @returns {Void} - * - * @todo Manage duration - */ -const fadeOut = (element, duration = 500) => { - element.style.opacity = 1; - (function fade() { - if ((element.style.opacity -= .1) < 0) { + /** + * @description Apply a fadeOut animation effect + * + * @param {HTMLElement} element Target HTML element + * @param {Number} duration Duration of the animation in ms. Default 500ms + * + * @returns {Void} + * + * @todo Manage duration + */ + static fadeOut(element, duration = 500) { + element.style.opacity = 1; + (function fade() { + if ((element.style.opacity -= .1) < 0) { + element.style.display = 'none'; + } else { + requestAnimationFrame(fade); + } + })(); + }; + + /** + * @description Apply a slideUp animation effect + * + * @param {HTMLElement} element Target HTML element + * @param {Number} duration Duration of the animation in ms. Default 500ms + * + * @returns {Void} + */ + static slideUp(element, duration = 500) { + element.style.transitionProperty = 'height, margin, padding'; + element.style.transitionDuration = duration + 'ms'; + element.style.boxSizing = 'border-box'; + element.style.height = element.offsetHeight + 'px'; + element.offsetHeight; + element.style.overflow = 'hidden'; + element.style.height = 0; + element.style.paddingTop = 0; + element.style.paddingBottom = 0; + element.style.marginTop = 0; + element.style.marginBottom = 0; + window.setTimeout( () => { element.style.display = 'none'; - } else { - requestAnimationFrame(fade); - } - })(); -}; + element.style.removeProperty('height'); + element.style.removeProperty('padding-top'); + element.style.removeProperty('padding-bottom'); + element.style.removeProperty('margin-top'); + element.style.removeProperty('margin-bottom'); + element.style.removeProperty('overflow'); + element.style.removeProperty('transition-duration'); + element.style.removeProperty('transition-property'); + }, duration); + }; -/** - * @description Apply a slideUp animation effect - * - * @param {HTMLElement} element Target HTML element - * @param {Number} duration Duration of the animation in ms. Default 500ms - * - * @returns {Void} - */ -const slideUp = (element, duration = 500) => { - element.style.transitionProperty = 'height, margin, padding'; - element.style.transitionDuration = duration + 'ms'; - element.style.boxSizing = 'border-box'; - element.style.height = element.offsetHeight + 'px'; - element.offsetHeight; - element.style.overflow = 'hidden'; - element.style.height = 0; - element.style.paddingTop = 0; - element.style.paddingBottom = 0; - element.style.marginTop = 0; - element.style.marginBottom = 0; - window.setTimeout( () => { - element.style.display = 'none'; - element.style.removeProperty('height'); + /** + * @description Apply a slideDown animation effect + * + * @param {HTMLElement} element Target HTML element + * @param {Number} duration Duration of the animation in ms. Default 500ms + * + * @returns {Void} + */ + static slideDown(element, duration = 500) { + element.style.removeProperty('display'); + let display = window.getComputedStyle(element).display; + if (display === 'none') display = 'block'; + element.style.display = display; + let height = element.offsetHeight; + element.style.overflow = 'hidden'; + element.style.height = 0; + element.style.paddingTop = 0; + element.style.paddingBottom = 0; + element.style.marginTop = 0; + element.style.marginBottom = 0; + element.offsetHeight; + element.style.boxSizing = 'border-box'; + element.style.transitionProperty = "height, margin, padding"; + element.style.transitionDuration = duration + 'ms'; + element.style.height = height + 'px'; element.style.removeProperty('padding-top'); element.style.removeProperty('padding-bottom'); element.style.removeProperty('margin-top'); element.style.removeProperty('margin-bottom'); - element.style.removeProperty('overflow'); - element.style.removeProperty('transition-duration'); - element.style.removeProperty('transition-property'); - }, duration); -}; - -/** - * @description Apply a slideDown animation effect - * - * @param {HTMLElement} element Target HTML element - * @param {Number} duration Duration of the animation in ms. Default 500ms - * - * @returns {Void} - */ -const slideDown = (element, duration = 500) => { - element.style.removeProperty('display'); - let display = window.getComputedStyle(element).display; - if (display === 'none') display = 'block'; - element.style.display = display; - let height = element.offsetHeight; - element.style.overflow = 'hidden'; - element.style.height = 0; - element.style.paddingTop = 0; - element.style.paddingBottom = 0; - element.style.marginTop = 0; - element.style.marginBottom = 0; - element.offsetHeight; - element.style.boxSizing = 'border-box'; - element.style.transitionProperty = "height, margin, padding"; - element.style.transitionDuration = duration + 'ms'; - element.style.height = height + 'px'; - element.style.removeProperty('padding-top'); - element.style.removeProperty('padding-bottom'); - element.style.removeProperty('margin-top'); - element.style.removeProperty('margin-bottom'); - window.setTimeout( () => { - element.style.removeProperty('height'); - element.style.removeProperty('overflow'); - element.style.removeProperty('transition-duration'); - element.style.removeProperty('transition-property'); - }, duration); -}; + window.setTimeout( () => { + element.style.removeProperty('height'); + element.style.removeProperty('overflow'); + element.style.removeProperty('transition-duration'); + element.style.removeProperty('transition-property'); + },duration); + }; -export { fadeIn, fadeOut, slideUp, slideDown }; \ No newline at end of file + /** + * @description This function applies the opposite animation to a given element. + * + * @param {HTMLElement} element - The element to animate. + * @param {string} [type=animation.fadeIn] - The animation to apply. By default, it's 'fadeIn'. + * @param {number} [duration=500] - The duration of the animation in milliseconds. By default, it's 500. + * + * @return {Object} Returns the result of the Animation function with the opposite animation, the element and the duration as parameters. + */ + static animateBack(element, type = animation.fadeIn , duration = 500) { + const animations = { + fadeIn: 'fadeOut', + slideDown: 'slideUp' + }; + return Animation[animations[type]](element, duration); + } +}; \ No newline at end of file diff --git a/src/js/kompletr.cache.js b/src/js/kompletr.cache.js index 996842e..e72ca10 100644 --- a/src/js/kompletr.cache.js +++ b/src/js/kompletr.cache.js @@ -90,9 +90,9 @@ export class Cache { set({ string, data }) { window.caches.open(this._name) .then(cache => { - const headers = new Headers() - .set('Content-Type', 'application/json') - .set('Cache-Control', `max-age=${this._duration}`); + const headers = new Headers(); + headers.set('Content-Type', 'application/json'); + headers.set('Cache-Control', `max-age=${this._duration}`); cache.put(`/${string}`, new Response(JSON.stringify(data), { headers })); }) .catch(e => { diff --git a/src/js/kompletr.dom.js b/src/js/kompletr.dom.js index ff6bea0..e1b313b 100644 --- a/src/js/kompletr.dom.js +++ b/src/js/kompletr.dom.js @@ -29,7 +29,8 @@ export class DOM { this._body = document.getElementsByTagName('body')[0]; this._input = input instanceof HTMLInputElement ? input : document.getElementById(input); - + this._input.setAttribute('class', `${this._input.getAttribute('class')} input--search`); + this._result = build('div', [ { id: 'kpl-result' }, { class: 'form--search__result' } ]); this._input.parentElement.setAttribute('class', `${this._input.parentElement.getAttribute('class')} kompletr ${options.theme}`); diff --git a/src/js/kompletr.enums.js b/src/js/kompletr.enums.js index e02b012..f8e5c0c 100644 --- a/src/js/kompletr.enums.js +++ b/src/js/kompletr.enums.js @@ -3,7 +3,7 @@ */ const animation = Object.freeze({ fadeIn: 'fadeIn', - slideUp: 'slideUp', + slideDown: 'slideDown', }); /** diff --git a/src/js/kompletr.js b/src/js/kompletr.js index cedbb3b..771a0fd 100644 --- a/src/js/kompletr.js +++ b/src/js/kompletr.js @@ -5,9 +5,9 @@ import { Properties } from './kompletr.properties.js'; import { DOM } from './kompletr.dom.js'; import { ViewEngine } from './kompletr.view-engine.js'; import { EventManager } from './kompletr.events.js'; +import { Animation } from './kompletr.animations.js'; -import { animation, origin } from './kompletr.enums.js'; -import { fadeIn, fadeOut } from './kompletr.animations.js'; +import { origin } from './kompletr.enums.js'; ((window) => { if (window.kompletr) { @@ -18,6 +18,7 @@ import { fadeIn, fadeOut } from './kompletr.animations.js'; * @summary Kømpletr.js is a library providing features dedicated to autocomplete fields. * * @author Steve Lebleu + * * @see https://github.com/steve-lebleu/kompletr */ const kompletr = { @@ -86,10 +87,11 @@ import { fadeIn, fadeOut } from './kompletr.animations.js'; * * @returns {Void} * - * @todo opotions.data should returns Promise, and same for the onKeyup callback + * @todo opotions.data could returns Promise, and same for the onKeyup callback */ hydrate: async function(value) { try { + // FIXME: We pass here after the first if (kompletr.cache.isActive() && await kompletr.cache.isValid(value)) { kompletr.cache.get(value, (data) => { EventManager.trigger(EventManager.event.dataDone, { from: origin.cache, data }); @@ -163,15 +165,20 @@ import { fadeIn, fadeOut } from './kompletr.animations.js'; */ onError: (e) => { console.error(`[kompletr] An error has occured -> ${e.detail.stack}`); - fadeIn(kompletr.dom.result); + Animation.fadeIn(kompletr.dom.result); kompletr.callbacks.onError && kompletr.callbacks.onError(e.detail); }, /** * @description 'body.click' && kompletr.select.done listeners + * + * @todo Find better name */ onSelectDone: (e) => { - fadeOut(kompletr.dom.result); + if (e.srcElement === kompletr.dom.input) { + return true; + } + Animation.animateBack(kompletr.dom.result, kompletr.options.animationType, kompletr.options.animationDuration); EventManager.trigger(EventManager.event.navigationDone); }, @@ -243,7 +250,7 @@ import { fadeIn, fadeOut } from './kompletr.animations.js'; * @description CustomEvent 'kompletr.render.done' listener */ onRenderDone: () => { - fadeIn(kompletr.dom.result); + Animation[kompletr.options.animationType](kompletr.dom.result, kompletr.options.animationDuration); if(typeof kompletr.dom.result.children !== 'undefined') { const numberOfResults = kompletr.dom.result.children.length; if(numberOfResults) { @@ -279,14 +286,15 @@ import { fadeIn, fadeOut } from './kompletr.animations.js'; * @description kompletr entry point. * * @param {String|HTMLInputElement} input HTMLInputElement + * @param {Array} data Initial data set * @param {Object} options Main options and configuration parameters - * @param {Array} dataSet Set of data to use if consummer take ownership on the data - * @param {Object} callbacks Callback functions { onKeyup, onSelect, onError } + * @param {Function} onKeyup Callback function called when the event onkeyup occurs on the input element + * @param {Function} onSelect Callback function called when a value is selected + * @param {Function} onError * * @returns {Void} */ init: function({ input, data, options, onKeyup, onSelect, onError }) { - try { // 1. Validate @@ -295,7 +303,7 @@ import { fadeIn, fadeOut } from './kompletr.animations.js'; // 2. Assign - if(data) { // TODO data should be a Promise + if(data) { kompletr.props = new Properties({ data }); } @@ -312,7 +320,6 @@ import { fadeIn, fadeOut } from './kompletr.animations.js'; // 3. Build DOM kompletr.dom = new DOM(input, options); - kompletr.viewEngine = new ViewEngine(kompletr.dom); // 4. Listeners diff --git a/src/js/kompletr.options.js b/src/js/kompletr.options.js index 9681521..0e6884c 100644 --- a/src/js/kompletr.options.js +++ b/src/js/kompletr.options.js @@ -2,7 +2,7 @@ * @description Kompletr options definition. */ export class Options { - _animationType = null + _animationType = 'fadeIn' _animationDuration = 500 @@ -26,7 +26,7 @@ export class Options { * @description Type of animation between valid types */ get animationType() { - return this._type; + return this._animationType; } set animationType(value) { @@ -34,7 +34,7 @@ export class Options { if (!valid.includes(value)) { throw new Error(`animation.type should be one of ${valid}`); } - this._type = value; + this._animationType = value; } /** @@ -149,9 +149,9 @@ export class Options { } constructor(options) { - this._theme = options?.theme; - this._animationType = options?.animationType; - this._animationDuration = options?.animationDuration; + this._theme = options?.theme || this._theme; + this._animationType = options?.animationType || this._animationType; + this._animationDuration = options?.animationDuration || this._animationDuration; this._multiple = options?.multiple; this._fieldsToDisplay = options?.fieldsToDisplay; this._maxResults = options?.maxResults; diff --git a/src/js/kompletr.properties.js b/src/js/kompletr.properties.js index 6f7fb22..a8cf5c4 100644 --- a/src/js/kompletr.properties.js +++ b/src/js/kompletr.properties.js @@ -23,6 +23,7 @@ export class Properties { } set data(value) { + console.log('prop.data', value) if (!Array.isArray(value)) { throw new Error(`data must be an array (${value.toString()} given)`); } diff --git a/src/js/kompletr.utils.js b/src/js/kompletr.utils.js index 4766df8..b037b3b 100644 --- a/src/js/kompletr.utils.js +++ b/src/js/kompletr.utils.js @@ -14,18 +14,4 @@ const build = (element, attributes = []) => { return htmlElement; }; -/** -* @description Get a simple uuid generated from given string -* -* @param {String} string The string to convert in uuid -* -* @returns {String} The generate uuid value -*/ -const uuid = (string) => { - return string.split('') - .map(v => v.charCodeAt(0)) - .reduce((a, v) => a + ((a<<7) + (a<<3)) ^ v) - .toString(16); -}; - -export { build, uuid } \ No newline at end of file +export { build } \ No newline at end of file diff --git a/test/kompletr.utils.spec.js b/test/kompletr.utils.spec.js index 7ea03c9..67a0df9 100644 --- a/test/kompletr.utils.spec.js +++ b/test/kompletr.utils.spec.js @@ -22,18 +22,4 @@ describe('Utils functions', () => { expect(element.getAttribute('class')).toBe('test-class'); }); }); - - describe('::uuid', () => { - test('should return a unique identifier for a given string', () => { - const id1 = uuid('test'); - const id2 = uuid('test'); - const id3 = uuid('different'); - - // The generated id should be the same for the same input - expect(id1).toBe(id2); - - // Different input should (in most cases) result in a different id - expect(id1).not.toBe(id3); - }); - }); }); \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js index fe0b783..dd8466d 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,5 +1,6 @@ import path from 'path'; import * as url from 'url'; +import DashboardPlugin from "webpack-dashboard/plugin/index.js"; const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); @@ -19,6 +20,9 @@ export default { }, ], }, + plugins: [ + new DashboardPlugin() + ], devServer: { client: { logging: 'log', diff --git a/webpack.config.prod.js b/webpack.config.prod.js index 207c18b..3a7ee71 100644 --- a/webpack.config.prod.js +++ b/webpack.config.prod.js @@ -1,5 +1,6 @@ import path from 'path'; import * as url from 'url'; +import DashboardPlugin from "webpack-dashboard/plugin/index.js"; const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); @@ -15,6 +16,9 @@ export default { type: "module", }, }, + plugins: [ + new DashboardPlugin() + ], devtool: "source-map", mode: "production", }; From 1853e1aaac4d4d84ad57c98a207179a04779bfb1 Mon Sep 17 00:00:00 2001 From: Steve Date: Wed, 13 Mar 2024 11:23:13 +0100 Subject: [PATCH 19/48] chore: UT part 2, tmp fix on E2E tests --- cypress.config.js => cypress.config.cjs | 0 ...jquery.kompleter.cy.js => kompleter.cy.js} | 39 +- package-lock.json | 6 +- package.json | 4 +- src/index.html | 4 +- ...tr.animations.js => kompletr.animation.js} | 1 + src/js/kompletr.enums.js | 18 +- src/js/kompletr.js | 564 +++++++++--------- src/js/kompletr.options.js | 91 ++- src/js/kompletr.properties.js | 1 - src/js/kompletr.validation.js | 2 +- test/kompletr.animation.spec.js | 52 ++ test/kompletr.cache.spec.js | 67 +++ test/kompletr.options.spec.js | 64 ++ test/kompletr.properties.spec.js | 39 ++ test/kompletr.test.js | 389 ++++++++++++ test/kompletr.utils.spec.js | 2 +- 17 files changed, 995 insertions(+), 348 deletions(-) rename cypress.config.js => cypress.config.cjs (100%) rename cypress/e2e/{jquery.kompleter.cy.js => kompleter.cy.js} (61%) rename src/js/{kompletr.animations.js => kompletr.animation.js} (99%) create mode 100644 test/kompletr.animation.spec.js create mode 100644 test/kompletr.cache.spec.js create mode 100644 test/kompletr.options.spec.js create mode 100644 test/kompletr.properties.spec.js create mode 100644 test/kompletr.test.js diff --git a/cypress.config.js b/cypress.config.cjs similarity index 100% rename from cypress.config.js rename to cypress.config.cjs diff --git a/cypress/e2e/jquery.kompleter.cy.js b/cypress/e2e/kompleter.cy.js similarity index 61% rename from cypress/e2e/jquery.kompleter.cy.js rename to cypress/e2e/kompleter.cy.js index 37fde5d..0b922a6 100644 --- a/cypress/e2e/jquery.kompleter.cy.js +++ b/cypress/e2e/kompleter.cy.js @@ -1,13 +1,5 @@ -describe("Kompleter.js", function() { - - describe("jQuery expectations", function() { - - it("should embedd jQuery", function() { - expect(Cypress.$).to.be.not.undefined; - }); - - }); +describe("Kompletr.js", function() { describe("DOM expectations", function() { @@ -19,30 +11,12 @@ describe("Kompleter.js", function() { cy.get('#auto-complete'); }); - it("required data-url attribute is present", function() { - cy.get('#auto-complete').invoke('attr', 'data-url').then(url => { - expect(url).equals('files/kompleter.json'); - }); - }); - - it("required data-filter-on attribute is present", function() { - cy.get('#auto-complete').invoke('attr', 'data-filter-on').then(filter => { - expect(filter).equals('Name'); - }); - }); - - it("required data-fields attribute is present", function() { - cy.get('#auto-complete').invoke('attr', 'data-fields').then(fields => { - expect(fields).equals('Name,CountryCode,Population'); - }); - }); - - it("should be initialized with #searcher element into DOM", function() { - expect(cy.get('#searcher')).to.not.be.undefined; + it("should be initialized with .kompletr element into DOM", function() { + expect(cy.get('.kompletr')).to.not.be.undefined; }); it("should be initialized with #result element into DOM", function() { - expect(cy.get('#result')).to.not.be.undefined; + expect(cy.get('#kpl-result')).to.not.be.undefined; }); }); @@ -65,18 +39,19 @@ describe("Kompleter.js", function() { }); }); - it ("should complete input when Enter key is pressed", function() { + xit ("should complete input when Enter key is pressed", function() { cy.get('#auto-complete') .click() .type('Te') .type('{enter}') .invoke('val') .then((value) => { + console.log('value', value) expect(value).to.equals('Teresina'); }) }); - it ("should complete input when click is done on a suggestion", function() { + xit ("should complete input when click is done on a suggestion", function() { cy.get('#auto-complete') .click() .type('Te'); diff --git a/package-lock.json b/package-lock.json index e9d9a20..169de41 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5164,9 +5164,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001579", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001579.tgz", - "integrity": "sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==", + "version": "1.0.30001597", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001597.tgz", + "integrity": "sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w==", "dev": true, "funding": [ { diff --git a/package.json b/package.json index 17632e2..0af2caa 100755 --- a/package.json +++ b/package.json @@ -53,8 +53,8 @@ "cypress:open": "cypress open", "cypress:run": "cypress run --browser chrome ./cypress", "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js ./test/**.spec.js", - "wp:build": "webpack-dashboard -- webpack --mode production --config ./webpack.config.prod.js", - "wp:dev": "webpack-dashboard -- webpack serve --hot --mode development --config ./webpack.config.js", + "dev": "webpack-dashboard -- webpack serve --hot --mode development --config ./webpack.config.js", + "prod": "webpack-dashboard -- webpack --mode production --config ./webpack.config.prod.js", "docs:dev": "vitepress dev docs", "docs:build": "vitepress build docs", "docs:preview": "vitepress preview docs" diff --git a/src/index.html b/src/index.html index 1206c20..e1cddda 100644 --- a/src/index.html +++ b/src/index.html @@ -98,7 +98,7 @@

Kømpletr

filterOn: 'prefix', // cache: 50000 }, - onKeyup: async function (value, done) { + /*onKeyup: async function (value, done) { console.log('cb.onKeyup ', value); console.log('I\'m doing scrappy stuffs with the data!'); const result = await fetch(`http://localhost:3000/api?q=${value}`, headers); @@ -106,7 +106,7 @@

Kømpletr

console.log('DATA', d) // data = ['string', 'string', 'string']; done(d); - }, + },*/ onSelect: (selected) => { console.log('cb.onSelect', selected); }, diff --git a/src/js/kompletr.animations.js b/src/js/kompletr.animation.js similarity index 99% rename from src/js/kompletr.animations.js rename to src/js/kompletr.animation.js index 7e8fced..1ca5f7a 100644 --- a/src/js/kompletr.animations.js +++ b/src/js/kompletr.animation.js @@ -93,6 +93,7 @@ export class Animation { */ static slideDown(element, duration = 500) { element.style.removeProperty('display'); + console.log(element) let display = window.getComputedStyle(element).display; if (display === 'none') display = 'block'; element.style.display = display; diff --git a/src/js/kompletr.enums.js b/src/js/kompletr.enums.js index f8e5c0c..f4f0038 100644 --- a/src/js/kompletr.enums.js +++ b/src/js/kompletr.enums.js @@ -15,4 +15,20 @@ const origin = Object.freeze({ local: 'local', }); -export { animation, origin } \ No newline at end of file +/** + * @description Search expression values + */ +const searchExpression = Object.freeze({ + prefix: 'prefix', + expression: 'expression', +}); + +/** + * @description Theme values + */ +const theme = Object.freeze({ + light: 'light', + dark: 'dark', +}); + +export { animation, origin, searchExpression, theme } \ No newline at end of file diff --git a/src/js/kompletr.js b/src/js/kompletr.js index 771a0fd..cf101e4 100644 --- a/src/js/kompletr.js +++ b/src/js/kompletr.js @@ -5,343 +5,335 @@ import { Properties } from './kompletr.properties.js'; import { DOM } from './kompletr.dom.js'; import { ViewEngine } from './kompletr.view-engine.js'; import { EventManager } from './kompletr.events.js'; -import { Animation } from './kompletr.animations.js'; +import { Animation } from './kompletr.animation.js'; import { origin } from './kompletr.enums.js'; -((window) => { - if (window.kompletr) { - throw new Error('window.kompletr already exists !'); - } +/** + * @summary Kømpletr.js is a library providing features dedicated to autocomplete fields. + * + * @author Steve Lebleu + * + * @see https://github.com/steve-lebleu/kompletr + */ +const kompletr = { /** - * @summary Kømpletr.js is a library providing features dedicated to autocomplete fields. - * - * @author Steve Lebleu - * - * @see https://github.com/steve-lebleu/kompletr + * @description Cache related functions. */ - const kompletr = { + cache: null, + + /** + * @description Client callbacks functions. + */ + callbacks: { /** - * @description Cache related functions. + * @description Callback function exposed to consummer to allow errors management. + * + * Default: null + * Signature: (error) => {} + * Trigger: error catched + * + * @param {Error} error The fired Error instance */ - cache: null, + onError: null, /** - * @description Client callbacks functions. + * @description Callback function exposed to consummer to allow dataset hydratation + * + * Default: null + * Signature: async (value, cb) => {} + * Trigger: keyup event, after input value is greater or equals than the options.startQueryingFromChar value + * + * @param {String} value Current value of the input text to use for searching + * @param {Function} cb Callback function expecting data in parameter + * + * @async + * + * @todo Manage a loader display when you need to wait after the data */ - callbacks: { - - /** - * @description Callback function exposed to consummer to allow errors management. - * - * Default: null - * Signature: (error) => {} - * Trigger: error catched - * - * @param {Error} error The fired Error instance - */ - onError: null, - - /** - * @description Callback function exposed to consummer to allow dataset hydratation - * - * Default: null - * Signature: async (value, cb) => {} - * Trigger: keyup event, after input value is greater or equals than the options.startQueryingFromChar value - * - * @param {String} value Current value of the input text to use for searching - * @param {Function} cb Callback function expecting data in parameter - * - * @async - * - * @todo Manage a loader display when you need to wait after the data - */ - onKeyup: null, - - /** - * @description Callback function exposed to consumer to allow choice management - * - * Default: null - * Signature: (selected) => {} - * Trigger: keyup + enter OR mouse click on a suggested item - * - * @param {*} selected The current selected item, as String|Object - */ - onSelect: null, - }, + onKeyup: null, /** - * @description kompletr events handlers. + * @description Callback function exposed to consumer to allow choice management + * + * Default: null + * Signature: (selected) => {} + * Trigger: keyup + enter OR mouse click on a suggested item + * + * @param {*} selected The current selected item, as String|Object */ - handlers: { - - /** - * @description Manage the data hydration according to the current setup (cache, request or local data) - * - * @param {String} value Current input value - * - * @emits CustomEvent 'kompletr.request.done' { from, data } - * @emits CustomEvent 'kompletr.error' { error } - * - * @returns {Void} - * - * @todo opotions.data could returns Promise, and same for the onKeyup callback - */ - hydrate: async function(value) { - try { - // FIXME: We pass here after the first - if (kompletr.cache.isActive() && await kompletr.cache.isValid(value)) { - kompletr.cache.get(value, (data) => { - EventManager.trigger(EventManager.event.dataDone, { from: origin.cache, data }); - }); - } else if (kompletr.callbacks.onKeyup) { - kompletr.callbacks.onKeyup(value, (data) => { - EventManager.trigger(EventManager.event.dataDone, { from: origin.callback, data }); - }); - } else { - EventManager.trigger(EventManager.event.dataDone, { from: origin.local, data: kompletr.props.data }); - } - } catch(e) { - EventManager.trigger(EventManager.event.error, e); - } - }, - - /** - * @description Apply visual navigation into the suggestions set - * - * @param {Number} keyCode The current keyCode value - * - * @returns {Void} - */ - navigate: function (keyCode) { - if (keyCode != 38 && keyCode != 40) { - return false; - } + onSelect: null, + }, - if(kompletr.props.pointer < -1 || kompletr.props.pointer > kompletr.dom.result.children.length - 1) { - return false; - } + /** + * @description kompletr events handlers. + */ + handlers: { - if (keyCode === 38 && kompletr.props.pointer >= -1) { - kompletr.props.pointer--; - } else if (keyCode === 40 && kompletr.props.pointer < kompletr.dom.result.children.length - 1) { - kompletr.props.pointer++; - } - - kompletr.viewEngine.focus(kompletr.props.pointer, 'remove'); - kompletr.viewEngine.focus(kompletr.props.pointer, 'add'); - }, - - /** - * @description Select a suggested item as user choice - * - * @param {Number} idx The index of the selected suggestion - * - * @emits CustomEvent 'kompletr.select.done' - * - * @returns {Void} - */ - select: function (idx = 0) { - kompletr.dom.input.value = typeof kompletr.props.data[idx] === 'object' ? kompletr.props.data[idx][kompletr.options.propToMapAsValue] : kompletr.props.data[idx]; - kompletr.callbacks.onSelect(kompletr.props.data[idx]); - EventManager.trigger(EventManager.event.selectDone); - }, + /** + * @description Manage the data hydration according to the current setup (cache, request or local data) + * + * @param {String} value Current input value + * + * @emits CustomEvent 'kompletr.request.done' { from, data } + * @emits CustomEvent 'kompletr.error' { error } + * + * @returns {Void} + * + * @todo opotions.data could returns Promise, and same for the onKeyup callback + */ + hydrate: async function(value) { + try { + if (kompletr.cache.isActive() && await kompletr.cache.isValid(value)) { + kompletr.cache.get(value, (data) => { + EventManager.trigger(EventManager.event.dataDone, { from: origin.cache, data }); + }); + } else if (kompletr.callbacks.onKeyup) { + kompletr.callbacks.onKeyup(value, (data) => { + EventManager.trigger(EventManager.event.dataDone, { from: origin.callback, data }); + }); + } else { + EventManager.trigger(EventManager.event.dataDone, { from: origin.local, data: kompletr.props.data }); + } + } catch(e) { + EventManager.trigger(EventManager.event.error, e); + } }, /** - * @description kompletr dom container. + * @description Apply visual navigation into the suggestions set + * + * @param {Number} keyCode The current keyCode value + * + * @returns {Void} */ - dom: null, + navigate: function (keyCode) { + if (keyCode != 38 && keyCode != 40) { + return false; + } + + if(kompletr.props.pointer < -1 || kompletr.props.pointer > kompletr.dom.result.children.length - 1) { + return false; + } + + if (keyCode === 38 && kompletr.props.pointer >= -1) { + kompletr.props.pointer--; + } else if (keyCode === 40 && kompletr.props.pointer < kompletr.dom.result.children.length - 1) { + kompletr.props.pointer++; + } + + kompletr.viewEngine.focus(kompletr.props.pointer, 'remove'); + kompletr.viewEngine.focus(kompletr.props.pointer, 'add'); + }, /** - * @description kompletr events listeners of all religions. + * @description Select a suggested item as user choice + * + * @param {Number} idx The index of the selected suggestion + * + * @emits CustomEvent 'kompletr.select.done' + * + * @returns {Void} */ - listeners: { - - /** - * @description CustomEvent 'kompletr.error' listener - */ - onError: (e) => { - console.error(`[kompletr] An error has occured -> ${e.detail.stack}`); - Animation.fadeIn(kompletr.dom.result); - kompletr.callbacks.onError && kompletr.callbacks.onError(e.detail); - }, - - /** - * @description 'body.click' && kompletr.select.done listeners - * - * @todo Find better name - */ - onSelectDone: (e) => { - if (e.srcElement === kompletr.dom.input) { - return true; - } - Animation.animateBack(kompletr.dom.result, kompletr.options.animationType, kompletr.options.animationDuration); - EventManager.trigger(EventManager.event.navigationDone); - }, - - /** - * @description CustomEvent 'kompletr.navigation.done' listener - */ - onNavigationDone: (e) => { - kompletr.props.pointer = -1; - }, - - /** - * @description CustomEvent 'kompletr.request.done' listener - * - * @todo Check something else to determine if we filter or not -> currently just the presence of onKeyup callback - */ - onDataDone: async (e) => { - kompletr.props.data = e.detail.data; - - let data = kompletr.props.data.map((record, idx) => ({ idx, data: record }) ); - - if (!kompletr.callbacks.onKeyup) { - data = data.filter((record) => { - const value = typeof record.data === 'string' ? record.data : record.data[kompletr.options.propToMapAsValue]; - if (kompletr.options.filterOn === 'prefix') { - return value.toLowerCase().lastIndexOf(kompletr.dom.input.value.toLowerCase(), 0) === 0; - } - return value.toLowerCase().lastIndexOf(kompletr.dom.input.value.toLowerCase()) !== -1; - }); - } + select: function (idx = 0) { + kompletr.dom.input.value = typeof kompletr.props.data[idx] === 'object' ? kompletr.props.data[idx][kompletr.options.propToMapAsValue] : kompletr.props.data[idx]; + kompletr.callbacks.onSelect(kompletr.props.data[idx]); + EventManager.trigger(EventManager.event.selectDone); + }, + }, - const cacheIsActiveAndNotValid = kompletr.cache.isActive() && await kompletr.cache.isValid(kompletr.dom.input.value) === false; - if (cacheIsActiveAndNotValid) { - kompletr.cache.set({ string: kompletr.dom.input.value, data: e.detail.data }); - } + /** + * @description kompletr dom container. + */ + dom: null, - kompletr.viewEngine.showResults(data.slice(0, kompletr.options.maxResults), kompletr.options, function() { - EventManager.trigger(EventManager.event.renderDone); - }); - }, - - /** - * @description 'input.keyup' listener - */ - onKeyup: async (e) => { - if (kompletr.dom.input.value.length < kompletr.options.startQueriyngFromChar) { - return; - } - - const keyCode = e.keyCode; - - switch (keyCode) { - case 13: // Enter - kompletr.handlers.select(kompletr.dom.focused.id); - break; - case 38: // Up - case 40: // Down - kompletr.handlers.navigate(keyCode); - break; - default: - if (kompletr.dom.input.value !== kompletr.props.previousValue) { - kompletr.handlers.hydrate(kompletr.dom.input.value); - } - EventManager.trigger(EventManager.event.navigationDone); - break - } - }, - - /** - * @description CustomEvent 'kompletr.render.done' listener - */ - onRenderDone: () => { - Animation[kompletr.options.animationType](kompletr.dom.result, kompletr.options.animationDuration); - if(typeof kompletr.dom.result.children !== 'undefined') { - const numberOfResults = kompletr.dom.result.children.length; - if(numberOfResults) { - for(let i = 0; i < numberOfResults; i++) { - ((i) => { - return kompletr.dom.result.children[i].addEventListener('click', (e) => { - kompletr.dom.focused = kompletr.dom.result.children[i]; - kompletr.handlers.select(kompletr.dom.focused.id); - }); - })(i) - } - } - } - }, - }, + /** + * @description kompletr events listeners of all religions. + */ + listeners: { /** - * @description kompletr public options. + * @description CustomEvent 'kompletr.error' listener */ - options: null, + onError: (e) => { + console.error(`[kompletr] An error has occured -> ${e.detail.stack}`); + Animation.fadeIn(kompletr.dom.result); + kompletr.callbacks.onError && kompletr.callbacks.onError(e.detail); + }, /** - * @description kompletr internal properties. + * @description 'body.click' && kompletr.select.done listeners + * + * @todo Find better name */ - props: null, + onSelectDone: (e) => { + if (e.srcElement === kompletr.dom.input) { + return true; + } + Animation.animateBack(kompletr.dom.result, kompletr.options.animationType, kompletr.options.animationDuration); + EventManager.trigger(EventManager.event.navigationDone); + }, /** - * @description kompletr rendering functions. + * @description CustomEvent 'kompletr.navigation.done' listener */ - viewEngine: null, + onNavigationDone: (e) => { + kompletr.props.pointer = -1; + }, /** - * @description kompletr entry point. - * - * @param {String|HTMLInputElement} input HTMLInputElement - * @param {Array} data Initial data set - * @param {Object} options Main options and configuration parameters - * @param {Function} onKeyup Callback function called when the event onkeyup occurs on the input element - * @param {Function} onSelect Callback function called when a value is selected - * @param {Function} onError + * @description CustomEvent 'kompletr.request.done' listener * - * @returns {Void} + * @todo Check something else to determine if we filter or not -> currently just the presence of onKeyup callback */ - init: function({ input, data, options, onKeyup, onSelect, onError }) { - try { + onDataDone: async (e) => { + kompletr.props.data = e.detail.data; + + let data = kompletr.props.data.map((record, idx) => ({ idx, data: record }) ); - // 1. Validate + if (!kompletr.callbacks.onKeyup) { + data = data.filter((record) => { + const value = typeof record.data === 'string' ? record.data : record.data[kompletr.options.propToMapAsValue]; + if (kompletr.options.filterOn === 'prefix') { + return value.toLowerCase().lastIndexOf(kompletr.dom.input.value.toLowerCase(), 0) === 0; + } + return value.toLowerCase().lastIndexOf(kompletr.dom.input.value.toLowerCase()) !== -1; + }); + } - Validation.validate(input, data, { onKeyup, onSelect, onError }); + const cacheIsActiveAndNotValid = kompletr.cache.isActive() && await kompletr.cache.isValid(kompletr.dom.input.value) === false; + if (cacheIsActiveAndNotValid) { + kompletr.cache.set({ string: kompletr.dom.input.value, data: e.detail.data }); + } - // 2. Assign + kompletr.viewEngine.showResults(data.slice(0, kompletr.options.maxResults), kompletr.options, function() { + EventManager.trigger(EventManager.event.renderDone); + }); + }, - if(data) { - kompletr.props = new Properties({ data }); - } + /** + * @description 'input.keyup' listener + */ + onKeyup: async (e) => { + if (kompletr.dom.input.value.length < kompletr.options.startQueriyngFromChar) { + return; + } + + const keyCode = e.keyCode; + + switch (keyCode) { + case 13: // Enter + kompletr.handlers.select(kompletr.dom.focused.id); + break; + case 38: // Up + case 40: // Down + kompletr.handlers.navigate(keyCode); + break; + default: + if (kompletr.dom.input.value !== kompletr.props.previousValue) { + kompletr.handlers.hydrate(kompletr.dom.input.value); + } + EventManager.trigger(EventManager.event.navigationDone); + break + } + }, - if(options) { - kompletr.options = new Options(options); - } - - if(onKeyup || onSelect || onError) { - kompletr.callbacks = Object.assign(kompletr.callbacks, { onKeyup, onSelect, onError }); + /** + * @description CustomEvent 'kompletr.render.done' listener + */ + onRenderDone: () => { + Animation[kompletr.options.animationType](kompletr.dom.result, kompletr.options.animationDuration); + if(typeof kompletr.dom.result.children !== 'undefined') { + const numberOfResults = kompletr.dom.result.children.length; + if(numberOfResults) { + for(let i = 0; i < numberOfResults; i++) { + ((i) => { + return kompletr.dom.result.children[i].addEventListener('click', (e) => { + kompletr.dom.focused = kompletr.dom.result.children[i]; + kompletr.handlers.select(kompletr.dom.focused.id); + }); + })(i) + } } + } + }, + }, - kompletr.cache = new Cache(options.cache); + /** + * @description kompletr public options. + */ + options: null, - // 3. Build DOM + /** + * @description kompletr internal properties. + */ + props: null, - kompletr.dom = new DOM(input, options); - kompletr.viewEngine = new ViewEngine(kompletr.dom); + /** + * @description kompletr rendering functions. + */ + viewEngine: null, - // 4. Listeners + /** + * @description kompletr entry point. + * + * @param {String|HTMLInputElement} input HTMLInputElement + * @param {Array} data Initial data set + * @param {Object} options Main options and configuration parameters + * @param {Function} onKeyup Callback function called when the event onkeyup occurs on the input element + * @param {Function} onSelect Callback function called when a value is selected + * @param {Function} onError + * + * @returns {Void} + */ + init: function({ input, data, options, onKeyup, onSelect, onError }) { + try { - kompletr.dom.body.addEventListener('click', kompletr.listeners.onSelectDone); - kompletr.dom.input.addEventListener('keyup', kompletr.listeners.onKeyup); + // 1. Validate - document.addEventListener('kompletr.select.done', kompletr.listeners.onSelectDone); - document.addEventListener('kompletr.navigation.done', kompletr.listeners.onNavigationDone); - document.addEventListener('kompletr.data.done', kompletr.listeners.onDataDone); - document.addEventListener('kompletr.render.done', kompletr.listeners.onRenderDone); - document.addEventListener('kompletr.error', kompletr.listeners.onError); - } catch(e) { - console.error(e); + Validation.validate(input, data, { onKeyup, onSelect, onError }); + + // 2. Assign + + if(data) { + kompletr.props = new Properties({ data }); } - }, - }; - window.kompletr = kompletr.init; - - window.HTMLInputElement.prototype.kompletr = function({ data, options, onKeyup, onSelect, onError }) { - window.kompletr({ input: this, data, options, onKeyup, onSelect, onError }); - }; + if(options) { + kompletr.options = new Options(options); + } + + if(onKeyup || onSelect || onError) { + kompletr.callbacks = Object.assign(kompletr.callbacks, { onKeyup, onSelect, onError }); + } + + kompletr.cache = new Cache(options?.cache); + + // 3. Build DOM + + kompletr.dom = new DOM(input, options); + kompletr.viewEngine = new ViewEngine(kompletr.dom); + + // 4. Listeners + + kompletr.dom.body.addEventListener('click', kompletr.listeners.onSelectDone); + kompletr.dom.input.addEventListener('keyup', kompletr.listeners.onKeyup); + + document.addEventListener('kompletr.select.done', kompletr.listeners.onSelectDone); + document.addEventListener('kompletr.navigation.done', kompletr.listeners.onNavigationDone); + document.addEventListener('kompletr.data.done', kompletr.listeners.onDataDone); + document.addEventListener('kompletr.render.done', kompletr.listeners.onRenderDone); + document.addEventListener('kompletr.error', kompletr.listeners.onError); + } catch(e) { + console.error(e); + } + }, +}; + +window.HTMLInputElement.prototype.kompletr = function({ data, options, onKeyup, onSelect, onError }) { + kompletr.init({ input: this, data, options, onKeyup, onSelect, onError }); +}; -})(window); \ No newline at end of file +export default kompletr; \ No newline at end of file diff --git a/src/js/kompletr.options.js b/src/js/kompletr.options.js index 0e6884c..1698bc5 100644 --- a/src/js/kompletr.options.js +++ b/src/js/kompletr.options.js @@ -1,25 +1,72 @@ +import { animation, searchExpression, theme } from './kompletr.enums.js'; + /** - * @description Kompletr options definition. + * @description Represents the options for the Kompleter library. */ export class Options { - _animationType = 'fadeIn' + /** + * The type of animation for the element. + * @type {string} + */ + _animationType = animation.fadeIn + /** + * The duration of the animation in milliseconds. + * @type {number} + */ _animationDuration = 500 + /** + * Indicates whether multiple selections are allowed. + * @type {boolean} + * @private + */ _multiple = false - _theme = 'light' + /** + * The theme for the kompletr options. + * @type {string} + */ + _theme = theme.light + /** + * Array containing the fields to be displayed. + * @type {Array} + * @private + */ _fieldsToDisplay = [] + /** + * The maximum number of results to display. + * @type {number} + */ _maxResults = 10 + /** + * The character index from which querying should start. + * @type {number} + */ _startQueriyngFromChar = 2 + /** + * Represents the value of a property to be mapped. + * @type {string} + * @private + */ _propToMapAsValue = '' - _filterOn = 'prefix' + /** + * The filter option used for filtering data. + * Possible values are 'prefix', 'expression'. + * @type {string} + */ + _filterOn = searchExpression.prefix + /** + * Represents the cache value. + * @type {number} + * @private + */ _cache = 0 /** @@ -30,9 +77,9 @@ export class Options { } set animationType(value) { - const valid = Object.keys(kompletr.enums.animation); + const valid = Object.keys(animation); if (!valid.includes(value)) { - throw new Error(`animation.type should be one of ${valid}`); + throw new Error(`animation.type should be one of ${valid.toString()}`); } this._animationType = value; } @@ -41,14 +88,14 @@ export class Options { * @description Duration of some animation in ms. Default 500 */ get animationDuration() { - return this._duration; + return this._animationDuration; } set animationDuration(value) { if (isNaN(parseInt(value, 10))) { throw new Error(`animation.duration should be an integer`); } - this._duration = value; + this._animationDuration = value; } /** @@ -70,8 +117,9 @@ export class Options { } set theme(value) { - if (!['light', 'dark'].includes(value)) { - throw new Error(`theme should be one of ['light', 'dark'], ${value} given`); + const valid = Object.keys(theme); + if (!valid.includes(value)) { + throw new Error(`theme should be one of ${valid.toString()}, ${value} given`); } this._theme = value; } @@ -128,8 +176,9 @@ export class Options { } set filterOn(value) { - if (!['prefix', 'expression'].includes(value)) { - throw new Error(`filterOn should be one of ['prefix', 'expression'], ${value} given`); + const valid = Object.keys(searchExpression); + if (!valid.includes(value)) { + throw new Error(`filterOn should be one of ${valid.toString()}, ${value} given`); } this._filterOn = value; } @@ -149,15 +198,19 @@ export class Options { } constructor(options) { + if (options === undefined) return; + if (typeof options !== 'object') { + throw new Error('options should be an object'); + }; this._theme = options?.theme || this._theme; this._animationType = options?.animationType || this._animationType; this._animationDuration = options?.animationDuration || this._animationDuration; - this._multiple = options?.multiple; - this._fieldsToDisplay = options?.fieldsToDisplay; - this._maxResults = options?.maxResults; - this._startQueriyngFromChar = options?.startQueriyngFromChar; - this._propToMapAsValue = options?.propToMapAsValue; - this._filterOn = options?.filterOn; - this._cache = options?.cache; + this._multiple = options?.multiple || this._multiple; + this._fieldsToDisplay = options?.fieldsToDisplay || this._fieldsToDisplay; + this._maxResults = options?.maxResults || this._maxResults; + this._startQueriyngFromChar = options?.startQueriyngFromChar || this._startQueriyngFromChar; + this._propToMapAsValue = options?.propToMapAsValue || this._propToMapAsValue; + this._filterOn = options?.filterOn || this._filterOn; + this._cache = options?.cache || this._cache; } } \ No newline at end of file diff --git a/src/js/kompletr.properties.js b/src/js/kompletr.properties.js index a8cf5c4..6f7fb22 100644 --- a/src/js/kompletr.properties.js +++ b/src/js/kompletr.properties.js @@ -23,7 +23,6 @@ export class Properties { } set data(value) { - console.log('prop.data', value) if (!Array.isArray(value)) { throw new Error(`data must be an array (${value.toString()} given)`); } diff --git a/src/js/kompletr.validation.js b/src/js/kompletr.validation.js index 67e8d00..0725a4b 100644 --- a/src/js/kompletr.validation.js +++ b/src/js/kompletr.validation.js @@ -15,7 +15,7 @@ export class Validation { * @returns {Boolean} */ static input(input) { - if (input && input instanceof HTMLInputElement === false && !document.getElementById(input)) { + if (input instanceof HTMLInputElement === false && !document.getElementById(input)) { throw new Error(`input should be an HTMLInputElement instance or a valid id identifier. None of boths given, ${input} received.`); } return true; diff --git a/test/kompletr.animation.spec.js b/test/kompletr.animation.spec.js new file mode 100644 index 0000000..491536c --- /dev/null +++ b/test/kompletr.animation.spec.js @@ -0,0 +1,52 @@ +import { JSDOM } from 'jsdom'; +import { Animation } from '../src/js/kompletr.animation.js'; + +describe('Animation', () => { + let dom; + let element; + + beforeEach(() => { + dom = new JSDOM(`

Hello world

`); + element = dom.window.document.querySelector('p'); + }); + + it('fadeIn changes the style of the element', () => { + Animation.fadeIn(element); + setTimeout(() => { + expect(element.style.opacity).toBe('1'); + expect(element.style.display).toBe('block'); + }, 500); + }); + + it('fadeOut changes the style of the element', () => { + Animation.fadeOut(element); + setTimeout(() => { + expect(element.style.opacity).toBe('0'); + expect(element.style.display).toBe('none'); + }, 500); + }); + + it('slideUp changes the style of the element', () => { + Animation.slideUp(element); + setTimeout(() => { + expect(element.style.height).toBe('0px'); + expect(element.style.display).toBe('none'); + }, 500); + }); + + it.skip('slideDown changes the style of the element', () => { + Animation.slideDown(element); + setTimeout(() => { + expect(element.style.height).not.toBe('0px'); + expect(element.style.display).toBe('block'); + }, 500); + }); + + it('animateBack applies the opposite animation', () => { + Animation.animateBack(element, 'fadeIn'); + setTimeout(() => { + expect(element.style.opacity).toBe('0'); + expect(element.style.display).toBe('none'); + }, 500); + }); +}); \ No newline at end of file diff --git a/test/kompletr.cache.spec.js b/test/kompletr.cache.spec.js new file mode 100644 index 0000000..c04dd8c --- /dev/null +++ b/test/kompletr.cache.spec.js @@ -0,0 +1,67 @@ +import { describe, jest } from '@jest/globals'; +import { Cache } from '../src/js/kompletr.cache.js'; + +describe('Cache', () => { + let cache; + + beforeEach(() => { + cache = new Cache(1000, 'test.cache'); + window = Object.create(window); + window.caches = {}; + window.caches.open = jest.fn().mockResolvedValue({ + match: jest.fn().mockResolvedValue({ + json: jest.fn().mockResolvedValue('test data'), + text: jest.fn().mockResolvedValue(Date.now().toString()) + }), + put: jest.fn().mockResolvedValue(undefined) + }); + }); + + it('should defines get method', () => { + expect(cache.get).toBeDefined(); + expect(typeof cache.get).toBe('function'); + }); + + it('should defines isActive method', () => { + expect(cache.isActive).toBeDefined(); + expect(typeof cache.isActive).toBe('function'); + }); + + it('should defines isValid method', () => { + expect(cache.isValid).toBeDefined(); + expect(typeof cache.isValid).toBe('function'); + }); + + it('should defines set method', () => { + expect(cache.set).toBeDefined(); + expect(typeof cache.set).toBe('function'); + }); + + describe('::get', () => { + it('should retrieves data from the cache', done => { + cache.get('test', data => { + expect(data).toBe('test data'); + done(); + }); + }); + }); + + describe('::set', () => { + it('should puts data into the cache', () => { + cache.set({ string: 'test', data: 'test data' }); + expect(window.caches.open).toHaveBeenCalled(); + }); + }); + + describe('::isActive', () => { + it('should returns true if duration is not 0', () => { + expect(cache.isActive()).toBe(true); + }); + }); + + describe('::isValid', () => { + it('should returns true if cache entry is within its lifetime', async () => { + expect(await cache.isValid('test')).toBe(true); + }); + }); +}); \ No newline at end of file diff --git a/test/kompletr.options.spec.js b/test/kompletr.options.spec.js new file mode 100644 index 0000000..6b9a213 --- /dev/null +++ b/test/kompletr.options.spec.js @@ -0,0 +1,64 @@ +import { Options } from '../src/js/kompletr.options.js'; + +describe('Options', () => { + let options; + + beforeEach(() => { + + options = new Options({ + theme: 'light', + animationType: 'fadeIn', + animationDuration: 500, + multiple: false, + fieldsToDisplay: ['field1', 'field2'], + maxResults: 10, + startQueriyngFromChar: 2, + propToMapAsValue: 'value', + filterOn: 'prefix', + cache: 0, + }); + }); + + it('defines getters and setters for all properties', () => { + expect(options.theme).toBeDefined(); + expect(options.animationType).toBeDefined(); + expect(options.animationDuration).toBeDefined(); + expect(options.multiple).toBeDefined(); + expect(options.fieldsToDisplay).toBeDefined(); + expect(options.maxResults).toBeDefined(); + expect(options.startQueriyngFromChar).toBeDefined(); + expect(options.propToMapAsValue).toBeDefined(); + expect(options.filterOn).toBeDefined(); + expect(options.cache).toBeDefined(); + }); + + it('throws error when setting invalid animationType', () => { + expect(() => { + options.animationType = 'invalid'; + }).toThrowError(new Error('animation.type should be one of fadeIn,slideDown')); + }); + + it('throws error when setting non-integer animationDuration', () => { + expect(() => { + options.animationDuration = 'not a number'; + }).toThrowError(new Error('animation.duration should be an integer')); + }); + + it('throws error when setting invalid theme', () => { + expect(() => { + options.theme = 'invalid'; + }).toThrowError(new Error('theme should be one of light,dark, invalid given')); + }); + + it('throws error when setting invalid filterOn', () => { + expect(() => { + options.filterOn = 'invalid'; + }).toThrowError(new Error('filterOn should be one of prefix,expression, invalid given')); + }); + + it('throws error when setting non-integer cache', () => { + expect(() => { + options.cache = 'not a number'; + }).toThrowError(new Error('cache should be an integer')); + }); +}); diff --git a/test/kompletr.properties.spec.js b/test/kompletr.properties.spec.js new file mode 100644 index 0000000..10a0d8e --- /dev/null +++ b/test/kompletr.properties.spec.js @@ -0,0 +1,39 @@ +import { Properties } from '../src/js/kompletr.properties.js'; + +describe('Properties', () => { + let properties; + + beforeEach(() => { + properties = new Properties({ data: ['test1', 'test2', 'test3'] }); + }); + + it('should defines data getter and setter', () => { + expect(properties.data).toBeDefined(); + properties.data = ['test4', 'test5']; + expect(properties.data).toEqual(['test4', 'test5']); + }); + + it('should throws error when setting data with non-array value', () => { + expect(() => { + properties.data = 'not an array'; + }).toThrowError(new Error('data must be an array (not an array given)')); + }); + + it('should defines pointer getter and setter', () => { + expect(properties.pointer).toBeDefined(); + properties.pointer = 1; + expect(properties.pointer).toBe(1); + }); + + it('should throws error when setting pointer with non-integer value', () => { + expect(() => { + properties.pointer = 'not an integer'; + }).toThrowError(new Error('pointer must be an integer (not an integer given)')); + }); + + it('should defines previousValue getter and setter', () => { + expect(properties.previousValue).toBeDefined(); + properties.previousValue = 'test value'; + expect(properties.previousValue).toBe('test value'); + }); +}); diff --git a/test/kompletr.test.js b/test/kompletr.test.js new file mode 100644 index 0000000..53caa60 --- /dev/null +++ b/test/kompletr.test.js @@ -0,0 +1,389 @@ +import { jest } from '@jest/globals'; +import { JSDOM } from 'jsdom'; + +import kompletr from '../src/js/kompletr.js'; + +describe.only('kompletr', () => { + let inputElement, parentElement; + + beforeEach(() => { + const dom = new JSDOM(); + global.document = dom.window.document; + parentElement = document.createElement('div'); + inputElement = document.createElement('input'); + parentElement.appendChild(inputElement); + document.body.appendChild(parentElement); + }); + + afterEach(() => { + document.body.innerHTML = ''; + }); + + describe.only('::init', () => { + it.only('should initialize kompletr with provided input, data, options, onKeyup, onSelect, and onError', () => { + const data = ['apple', 'banana', 'cherry']; + const options = { startQueriyngFromChar: 3 }; + const onKeyup = jest.fn(); + const onSelect = jest.fn(); + const onError = jest.fn(); + + kompletr.init({ input: inputElement, data, options, onKeyup, onSelect, onError }); + + expect(kompletr.dom.input).toBe(inputElement); + expect(kompletr.props.data).toBe(data); + + expect(kompletr.options).toBe(options); // Mocking the options object + + expect(kompletr.callbacks.onKeyup).toBe(onKeyup); + expect(kompletr.callbacks.onSelect).toBe(onSelect); + expect(kompletr.callbacks.onError).toBe(onError); + }); + + it('should throw an error if input is not provided', () => { + expect(() => { + kompletr.init({ data: ['apple', 'banana'] }); + }).toThrow('Input element is required'); + }); + }); + + describe.skip('::handlers', () => { + beforeEach(() => { + kompletr.dom = { + input: inputElement, + result: document.createElement('div'), + focused: null + }; + kompletr.props = { + data: ['apple', 'banana', 'cherry'], + pointer: -1, + previousValue: '' + }; + kompletr.options = { + startQueriyngFromChar: 3, + maxResults: 5, + propToMapAsValue: 'name', + filterOn: 'prefix' + }; + kompletr.callbacks = { + onKeyup: jest.fn(), + onSelect: jest.fn() + }; + }); + + describe('::hydrate', () => { + it('should call cache.get if cache is active and valid', async () => { + kompletr.cache = { + isActive: jest.fn().mockReturnValue(true), + isValid: jest.fn().mockResolvedValue(true), + get: jest.fn() + }; + + await kompletr.handlers.hydrate('app'); + + expect(kompletr.cache.isActive).toHaveBeenCalled(); + expect(kompletr.cache.isValid).toHaveBeenCalledWith('app'); + expect(kompletr.cache.get).toHaveBeenCalled(); + }); + + it('should call callbacks.onKeyup if it is defined', async () => { + kompletr.callbacks.onKeyup = jest.fn(); + + await kompletr.handlers.hydrate('app'); + + expect(kompletr.callbacks.onKeyup).toHaveBeenCalledWith('app', expect.any(Function)); + }); + + it('should trigger EventManager.event.dataDone if neither cache nor callbacks.onKeyup are defined', async () => { + const triggerMock = jest.spyOn(EventManager, 'trigger'); + + await kompletr.handlers.hydrate('app'); + + expect(triggerMock).toHaveBeenCalledWith(EventManager.event.dataDone, { from: 'local', data: kompletr.props.data }); + }); + + it('should trigger EventManager.event.error if an error occurs', async () => { + const triggerMock = jest.spyOn(EventManager, 'trigger'); + const error = new Error('Something went wrong'); + + kompletr.cache = { + isActive: jest.fn().mockReturnValue(true), + isValid: jest.fn().mockRejectedValue(error) + }; + + await kompletr.handlers.hydrate('app'); + + expect(triggerMock).toHaveBeenCalledWith(EventManager.event.error, error); + }); + }); + + describe('::navigate', () => { + it('should not change pointer if keyCode is not 38 (Up) or 40 (Down)', () => { + kompletr.props.pointer = 0; + + kompletr.handlers.navigate(37); // Left + + expect(kompletr.props.pointer).toBe(0); + }); + + it('should not change pointer if it is out of range', () => { + kompletr.props.pointer = -2; + + kompletr.handlers.navigate(38); // Up + + expect(kompletr.props.pointer).toBe(-2); + + kompletr.props.pointer = 3; + + kompletr.handlers.navigate(40); // Down + + expect(kompletr.props.pointer).toBe(3); + }); + + it('should decrease pointer by 1 if keyCode is 38 (Up)', () => { + kompletr.props.pointer = 2; + + kompletr.handlers.navigate(38); // Up + + expect(kompletr.props.pointer).toBe(1); + }); + + it('should increase pointer by 1 if keyCode is 40 (Down)', () => { + kompletr.props.pointer = 1; + + kompletr.handlers.navigate(40); // Down + + expect(kompletr.props.pointer).toBe(2); + }); + + it('should call kompletr.viewEngine.focus with "remove" and "add"', () => { + kompletr.props.pointer = 1; + kompletr.viewEngine = { + focus: jest.fn() + }; + + kompletr.handlers.navigate(38); // Up + + expect(kompletr.viewEngine.focus).toHaveBeenCalledWith(1, 'remove'); + expect(kompletr.viewEngine.focus).toHaveBeenCalledWith(1, 'add'); + }); + }); + + describe('::select', () => { + it('should set input value to selected item and call callbacks.onSelect', () => { + kompletr.dom.input.value = ''; + kompletr.callbacks.onSelect = jest.fn(); + + kompletr.handlers.select(1); + + expect(kompletr.dom.input.value).toBe('banana'); + expect(kompletr.callbacks.onSelect).toHaveBeenCalledWith('banana'); + }); + + it('should trigger EventManager.event.selectDone', () => { + const triggerMock = jest.spyOn(EventManager, 'trigger'); + + kompletr.handlers.select(1); + + expect(triggerMock).toHaveBeenCalledWith(EventManager.event.selectDone); + }); + }); + }); + + describe.skip('::listeners', () => { + beforeEach(() => { + kompletr.dom = { + input: inputElement, + result: document.createElement('div'), + focused: null + }; + kompletr.props = { + pointer: -1 + }; + kompletr.options = { + animationType: 'fadeIn', + animationDuration: 500 + }; + kompletr.callbacks = { + onSelect: jest.fn() + }; + }); + + describe('::onError', () => { + it('should log the error and call callbacks.onError', () => { + const consoleErrorMock = jest.spyOn(console, 'error'); + const error = new Error('Something went wrong'); + + kompletr.callbacks.onError = jest.fn(); + + kompletr.listeners.onError({ detail: error }); + + expect(consoleErrorMock).toHaveBeenCalledWith('[kompletr] An error has occured -> Something went wrong'); + expect(kompletr.callbacks.onError).toHaveBeenCalledWith(error); + }); + }); + + describe('::onSelectDone', () => { + it('should return early if the event target is the input element', () => { + const animateBackMock = jest.spyOn(Animation, 'animateBack'); + const triggerMock = jest.spyOn(EventManager, 'trigger'); + + const event = { srcElement: inputElement }; + + kompletr.listeners.onSelectDone(event); + + expect(animateBackMock).not.toHaveBeenCalled(); + expect(triggerMock).not.toHaveBeenCalled(); + }); + + it('should call Animation.animateBack and trigger EventManager.event.navigationDone', () => { + const animateBackMock = jest.spyOn(Animation, 'animateBack'); + const triggerMock = jest.spyOn(EventManager, 'trigger'); + + const event = { srcElement: document.createElement('div') }; + + kompletr.listeners.onSelectDone(event); + + expect(animateBackMock).toHaveBeenCalledWith(kompletr.dom.result, kompletr.options.animationType, kompletr.options.animationDuration); + expect(triggerMock).toHaveBeenCalledWith(EventManager.event.navigationDone); + }); + }); + + describe('::onNavigationDone', () => { + it('should reset pointer to -1', () => { + kompletr.props.pointer = 2; + + kompletr.listeners.onNavigationDone(); + + expect(kompletr.props.pointer).toBe(-1); + }); + }); + + describe('::onDataDone', () => { + it('should set kompletr.props.data and trigger EventManager.event.renderDone', () => { + const triggerMock = jest.spyOn(EventManager, 'trigger'); + + const data = ['apple', 'banana', 'cherry']; + + kompletr.listeners.onDataDone({ detail: { data } }); + + expect(kompletr.props.data).toBe(data); + expect(triggerMock).toHaveBeenCalledWith(EventManager.event.renderDone); + }); + + it('should filter data based on kompletr.options.filterOn if callbacks.onKeyup is not defined', () => { + const triggerMock = jest.spyOn(EventManager, 'trigger'); + + kompletr.options.filterOn = 'prefix'; + kompletr.dom.input.value = 'b'; + kompletr.props.data = [ + { name: 'apple' }, + { name: 'banana' }, + { name: 'cherry' } + ]; + + kompletr.listeners.onDataDone({ detail: { data: kompletr.props.data } }); + + expect(kompletr.props.data).toEqual([{ idx: 1, data: { name: 'banana' } }]); + expect(triggerMock).toHaveBeenCalledWith(EventManager.event.renderDone); + }); + + it('should set cache if cache is active and not valid', async () => { + const triggerMock = jest.spyOn(EventManager, 'trigger'); + + kompletr.cache = { + isActive: jest.fn().mockReturnValue(true), + isValid: jest.fn().mockResolvedValue(false), + set: jest.fn() + }; + + kompletr.dom.input.value = 'apple'; + kompletr.props.data = ['apple', 'banana', 'cherry']; + + await kompletr.listeners.onDataDone({ detail: { data: kompletr.props.data } }); + + expect(kompletr.cache.set).toHaveBeenCalledWith({ string: 'apple', data: kompletr.props.data }); + expect(triggerMock).toHaveBeenCalledWith(EventManager.event.renderDone); + }); + }); + + describe('::onKeyup', () => { + it('should return early if input value length is less than kompletr.options.startQueriyngFromChar', () => { + const hydrateMock = jest.spyOn(kompletr.handlers, 'hydrate'); + const triggerMock = jest.spyOn(EventManager, 'trigger'); + + kompletr.dom.input.value = 'ap'; + kompletr.options.startQueriyngFromChar = 3; + + const event = { keyCode: 65 }; // 'A' + + kompletr.listeners.onKeyup(event); + + expect(hydrateMock).not.toHaveBeenCalled(); + expect(triggerMock).not.toHaveBeenCalled(); + }); + + it('should call kompletr.handlers.select if keyCode is 13 (Enter)', () => { + const selectMock = jest.spyOn(kompletr.handlers, 'select'); + + const event = { keyCode: 13 }; // Enter + + kompletr.listeners.onKeyup(event); + + expect(selectMock).toHaveBeenCalledWith(kompletr.dom.focused.id); + }); + + it('should call kompletr.handlers.navigate if keyCode is 38 (Up) or 40 (Down)', () => { + const navigateMock = jest.spyOn(kompletr.handlers, 'navigate'); + + const event1 = { keyCode: 38 }; // Up + const event2 = { keyCode: 40 }; // Down + + kompletr.listeners.onKeyup(event1); + kompletr.listeners.onKeyup(event2); + + expect(navigateMock).toHaveBeenCalledTimes(2); + expect(navigateMock).toHaveBeenCalledWith(38); + expect(navigateMock).toHaveBeenCalledWith(40); + }); + + it('should call kompletr.handlers.hydrate if input value has changed', () => { + const hydrateMock = jest.spyOn(kompletr.handlers, 'hydrate'); + + kompletr.dom.input.value = 'app'; + kompletr.props.previousValue = 'ap'; + + const event = { keyCode: 65 }; // 'A' + + kompletr.listeners.onKeyup(event); + + expect(hydrateMock).toHaveBeenCalledWith('app'); + }); + + it('should trigger EventManager.event.navigationDone', () => { + const triggerMock = jest.spyOn(EventManager, 'trigger'); + + const event = { keyCode: 65 }; // 'A' + + kompletr.listeners.onKeyup(event); + + expect(triggerMock).toHaveBeenCalledWith(EventManager.event.navigationDone); + }); + }); + + describe('::onRenderDone', () => { + it('should call Animation[kompletr.options.animationType] and add click event listeners to result children', () => { + const fadeInMock = jest.spyOn(Animation, 'fadeIn'); + const addEventListenerMock = jest.spyOn(kompletr.dom.result.children[0], 'addEventListener'); + const triggerMock = jest.spyOn(EventManager, 'trigger'); + + kompletr.dom.result.appendChild(document.createElement('div')); + + kompletr.listeners.onRenderDone(); + + expect(fadeInMock).toHaveBeenCalledWith(kompletr.dom.result, kompletr.options.animationDuration); + expect(addEventListenerMock).toHaveBeenCalledWith('click', expect.any(Function)); + expect(triggerMock).toHaveBeenCalledWith(EventManager.event.renderDone); + }); + }); + }); +}); \ No newline at end of file diff --git a/test/kompletr.utils.spec.js b/test/kompletr.utils.spec.js index 67a0df9..3683909 100644 --- a/test/kompletr.utils.spec.js +++ b/test/kompletr.utils.spec.js @@ -1,5 +1,5 @@ import { JSDOM } from 'jsdom'; -import { build, uuid } from '../src/js/kompletr.utils.js'; +import { build } from '../src/js/kompletr.utils.js'; describe('Utils functions', () => { describe('::build', () => { From 4e4cf7bfd066b134a3b7ab7455420221211f07c0 Mon Sep 17 00:00:00 2001 From: Steve Date: Wed, 13 Mar 2024 23:10:13 +0100 Subject: [PATCH 20/48] chore: readme review for v2.0.0 --- README.md | 104 ++++++++++++++++++++-------------------------- package-lock.json | 4 +- package.json | 2 +- 3 files changed, 49 insertions(+), 61 deletions(-) diff --git a/README.md b/README.md index 842c180..07451c2 100644 --- a/README.md +++ b/README.md @@ -1,95 +1,83 @@ -# Kompleter - jQuery auto-completion plugin +# Kømpletr - Vanilla JS auto-completion library -![Github action workflow status](https://github.com/steve-lebleu/kompleter/actions/workflows/build.yml/badge.svg?branch=master) -[![CodeFactor](https://www.codefactor.io/repository/github/steve-lebleu/kompleter/badge)](https://www.codefactor.io/repository/github/steve-lebleu/kompleter) -![GitHub Release](https://img.shields.io/github/v/release/steve-lebleu/kompleter?logo=Github) -[![GPL Licence](https://badges.frapsoft.com/os/gpl/gpl.svg?v=103)](https://github.com/steve-lebleu/kompleter/blob/master/LICENSE) +![Github action workflow status](https://github.com/steve-lebleu/kompletr/actions/workflows/build.yml/badge.svg?branch=master) +[![CodeFactor](https://www.codefactor.io/repository/github/steve-lebleu/kompletr/badge)](https://www.codefactor.io/repository/github/steve-lebleu/kompletr) +![GitHub Release](https://img.shields.io/github/v/release/steve-lebleu/kompletr?logo=Github) +[![GPL Licence](https://badges.frapsoft.com/os/gpl/gpl.svg?v=103)](https://github.com/steve-lebleu/kompletr/blob/master/LICENSE) -Self-completion plugin with HTML 5, CSS 3, JavaScript and jQuery > 3.1.1. + 10kb of lightweight vanilla for an highly featured and eco friendly auto-complete library. ## > Demo -Demo: https://fabrik.konfer.be/kompleter/ +Demo: https://fabrik.konfer.be/kompletr/ -## > Page +## Installation -Github page: https://steve-lebleu.github.io/kompleter +### Package manager -## Installation +```bash +$ npm i kompletr --save +``` + +### CDN -``` bash -$ npm i kompleter --save +```html + ``` -## How to use ? +### Direct download -Retrieve kompleter styles in the head section of your page: +```html +$ npm i kompletr --save +``` + +## Getting started + +Insert Kømpletr styles in the head section of your page: ``` html ... - + ... ``` -Retrieve jQuery and Kompleter.js: +Load kompletr.js: ``` html - - + ``` -Into HTML code, place the following code with your data attributes values: - -* **data-url:** path to the data provider, which can be API endpoint or JSON file. Returned data format must be JSON. -* **data-filter-on:** property name of JSON object on which apply filter at keyup. -* **data-fields:** JSON object fields to display, coma separated. +Define an input element: ``` html - + ``` -Invoke: +Invoke Kømpletr: ``` javascript -$('#auto-complete').kompleter({}); +const input = document.getElementById('autocomplete'); +input.kompletr({ + data: [], + onSelect: (selected) => { + console.log('There is the selected value', selected); + } +}); ``` ## Options Following options are available: -* **animation**: string, style of animation ('fade','slide','none') -* **animationSpeed**: int, speed of the animation -* **begin**: boolean, check expression from beginning of the value if true, on the whole word if false -* **onChar**: int, number of chars completed in input before kompleter firing +* **animationType**: string, style of animation ('fadeIn','slideDown'). Default fadeIn +* **animationDuration**: int, speed of the animation. Default 500ms +* **fieldsToDisplay**: string[], properties to display in the suggestion field when suggestions are Objects +* **mapPropertyAsValue**: string, property to map as input value when the suggestions are Objects +* **filterOn**: string, check expression from beginning of the value or on the whole word. Default 'prefix' +* **startQueryingFromChar**: int, number of chars completed in input before kompletr fire search * **maxResults**: int, number of max results to display -* **beforeDisplay**: function(e, dataset), function, callback fired before display of result set -* **afterDisplay**: function(e, dataset), function, callback fired after display of result set -* **beforeFocus**: function(e, element), function, callback fired before focus on result item -* **afterFocus**: function(e, element), callback fired after focus on result item -* **beforeComplete**: function(e, dataset, element), callback fired before insertion of result -* **afterComplete**: function(e, dataset, element), callback fired after insertion of result - -### Analyze and refactoring to Vanilla version - -Two ways of usage: static, dynamic local, dynamic api - -#### Static - -Consumer give the full dataset when kompltr is initialized - --> No lazy loading --> async onKeyup callback optional --> Cache available --> Filtering is made at kompletr side - -#### Dynamic - -Consumer give nothing when kompltr is initialized - --> Lazy loading --> async onKeyup callback required --> Cache available --> Filtering is made at client side +* **onKeyup**: function(value), callback fired each time the user press a keyboard touch +* **onSelect**: function(selected), callback fired after selection of on result item +* **onError**: function(error), callback fired when an error occurs diff --git a/package-lock.json b/package-lock.json index 169de41..6866257 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "kompleter", + "name": "kompletr", "version": "1.1.4", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "kompleter", + "name": "kompletr", "version": "1.1.4", "license": "ISC", "devDependencies": { diff --git a/package.json b/package.json index 0af2caa..663424d 100755 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "kompleter", + "name": "kompletr", "version": "1.1.4", "description": "Vanilla autocomplete module", "main": "src/js/index.js", From 298d01a9ffbf92f5c8bdcc63f15c60c963b29aec Mon Sep 17 00:00:00 2001 From: Steve Date: Thu, 14 Mar 2024 15:56:58 +0100 Subject: [PATCH 21/48] chore: big cleanup es6 sausage --- jest.config.js | 2 +- test/setup.js => jest.setup.js | 0 .../{kompletr.animation.js => animation.js} | 40 +- src/js/broadcaster.js | 54 +++ src/js/{kompletr.cache.js => cache.js} | 68 ++- .../{kompletr.options.js => configuration.js} | 6 +- src/js/dom.js | 160 +++++++ src/js/enums.js | 60 +++ src/js/index.js | 35 +- src/js/kompletr.dom.js | 71 --- src/js/kompletr.enums.js | 34 -- src/js/kompletr.events.js | 93 ---- src/js/kompletr.js | 452 +++++++----------- src/js/kompletr.utils.js | 17 - src/js/kompletr.validation.js | 69 --- src/js/kompletr.view-engine.js | 83 ---- .../{kompletr.properties.js => properties.js} | 24 +- ...tr.animation.spec.js => animation.spec.js} | 2 +- .../{kompletr.cache.spec.js => cache.spec.js} | 13 +- test/{kompletr.dom.spec.js => dom.spec.js} | 2 +- test/kompletr.validation.spec.js | 63 --- test/kompletr.view-engine.spec.js | 60 --- ...mpletr.options.spec.js => options.spec.js} | 2 +- ....properties.spec.js => properties.spec.js} | 2 +- .../{kompletr.utils.spec.js => utils.spec.js} | 2 +- webpack.config.prod.js | 2 +- 26 files changed, 552 insertions(+), 864 deletions(-) rename test/setup.js => jest.setup.js (100%) rename src/js/{kompletr.animation.js => animation.js} (74%) create mode 100644 src/js/broadcaster.js rename src/js/{kompletr.cache.js => cache.js} (72%) rename src/js/{kompletr.options.js => configuration.js} (96%) create mode 100644 src/js/dom.js create mode 100644 src/js/enums.js delete mode 100644 src/js/kompletr.dom.js delete mode 100644 src/js/kompletr.enums.js delete mode 100644 src/js/kompletr.events.js delete mode 100644 src/js/kompletr.utils.js delete mode 100644 src/js/kompletr.validation.js delete mode 100644 src/js/kompletr.view-engine.js rename src/js/{kompletr.properties.js => properties.js} (94%) rename test/{kompletr.animation.spec.js => animation.spec.js} (95%) rename test/{kompletr.cache.spec.js => cache.spec.js} (81%) rename test/{kompletr.dom.spec.js => dom.spec.js} (96%) delete mode 100644 test/kompletr.validation.spec.js delete mode 100644 test/kompletr.view-engine.spec.js rename test/{kompletr.options.spec.js => options.spec.js} (97%) rename test/{kompletr.properties.spec.js => properties.spec.js} (95%) rename test/{kompletr.utils.spec.js => utils.spec.js} (93%) diff --git a/jest.config.js b/jest.config.js index c8dd14a..ee6cc20 100644 --- a/jest.config.js +++ b/jest.config.js @@ -46,7 +46,7 @@ export default { ], setupFilesAfterEnv: [ - "/test/setup.js", + "/jest.setup.js", ], transform: {}, diff --git a/test/setup.js b/jest.setup.js similarity index 100% rename from test/setup.js rename to jest.setup.js diff --git a/src/js/kompletr.animation.js b/src/js/animation.js similarity index 74% rename from src/js/kompletr.animation.js rename to src/js/animation.js index 1ca5f7a..47c4200 100644 --- a/src/js/kompletr.animation.js +++ b/src/js/animation.js @@ -1,39 +1,39 @@ -import { animation } from "./kompletr.enums.js"; +import { animation } from "./enums.js"; /** - * @descrption Animations functions. + * Represents an Animation class that provides various animation effects. */ export class Animation { constructor() {} /** - * @description Apply a fadeIn animation effect + * Apply a fadeIn animation effect to the target HTML element. * - * @param {HTMLElement} element Target HTML element - * @param {String} display CSS3 display property value - * @param {Number} duration Duration of the animation in ms + * @param {HTMLElement} element - The target HTML element. + * @param {String} display - The CSS3 display property value. + * @param {Number} duration - The duration of the animation in milliseconds. * * @returns {Void} * * @todo Manage duration */ - static fadeIn(element, display = 'block', duration = 500) { + static fadeIn(element, display, duration = 500) { element.style.opacity = 0; - element.style.display = display; + element.style.display = display || 'block'; (function fade(){ let value = parseFloat(element.style.opacity); if (!((value += .1) > 1)) { element.style.opacity = value; requestAnimationFrame(fade); } - })() + })(); }; /** - * @description Apply a fadeOut animation effect + * Apply a fadeOut animation effect to the target HTML element. * - * @param {HTMLElement} element Target HTML element - * @param {Number} duration Duration of the animation in ms. Default 500ms + * @param {HTMLElement} element - The target HTML element. + * @param {Number} duration - The duration of the animation in milliseconds. * * @returns {Void} * @@ -51,10 +51,10 @@ export class Animation { }; /** - * @description Apply a slideUp animation effect + * Apply a slideUp animation effect to the target HTML element. * - * @param {HTMLElement} element Target HTML element - * @param {Number} duration Duration of the animation in ms. Default 500ms + * @param {HTMLElement} element - The target HTML element. + * @param {Number} duration - The duration of the animation in milliseconds. * * @returns {Void} */ @@ -84,10 +84,10 @@ export class Animation { }; /** - * @description Apply a slideDown animation effect + * Apply a slideDown animation effect to the target HTML element. * - * @param {HTMLElement} element Target HTML element - * @param {Number} duration Duration of the animation in ms. Default 500ms + * @param {HTMLElement} element - The target HTML element. + * @param {Number} duration - The duration of the animation in milliseconds. * * @returns {Void} */ @@ -122,13 +122,13 @@ export class Animation { }; /** - * @description This function applies the opposite animation to a given element. + * Apply the opposite animation effect to a given element. * * @param {HTMLElement} element - The element to animate. * @param {string} [type=animation.fadeIn] - The animation to apply. By default, it's 'fadeIn'. * @param {number} [duration=500] - The duration of the animation in milliseconds. By default, it's 500. * - * @return {Object} Returns the result of the Animation function with the opposite animation, the element and the duration as parameters. + * @return {Object} Returns the result of the Animation function with the opposite animation, the element, and the duration as parameters. */ static animateBack(element, type = animation.fadeIn , duration = 500) { const animations = { diff --git a/src/js/broadcaster.js b/src/js/broadcaster.js new file mode 100644 index 0000000..e25495f --- /dev/null +++ b/src/js/broadcaster.js @@ -0,0 +1,54 @@ +import { event } from './enums.js'; + +/** + * Represents a Broadcaster that allows subscribing to and triggering events. + */ +export class Broadcaster { + subscribers = []; + + constructor() {} + + /** + * Subscribes to an event. + * + * @param {string} type - The type of event to subscribe to. + * @param {Function} handler - The event handler function. + * + * @throws {Error} If the event type is not valid. + */ + subscribe(type, handler) { + if (!Object.values(event).includes(type)) { + throw new Error(`Event should be one of ${Object.keys(event)}: ${type} given.`); + } + this.subscribers.push({ type, handler }); + } + + /** + * Listens for an event on a specified element. + * + * @param {HTMLElement} element - The element to listen on. + * @param {string} type - The type of event to listen for. + * @param {Function} handler - The event handler function. + */ + listen(element, type, handler) { + element.addEventListener(type, handler); + } + + /** + * Triggers an event. + * + * @param {string} type - The type of event to trigger. + * @param {Object} detail - Additional details to pass to the event handler. + * + * @throws {Error} If the event type is not valid. + */ + trigger(type, detail = {}) { + if (!Object.values(event).includes(type)) { + throw new Error(`Event should be one of ${Object.keys(event)}: ${type} given.`); + } + + this.subscribers + .filter(subscriber => subscriber.type === type) + .forEach(subscriber => subscriber.handler(detail)); + } +} \ No newline at end of file diff --git a/src/js/kompletr.cache.js b/src/js/cache.js similarity index 72% rename from src/js/kompletr.cache.js rename to src/js/cache.js index e72ca10..d15f976 100644 --- a/src/js/kompletr.cache.js +++ b/src/js/cache.js @@ -1,4 +1,4 @@ -import { EventManager } from "./kompletr.events.js"; +import { event } from "./enums.js"; /** * @description Kompletr simple caching mechanism implementation. @@ -18,7 +18,16 @@ export class Cache { */ _duration = null; - constructor(duration = 0, name = 'kompletr.cache') { + /** + * @description Broadcaster instance + */ + _braodcaster = null; + + constructor(broadcaster, duration = 0, name = 'kompletr.cache') { + if (!window.caches) { + return false; + } + this._broadcaster = broadcaster; this._name = name; this._duration = duration; } @@ -43,41 +52,10 @@ export class Cache { }); }) .catch(e => { - EventManager.trigger(EventManager.event.error, e); + this._broadcaster.trigger(event.error, e); }); } - /** - * @description Indicate if the cache is active or not - * - * @returns {Boolean} Cache is active or not - */ - isActive() { - return this._duration !== 0; - } - - /** - * @description Check the cache validity regarding the current request and the cache timelife - * - * @param {String} string The current request value - * - * @returns {Promise} - */ - async isValid(string) { - const cache = await window.caches.open(this._name); - - const response = await cache.match(`/${string}`); - if (!response) { - return false; - } - - const createdAt = await response.text(); - if (parseInt(createdAt + this._duration, 10) <= Date.now()) { - return false; - } - return true; - } - /** * @description Push data into the cache * @@ -96,7 +74,27 @@ export class Cache { cache.put(`/${string}`, new Response(JSON.stringify(data), { headers })); }) .catch(e => { - EventManager.trigger(EventManager.event.error, e); + this._broadcaster.trigger(event.error, e); }); } + + /** + * @description Check the cache validity regarding the current request and the cache timelife + * + * @param {String} string The current request value + * + * @returns {Promise} + */ + async isValid(string) { + try { + const cache = await window.caches.open(this._name); + const response = await cache.match(`/${string}`); + if (!response) { + return false; + } + return true; + } catch(e) { + this._broadcaster.trigger(event.error, e); + } + } }; \ No newline at end of file diff --git a/src/js/kompletr.options.js b/src/js/configuration.js similarity index 96% rename from src/js/kompletr.options.js rename to src/js/configuration.js index 1698bc5..a2133e3 100644 --- a/src/js/kompletr.options.js +++ b/src/js/configuration.js @@ -1,9 +1,9 @@ -import { animation, searchExpression, theme } from './kompletr.enums.js'; +import { animation, searchExpression, theme } from './enums.js'; /** - * @description Represents the options for the Kompleter library. + * @description Represents the configuration for the Kompleter library. */ -export class Options { +export class Configuration { /** * The type of animation for the element. * @type {string} diff --git a/src/js/dom.js b/src/js/dom.js new file mode 100644 index 0000000..ae48b33 --- /dev/null +++ b/src/js/dom.js @@ -0,0 +1,160 @@ +import { event } from './enums.js'; + +/** + * @description + */ +export class DOM { + + /** + * @description Body tag + */ + _body = null; + + get body() { + return this._body; + } + + set body(value) { + this._body = value; + } + + /** + * @description Main input text + */ + _input = null; + + get input() { + return this._input; + } + + set input(value) { + if (input instanceof HTMLInputElement === false) { + throw new Error(`input should be an HTMLInputElement instance: ${input} given.`); + } + this._input = value; + } + + /** + * @description HTMLElement in suggestions who's have the focus + */ + _focused = null; + + get focused() { + return this._focused; + } + + set focused(value) { + this._focused = value; + } + + /** + * @description HTMLElement results container + */ + _result = null; + + get result() { + return this._result; + } + + set result(value) { + this._result = value; + } + + _broadcaster = null; + + // TODO: do better with hardcoded theme and classes + // TODO: do bindings out of the constructor + constructor(input, broadcaster, options = { theme: 'light' }) { + this._body = document.getElementsByTagName('body')[0]; + + this._input = input instanceof HTMLInputElement ? input : document.getElementById(input); + this._input.setAttribute('class', `${this._input.getAttribute('class')} input--search`); + + this._result = this.build('div', [ { id: 'kpl-result' }, { class: 'form--search__result' } ]); + + this._input.parentElement.setAttribute('class', `${this._input.parentElement.getAttribute('class')} kompletr ${options.theme}`); + this._input.parentElement.appendChild(this._result); + + + this._broadcaster = broadcaster; + } + + /** + * @description Build an HTML element and set his attributes + * + * @param {String} element HTML tag to build + * @param {Object[]} attributes Key / values pairs + * + * @returns {HTMLElement} + */ + build(element, attributes = []) { + const htmlElement = document.createElement(element); + attributes.forEach(attribute => { + htmlElement.setAttribute(Object.keys(attribute)[0], Object.values(attribute)[0]); + }); + return htmlElement; + }; + + /** + * @description Add / remove the focus on a HTMLElement + * + * @param {String} action add|remove + * + * @returns {Void} + */ + focus(pointer, action) { + if (!['add', 'remove'].includes(action)) { + throw new Error('action should be one of ["add", "remove]: ' + action + ' given.'); + } + + switch (action) { + case 'add': + this.focused = this.result.children[pointer]; + this.result.children[pointer].className += ' focus'; + break; + case 'remove': + this.focused = null; + Array.from(this.result.children).forEach(result => { + ((result) => { + result.className = 'item--result'; + })(result) + }); + break; + } + } + + /** + * @description Display results according to the current input value / setup + * + * @returns {Void} + */ + buildResults(data, fieldsToDisplay) { + let html = ''; + + if(data && data.length) { + html = data + .reduce((html, current) => { + html += `
`; + switch (typeof current.data) { + case 'string': + html += `${current.data}`; + break; + case 'object': + let properties = Array.isArray(fieldsToDisplay) && fieldsToDisplay.length ? fieldsToDisplay: Object.keys(current.data); + for(let j = 0; j < properties.length; j++) { + html += `${current.data[properties[j]]}`; + } + break; + } + html += '
'; + return html; + }, ''); + + } else { + html = '
Not found
'; + } + + this.result.innerHTML = html; + this._broadcaster.trigger(event.domDone); // TODO here or in the handlers ? + } +} \ No newline at end of file diff --git a/src/js/enums.js b/src/js/enums.js new file mode 100644 index 0000000..96ed70a --- /dev/null +++ b/src/js/enums.js @@ -0,0 +1,60 @@ +/** + * Enum representing different animation types. + * + * @enum {string} + * @readonly + */ +const animation = Object.freeze({ + fadeIn: 'fadeIn', + slideDown: 'slideDown', +}); + + +/** + * Enum representing different custom events. + * + * @enum {string} + * @readonly + */ +const event = Object.freeze({ + error: 'kompletr.error', + domDone: 'kompletr.dom.done', + dataDone: 'kompletr.data.done', + selectDone: 'kompletr.select.done' +}); + +/** + * Enum representing the origin of a value. + * + * @enum {string} + * @readonly + */ +const origin = Object.freeze({ + cache: 'cache', + callback: 'callback', + local: 'local', +}); + +/** + * Enum representing the search expression options. + * + * @enum {string} + * @readonly + */ +const searchExpression = Object.freeze({ + prefix: 'prefix', + expression: 'expression', +}); + +/** + * Enum representing the theme options. + * + * @enum {string} + * @readonly + */ +const theme = Object.freeze({ + light: 'light', + dark: 'dark', +}); + +export { animation, event, origin, searchExpression, theme } \ No newline at end of file diff --git a/src/js/index.js b/src/js/index.js index 38a1184..cd96e73 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -1 +1,34 @@ -import kompletr from "./kompletr.js" \ No newline at end of file +import Kompletr from "./kompletr.js" + +import { Configuration } from './configuration.js'; +import { Cache } from './cache.js'; +import { Broadcaster } from "./broadcaster.js"; +import { Properties } from './properties.js'; +import { DOM } from './dom.js'; + +/** + * Initializes the module with the provided data and options. + * + * @param {Object} options - The configuration options for the application. + * @param {Object} data - The data used by the application. + * @param {Function} onKeyup - The callback function to be executed on keyup event. + * @param {Function} onSelect - The callback function to be executed on select event. + * @param {Function} onError - The callback function to be executed on error event. + * + * @returns {void} + */ +const kompletr = function({ data, options, onKeyup, onSelect, onError }) { + const broadcaster = new Broadcaster(); + + const configuration = new Configuration(options); + const properties = new Properties(data); + + const dom = new DOM(this, broadcaster, configuration); + const cache = configuration.cache ? new Cache(broadcaster, configuration.cache) : null; + + new Kompletr({ configuration, properties, dom, cache, broadcaster, onKeyup, onSelect, onError }); +}; + +window.HTMLInputElement.prototype.kompletr = kompletr; + +export default kompletr; \ No newline at end of file diff --git a/src/js/kompletr.dom.js b/src/js/kompletr.dom.js deleted file mode 100644 index e1b313b..0000000 --- a/src/js/kompletr.dom.js +++ /dev/null @@ -1,71 +0,0 @@ -import { build } from './kompletr.utils.js'; - -/** - * @description - */ -export class DOM { - - /** - * @description Body tag - */ - _body = null; - - /** - * @description Main input text - */ - _input = null; - - /** - * @description HTMLElement in suggestions who's have the focus - */ - _focused = null; - - /** - * @description HTMLElement results container - */ - _result = null; - - constructor(input, options = { theme: 'light' }) { - this._body = document.getElementsByTagName('body')[0]; - - this._input = input instanceof HTMLInputElement ? input : document.getElementById(input); - this._input.setAttribute('class', `${this._input.getAttribute('class')} input--search`); - - this._result = build('div', [ { id: 'kpl-result' }, { class: 'form--search__result' } ]); - - this._input.parentElement.setAttribute('class', `${this._input.parentElement.getAttribute('class')} kompletr ${options.theme}`); - this._input.parentElement.appendChild(this._result); - } - - get body() { - return this._body; - } - - set body(value) { - this._body = value; - } - - get input() { - return this._input; - } - - set input(value) { - this._input = value; - } - - get focused() { - return this._focused; - } - - set focused(value) { - this._focused = value; - } - - get result() { - return this._result; - } - - set result(value) { - this._result = value; - } -} \ No newline at end of file diff --git a/src/js/kompletr.enums.js b/src/js/kompletr.enums.js deleted file mode 100644 index f4f0038..0000000 --- a/src/js/kompletr.enums.js +++ /dev/null @@ -1,34 +0,0 @@ -/** - * @description Animation types - */ -const animation = Object.freeze({ - fadeIn: 'fadeIn', - slideDown: 'slideDown', -}); - -/** - * @description Data origins - */ -const origin = Object.freeze({ - cache: 'cache', - callback: 'callback', - local: 'local', -}); - -/** - * @description Search expression values - */ -const searchExpression = Object.freeze({ - prefix: 'prefix', - expression: 'expression', -}); - -/** - * @description Theme values - */ -const theme = Object.freeze({ - light: 'light', - dark: 'dark', -}); - -export { animation, origin, searchExpression, theme } \ No newline at end of file diff --git a/src/js/kompletr.events.js b/src/js/kompletr.events.js deleted file mode 100644 index 8113a0f..0000000 --- a/src/js/kompletr.events.js +++ /dev/null @@ -1,93 +0,0 @@ -/** - * @description - */ -export class EventManager { - - constructor() {} - - static event = Object.freeze({ - error: 'error', - navigationDone: 'navigationDone', - renderDone: 'renderDone', - dataDone: 'dataDone', - resultDone: 'resultDone', - selectDone: 'selectDone' - }) - - /** - * @description Get a CustomEvent instance for an event with name 'kompletr.error' - * - * @param {*} detail - * - * @returns {CustomEvent} - */ - static error = (detail = { message: '', stack: '', name: ''}) => new CustomEvent('kompletr.error', { - detail, - bubble: true, - cancelable: false, - composed: false, - }) - - /** - * @description Get a CustomEvent instance for an event with name 'kompletr.navigation.done' - * - * @param {*} detail - * - * @returns {CustomEvent} - */ - static navigationDone = (detail = {}) => new CustomEvent('kompletr.navigation.done', { - detail, - bubble: true, - cancelable: false, - composed: false, - }) - - /** - * @description Get a CustomEvent instance for an event with name 'kompletr.view.result.done' - * - * @param {*} detail - * - * @returns {CustomEvent} - */ - static renderDone = (detail = {}) => new CustomEvent('kompletr.render.done', { - detail, - bubble: true, - cancelable: false, - composed: false, - }) - - /** - * @description Get a CustomEvent instance for an event with name 'kompletr.request.done' - * - * @param {*} detail - * - * @returns {CustomEvent} - */ - static dataDone = (detail = { from: '', data: null }) => new CustomEvent('kompletr.data.done', { - detail, - bubble: true, - cancelable: false, - composed: false, - }) - - /** - * @description Get a CustomEvent instance for an event with name 'kompletr.select.done' - * - * @param {Object} detail - * - * @returns {CustomEvent} - */ - static selectDone = (detail = {}) => new CustomEvent('kompletr.select.done', { - detail, - bubble: true, - cancelable: false, - composed: false, - }) - - static trigger(event, detail = {}) { - if (!EventManager.event[event]) { - throw new Error(`Unknown event ${event} triggered`); - } - document.dispatchEvent(EventManager[event](detail)); - } -} \ No newline at end of file diff --git a/src/js/kompletr.js b/src/js/kompletr.js index cf101e4..476f8f1 100644 --- a/src/js/kompletr.js +++ b/src/js/kompletr.js @@ -1,13 +1,6 @@ -import { Validation } from './kompletr.validation.js'; -import { Options } from './kompletr.options.js'; -import { Cache } from './kompletr.cache.js'; -import { Properties } from './kompletr.properties.js'; -import { DOM } from './kompletr.dom.js'; -import { ViewEngine } from './kompletr.view-engine.js'; -import { EventManager } from './kompletr.events.js'; -import { Animation } from './kompletr.animation.js'; -import { origin } from './kompletr.enums.js'; +import { Animation } from './animation.js'; +import { event, origin } from './enums.js'; /** * @summary Kømpletr.js is a library providing features dedicated to autocomplete fields. @@ -16,324 +9,215 @@ import { origin } from './kompletr.enums.js'; * * @see https://github.com/steve-lebleu/kompletr */ -const kompletr = { +export default class Kompletr { + broadcaster = null; /** - * @description Cache related functions. + * */ - cache: null, + cache = null; /** - * @description Client callbacks functions. + * */ - callbacks: { - - /** - * @description Callback function exposed to consummer to allow errors management. - * - * Default: null - * Signature: (error) => {} - * Trigger: error catched - * - * @param {Error} error The fired Error instance - */ - onError: null, - - /** - * @description Callback function exposed to consummer to allow dataset hydratation - * - * Default: null - * Signature: async (value, cb) => {} - * Trigger: keyup event, after input value is greater or equals than the options.startQueryingFromChar value - * - * @param {String} value Current value of the input text to use for searching - * @param {Function} cb Callback function expecting data in parameter - * - * @async - * - * @todo Manage a loader display when you need to wait after the data - */ - onKeyup: null, - - /** - * @description Callback function exposed to consumer to allow choice management - * - * Default: null - * Signature: (selected) => {} - * Trigger: keyup + enter OR mouse click on a suggested item - * - * @param {*} selected The current selected item, as String|Object - */ - onSelect: null, - }, + callbacks = {}; /** - * @description kompletr events handlers. + * */ - handlers: { - - /** - * @description Manage the data hydration according to the current setup (cache, request or local data) - * - * @param {String} value Current input value - * - * @emits CustomEvent 'kompletr.request.done' { from, data } - * @emits CustomEvent 'kompletr.error' { error } - * - * @returns {Void} - * - * @todo opotions.data could returns Promise, and same for the onKeyup callback - */ - hydrate: async function(value) { - try { - if (kompletr.cache.isActive() && await kompletr.cache.isValid(value)) { - kompletr.cache.get(value, (data) => { - EventManager.trigger(EventManager.event.dataDone, { from: origin.cache, data }); - }); - } else if (kompletr.callbacks.onKeyup) { - kompletr.callbacks.onKeyup(value, (data) => { - EventManager.trigger(EventManager.event.dataDone, { from: origin.callback, data }); - }); - } else { - EventManager.trigger(EventManager.event.dataDone, { from: origin.local, data: kompletr.props.data }); - } - } catch(e) { - EventManager.trigger(EventManager.event.error, e); - } - }, - - /** - * @description Apply visual navigation into the suggestions set - * - * @param {Number} keyCode The current keyCode value - * - * @returns {Void} - */ - navigate: function (keyCode) { - if (keyCode != 38 && keyCode != 40) { - return false; - } - - if(kompletr.props.pointer < -1 || kompletr.props.pointer > kompletr.dom.result.children.length - 1) { - return false; - } - - if (keyCode === 38 && kompletr.props.pointer >= -1) { - kompletr.props.pointer--; - } else if (keyCode === 40 && kompletr.props.pointer < kompletr.dom.result.children.length - 1) { - kompletr.props.pointer++; - } - - kompletr.viewEngine.focus(kompletr.props.pointer, 'remove'); - kompletr.viewEngine.focus(kompletr.props.pointer, 'add'); - }, - - /** - * @description Select a suggested item as user choice - * - * @param {Number} idx The index of the selected suggestion - * - * @emits CustomEvent 'kompletr.select.done' - * - * @returns {Void} - */ - select: function (idx = 0) { - kompletr.dom.input.value = typeof kompletr.props.data[idx] === 'object' ? kompletr.props.data[idx][kompletr.options.propToMapAsValue] : kompletr.props.data[idx]; - kompletr.callbacks.onSelect(kompletr.props.data[idx]); - EventManager.trigger(EventManager.event.selectDone); - }, - }, + configuration = null; /** - * @description kompletr dom container. + * */ - dom: null, + dom = null; /** - * @description kompletr events listeners of all religions. + * */ - listeners: { - - /** - * @description CustomEvent 'kompletr.error' listener - */ - onError: (e) => { - console.error(`[kompletr] An error has occured -> ${e.detail.stack}`); - Animation.fadeIn(kompletr.dom.result); - kompletr.callbacks.onError && kompletr.callbacks.onError(e.detail); - }, + props = null; - /** - * @description 'body.click' && kompletr.select.done listeners - * - * @todo Find better name - */ - onSelectDone: (e) => { - if (e.srcElement === kompletr.dom.input) { - return true; - } - Animation.animateBack(kompletr.dom.result, kompletr.options.animationType, kompletr.options.animationDuration); - EventManager.trigger(EventManager.event.navigationDone); - }, - - /** - * @description CustomEvent 'kompletr.navigation.done' listener - */ - onNavigationDone: (e) => { - kompletr.props.pointer = -1; - }, + constructor({ configuration, properties, dom, cache, broadcaster, onKeyup, onSelect, onError }) { + try { + this.configuration = configuration; + this.broadcaster = broadcaster; + this.props = properties; + this.dom = dom; + this.cache = cache; - /** - * @description CustomEvent 'kompletr.request.done' listener - * - * @todo Check something else to determine if we filter or not -> currently just the presence of onKeyup callback - */ - onDataDone: async (e) => { - kompletr.props.data = e.detail.data; + this.broadcaster.subscribe(event.error, this.error); + this.broadcaster.subscribe(event.dataDone, this.showResults); + this.broadcaster.subscribe(event.domDone, this.bindResults); + this.broadcaster.subscribe(event.selectDone, this.closeTheShop); - let data = kompletr.props.data.map((record, idx) => ({ idx, data: record }) ); + this.broadcaster.listen(this.dom.input, 'keyup', this.suggest); + this.broadcaster.listen(this.dom.body, 'click', this.closeTheShop); // TODO: validate this because it can be called many times if many kompletr instances - if (!kompletr.callbacks.onKeyup) { - data = data.filter((record) => { - const value = typeof record.data === 'string' ? record.data : record.data[kompletr.options.propToMapAsValue]; - if (kompletr.options.filterOn === 'prefix') { - return value.toLowerCase().lastIndexOf(kompletr.dom.input.value.toLowerCase(), 0) === 0; - } - return value.toLowerCase().lastIndexOf(kompletr.dom.input.value.toLowerCase()) !== -1; - }); + if(onKeyup || onSelect || onError) { + this.callbacks = Object.assign(this.callbacks, { onKeyup, onSelect, onError }); } + } catch(e) { + broadcaster.trigger(event.error, e); + } + } - const cacheIsActiveAndNotValid = kompletr.cache.isActive() && await kompletr.cache.isValid(kompletr.dom.input.value) === false; - if (cacheIsActiveAndNotValid) { - kompletr.cache.set({ string: kompletr.dom.input.value, data: e.detail.data }); - } + closeTheShop = (e) => { + if (e.srcElement === this.dom.input) { + return true; + } + Animation.animateBack(this.dom.result, this.configuration.animationType, this.configuration.animationDuration); + this.resetPointer(); + } - kompletr.viewEngine.showResults(data.slice(0, kompletr.options.maxResults), kompletr.options, function() { - EventManager.trigger(EventManager.event.renderDone); - }); - }, + resetPointer = () => { + this.props.pointer = -1; + } - /** - * @description 'input.keyup' listener - */ - onKeyup: async (e) => { - if (kompletr.dom.input.value.length < kompletr.options.startQueriyngFromChar) { - return; - } - - const keyCode = e.keyCode; + error = (e) => { + console.error(`[kompletr] An error has occured -> ${e.stack}`); + Animation.fadeIn(this.dom.result); + this.callbacks.onError && this.callbacks.onError(e); + } - switch (keyCode) { - case 13: // Enter - kompletr.handlers.select(kompletr.dom.focused.id); - break; - case 38: // Up - case 40: // Down - kompletr.handlers.navigate(keyCode); - break; - default: - if (kompletr.dom.input.value !== kompletr.props.previousValue) { - kompletr.handlers.hydrate(kompletr.dom.input.value); - } - EventManager.trigger(EventManager.event.navigationDone); - break - } - }, + /** + * @description CustomEvent 'this.request.done' listener + * + * @todo Check something else to determine if we filter or not -> currently just the presence of onKeyup callback + */ + showResults = async ({ from, data }) => { + this.props.data = data; - /** - * @description CustomEvent 'kompletr.render.done' listener - */ - onRenderDone: () => { - Animation[kompletr.options.animationType](kompletr.dom.result, kompletr.options.animationDuration); - if(typeof kompletr.dom.result.children !== 'undefined') { - const numberOfResults = kompletr.dom.result.children.length; - if(numberOfResults) { - for(let i = 0; i < numberOfResults; i++) { - ((i) => { - return kompletr.dom.result.children[i].addEventListener('click', (e) => { - kompletr.dom.focused = kompletr.dom.result.children[i]; - kompletr.handlers.select(kompletr.dom.focused.id); - }); - })(i) - } + data = this.props.data.map((record, idx) => ({ idx, data: record }) ); // TODO: Check if we can avoid this step + + if (!this.callbacks.onKeyup) { + data = data.filter((record) => { + const value = typeof record.data === 'string' ? record.data : record.data[this.configuration.propToMapAsValue]; + if (this.configuration.filterOn === 'prefix') { + return value.toLowerCase().lastIndexOf(this.dom.input.value.toLowerCase(), 0) === 0; } - } - }, - }, + return value.toLowerCase().lastIndexOf(this.dom.input.value.toLowerCase()) !== -1; + }); + } - /** - * @description kompletr public options. - */ - options: null, + if (this.cache && from !== origin.cache) { + this.cache.set({ string: this.dom.input.value, data }); + } + + this.dom.buildResults(data.slice(0, this.configuration.maxResults), this.configuration.fieldsToDisplay); + } /** - * @description kompletr internal properties. + * @description CustomEvent 'kompletr.dom.done' listener */ - props: null, + bindResults = () => { + Animation[this.configuration.animationType](this.dom.result, this.configuration.animationDuration); // TODO this is not really bindResult + if(this.dom.result?.children?.length) { + for(let i = 0; i < this.dom.result.children.length; i++) { + ((i) => { + return this.broadcaster.listen(this.dom.result.children[i], 'click', () => { + this.dom.focused = this.dom.result.children[i]; + this.select(this.dom.focused.id); + }); + })(i) + } + } + } /** - * @description kompletr rendering functions. + * @description 'input.keyup' listener */ - viewEngine: null, + suggest = (e) => { + if (this.dom.input.value.length < this.configuration.startQueriyngFromChar) { + return; + } + + const keyCode = e.keyCode; + + switch (keyCode) { + case 13: // Enter + this.select(this.dom.focused.id); + break; + case 38: // Up + case 40: // Down + this.navigate(keyCode); + break; + default: + if (this.dom.input.value !== this.props.previousValue) { + this.hydrate(this.dom.input.value); + } + this.resetPointer(); + break + } + } /** - * @description kompletr entry point. + * @description Manage the data hydration according to the current setup (cache, request or local data) * - * @param {String|HTMLInputElement} input HTMLInputElement - * @param {Array} data Initial data set - * @param {Object} options Main options and configuration parameters - * @param {Function} onKeyup Callback function called when the event onkeyup occurs on the input element - * @param {Function} onSelect Callback function called when a value is selected - * @param {Function} onError + * @param {String} value Current input value + * + * @emits CustomEvent 'this.request.done' { from, data } + * @emits CustomEvent 'this.error' { error } * * @returns {Void} + * + * @todo options.data could returns Promise, and same for the onKeyup callback */ - init: function({ input, data, options, onKeyup, onSelect, onError }) { + hydrate = async (value) => { try { - - // 1. Validate - - Validation.validate(input, data, { onKeyup, onSelect, onError }); - - // 2. Assign - - if(data) { - kompletr.props = new Properties({ data }); - } - - if(options) { - kompletr.options = new Options(options); - } - - if(onKeyup || onSelect || onError) { - kompletr.callbacks = Object.assign(kompletr.callbacks, { onKeyup, onSelect, onError }); + if (this.cache && await this.cache.isValid(value)) { + this.cache.get(value, (data) => { + this.broadcaster.trigger(event.dataDone, { from: origin.cache, data: data }); + }); + } else if (this.callbacks.onKeyup) { + this.callbacks.onKeyup(value, (data) => { + this.broadcaster.trigger(event.dataDone, { from: origin.callback, data: data }); + }); + } else { + this.broadcaster.trigger(event.dataDone, { from: origin.local, data: this.props.data }); } + } catch(e) { + this.broadcaster.trigger(event.error, e); + } + } - kompletr.cache = new Cache(options?.cache); - - // 3. Build DOM - - kompletr.dom = new DOM(input, options); - kompletr.viewEngine = new ViewEngine(kompletr.dom); - - // 4. Listeners - - kompletr.dom.body.addEventListener('click', kompletr.listeners.onSelectDone); - kompletr.dom.input.addEventListener('keyup', kompletr.listeners.onKeyup); + /** + * @description Apply visual navigation into the suggestions set + * + * @param {Number} keyCode The current keyCode value + * + * @returns {Void} + */ + navigate = (keyCode) => { + if (keyCode != 38 && keyCode != 40) { + return false; + } - document.addEventListener('kompletr.select.done', kompletr.listeners.onSelectDone); - document.addEventListener('kompletr.navigation.done', kompletr.listeners.onNavigationDone); - document.addEventListener('kompletr.data.done', kompletr.listeners.onDataDone); - document.addEventListener('kompletr.render.done', kompletr.listeners.onRenderDone); - document.addEventListener('kompletr.error', kompletr.listeners.onError); - } catch(e) { - console.error(e); + if(this.props.pointer < -1 || this.props.pointer > this.dom.result.children.length - 1) { + return false; } - }, -}; -window.HTMLInputElement.prototype.kompletr = function({ data, options, onKeyup, onSelect, onError }) { - kompletr.init({ input: this, data, options, onKeyup, onSelect, onError }); -}; + if (keyCode === 38 && this.props.pointer >= -1) { + this.props.pointer--; + } else if (keyCode === 40 && this.props.pointer < this.dom.result.children.length - 1) { + this.props.pointer++; + } -export default kompletr; \ No newline at end of file + this.dom.focus(this.props.pointer, 'remove'); + this.dom.focus(this.props.pointer, 'add'); + } + + /** + * @description Select a suggested item as user choice + * + * @param {Number} idx The index of the selected suggestion + * + * @emits CustomEvent 'this.select.done' + * + * @returns {Void} + */ + select = (idx = 0) => { + this.dom.input.value = typeof this.props.data[idx] === 'object' ? this.props.data[idx][this.configuration.propToMapAsValue] : this.props.data[idx]; + this.callbacks.onSelect(this.props.data[idx]); + this.broadcaster.trigger(event.selectDone); + } +}; \ No newline at end of file diff --git a/src/js/kompletr.utils.js b/src/js/kompletr.utils.js deleted file mode 100644 index b037b3b..0000000 --- a/src/js/kompletr.utils.js +++ /dev/null @@ -1,17 +0,0 @@ -/** -* @description Build an HTML element and set his attributes -* -* @param {String} element HTML tag to build -* @param {Object[]} attributes Key / values pairs -* -* @returns {HTMLElement} -*/ -const build = (element, attributes = []) => { - const htmlElement = document.createElement(element); - attributes.forEach(attribute => { - htmlElement.setAttribute(Object.keys(attribute)[0], Object.values(attribute)[0]); - }); - return htmlElement; -}; - -export { build } \ No newline at end of file diff --git a/src/js/kompletr.validation.js b/src/js/kompletr.validation.js deleted file mode 100644 index 0725a4b..0000000 --- a/src/js/kompletr.validation.js +++ /dev/null @@ -1,69 +0,0 @@ - -/** - * @description - */ -export class Validation { - constructor() {} - - /** - * @description Valid input as HTMLInputElement or DOM eligible - * - * @param {HTMLInputElement|String} input - * - * @throws {Error} - * - * @returns {Boolean} - */ - static input(input) { - if (input instanceof HTMLInputElement === false && !document.getElementById(input)) { - throw new Error(`input should be an HTMLInputElement instance or a valid id identifier. None of boths given, ${input} received.`); - } - return true; - } - - /** - * @description Valid data format - * - * @param {Array} data - * - * @returns {Boolean} - */ - static data (data) { - if (data && !Array.isArray(data)) { - throw new Error(`Invalid data. Please provide a valid data as Array of what you want (${data} given).`); - } - return true; - } - - /** - * @description Valid callbacks - * - * @param {Object} callbacks - * - * @returns {Boolean} - */ - static callbacks(callbacks) { - Object.keys(callbacks).forEach(key => { - if (!['onKeyup', 'onSelect', 'onError'].includes(key)) { - throw new Error(`Unrecognized callback function ${key}. Please use onKeyup, onSelect and onError as valid callbacks functions.`); - } - if (callbacks[key] && typeof callbacks[key] !== 'function') { - throw new Error(`callback function ${key} should be a function, ${callbacks[key]} given`); - } - }); - return true; - } - - /** - * @description One line validation - * - * @param {HTMLInputElement|String} input - * @param {Array} data - * @param {Object} callbacks - * - * @returns {Boolean} - */ - static validate(input, data, callbacks) { - return Validation.input(input) && Validation.data(data) && Validation.callbacks(callbacks); - } -} \ No newline at end of file diff --git a/src/js/kompletr.view-engine.js b/src/js/kompletr.view-engine.js deleted file mode 100644 index 31844f2..0000000 --- a/src/js/kompletr.view-engine.js +++ /dev/null @@ -1,83 +0,0 @@ -/** - * @description Dedicated class to manage rendering tasks. ViewEngine is a little bit too much as name, but it's something like that. - */ -export class ViewEngine { - - /** - * @description DOM instance - */ - _dom = null; - - constructor(dom) { - this._dom = dom; - } - - /** - * @description Add / remove the focus on a HTMLElement - * - * @param {String} action add|remove - * - * @returns {Void} - */ - focus(pointer, action) { - if (!['add', 'remove'].includes(action)) { - throw new Error('action should be one of ["add", "remove]: ' + action + ' given.'); - } - - switch (action) { - case 'add': - this._dom.focused = this._dom.result.children[pointer]; - this._dom.result.children[pointer].className += ' focus'; - break; - case 'remove': - this._dom.focused = null; - Array.from(this._dom.result.children).forEach(result => { - ((result) => { - result.className = 'item--result'; - })(result) - }); - break; - } - } - - /** - * @description Display results according to the current input value / setup - * - * @emits CustomEvent 'kompletr.view.result.done' - * - * @returns {Void} - * - * @todo Try better than the done callback - */ - showResults(data, options, done) { - let html = ''; - - if(data && data.length) { - - html = data - .reduce((html, current) => { - html += `
`; - switch (typeof current.data) { - case 'string': - html += `${current.data}`; - break; - case 'object': - let properties = Array.isArray(options.fieldsToDisplay) && options.fieldsToDisplay.length ? options.fieldsToDisplay: Object.keys(current.data); - for(let j = 0; j < properties.length; j++) { - html += `${current.data[properties[j]]}`; - } - break; - } - html += '
'; - return html; - }, ''); - - } else { - html = '
Not found
'; - } - - this._dom.result.innerHTML = html; - - done(); - } -} \ No newline at end of file diff --git a/src/js/kompletr.properties.js b/src/js/properties.js similarity index 94% rename from src/js/kompletr.properties.js rename to src/js/properties.js index 6f7fb22..9ee954b 100644 --- a/src/js/kompletr.properties.js +++ b/src/js/properties.js @@ -8,16 +8,6 @@ export class Properties { */ _data = null - /** - * @description Position of the pointer inside the suggestions - */ - _pointer = null - - /** - * @description Previous input value - */ - _previousValue = null - get data() { return this._data; } @@ -29,6 +19,11 @@ export class Properties { this._data = value; } + /** + * @description Position of the pointer inside the suggestions + */ + _pointer = null + get pointer() { return this._pointer; } @@ -40,6 +35,11 @@ export class Properties { this._pointer = value; } + /** + * @description Previous input value + */ + _previousValue = null + get previousValue() { return this._previousValue; } @@ -48,7 +48,7 @@ export class Properties { this._previousValue = value; } - constructor(props) { - this._data = props.data; + constructor(data = []) { + this._data = data; } } \ No newline at end of file diff --git a/test/kompletr.animation.spec.js b/test/animation.spec.js similarity index 95% rename from test/kompletr.animation.spec.js rename to test/animation.spec.js index 491536c..633abde 100644 --- a/test/kompletr.animation.spec.js +++ b/test/animation.spec.js @@ -1,5 +1,5 @@ import { JSDOM } from 'jsdom'; -import { Animation } from '../src/js/kompletr.animation.js'; +import { Animation } from '../src/js/animation.js'; describe('Animation', () => { let dom; diff --git a/test/kompletr.cache.spec.js b/test/cache.spec.js similarity index 81% rename from test/kompletr.cache.spec.js rename to test/cache.spec.js index c04dd8c..f75a26e 100644 --- a/test/kompletr.cache.spec.js +++ b/test/cache.spec.js @@ -1,5 +1,5 @@ import { describe, jest } from '@jest/globals'; -import { Cache } from '../src/js/kompletr.cache.js'; +import { Cache } from '../src/js/cache.js'; describe('Cache', () => { let cache; @@ -22,11 +22,6 @@ describe('Cache', () => { expect(typeof cache.get).toBe('function'); }); - it('should defines isActive method', () => { - expect(cache.isActive).toBeDefined(); - expect(typeof cache.isActive).toBe('function'); - }); - it('should defines isValid method', () => { expect(cache.isValid).toBeDefined(); expect(typeof cache.isValid).toBe('function'); @@ -53,12 +48,6 @@ describe('Cache', () => { }); }); - describe('::isActive', () => { - it('should returns true if duration is not 0', () => { - expect(cache.isActive()).toBe(true); - }); - }); - describe('::isValid', () => { it('should returns true if cache entry is within its lifetime', async () => { expect(await cache.isValid('test')).toBe(true); diff --git a/test/kompletr.dom.spec.js b/test/dom.spec.js similarity index 96% rename from test/kompletr.dom.spec.js rename to test/dom.spec.js index 3b66331..c677fca 100644 --- a/test/kompletr.dom.spec.js +++ b/test/dom.spec.js @@ -1,5 +1,5 @@ import { JSDOM } from 'jsdom'; -import { DOM } from '../src/js/kompletr.dom.js'; +import { DOM } from '../src/js/dom.js'; describe('DOM class', () => { beforeEach(() => { diff --git a/test/kompletr.validation.spec.js b/test/kompletr.validation.spec.js deleted file mode 100644 index fff84ab..0000000 --- a/test/kompletr.validation.spec.js +++ /dev/null @@ -1,63 +0,0 @@ -import { JSDOM } from 'jsdom'; -import { Validation } from '../src/js/kompletr.validation.js'; - -describe('Validation class and methods', () => { - beforeEach(() => { - const dom = new JSDOM(); - global.document = dom.window.document; - }); - - describe('::input', () => { - test('input method should validate HTMLInputElement or DOM eligible', () => { - const element = document.createElement('input'); - element.id = 'test'; - document.body.appendChild(element); - - expect(() => Validation.input('test')).not.toThrow(); - expect(() => Validation.input(element)).not.toThrow(); - expect(() => Validation.input('not-exist')).toThrow(); - }); - }); - - describe('::data', () => { - test('data method should validate array', () => { - expect(() => Validation.data([1, 2, 3])).not.toThrow(); - expect(() => Validation.data('not-array')).toThrow(); - }); - }); - - describe('::callbacks', () => { - test('callbacks method should validate callbacks object', () => { - const callbacks = { - onKeyup: () => {}, - onSelect: () => {}, - onError: () => {}, - }; - - expect(() => Validation.callbacks(callbacks)).not.toThrow(); - expect(() => Validation.callbacks({ notValid: () => {} })).toThrow(); - expect(() => Validation.callbacks({ onKeyup: 'not-function' })).toThrow(); - }); - }); - - describe('::validate', () => { - test('validate method should validate input, data, and callbacks', () => { - const element = document.createElement('input'); - element.id = 'test'; - document.body.appendChild(element); - - const data = [1, 2, 3]; - - const callbacks = { - onKeyup: () => {}, - onSelect: () => {}, - onError: () => {}, - }; - - expect(() => Validation.validate('test', data, callbacks)).not.toThrow(); - expect(() => Validation.validate('not-exist', data, callbacks)).toThrow(); - expect(() => Validation.validate('test', 'not-array', callbacks)).toThrow(); - expect(() => Validation.validate('test', data, { notValid: () => {} })).toThrow(); - }); - }); -}); diff --git a/test/kompletr.view-engine.spec.js b/test/kompletr.view-engine.spec.js deleted file mode 100644 index ef8144a..0000000 --- a/test/kompletr.view-engine.spec.js +++ /dev/null @@ -1,60 +0,0 @@ -import { JSDOM } from 'jsdom'; -import { ViewEngine } from '../src/js/kompletr.view-engine.js'; - -describe('ViewEngine class and methods', () => { - beforeEach(() => { - const dom = new JSDOM(); - global.document = dom.window.document; - }); - - describe('::focus', () => { - test('focus method should add or remove focus', () => { - const dom = { - result: document.createElement('div'), - focused: null, - }; - - const child1 = document.createElement('div'); - const child2 = document.createElement('div'); - - dom.result.appendChild(child1); - dom.result.appendChild(child2); - - const viewEngine = new ViewEngine(dom); - - viewEngine.focus(0, 'add'); - expect(dom.focused).toBe(child1); - expect(child1.className).toContain('focus'); - - viewEngine.focus(0, 'remove'); - expect(dom.focused).toBe(null); - expect(child1.className).toBe('item--result'); - }); - }); - - describe('::showResults', () => { - test('showResults method should display results', done => { - const dom = { - result: document.createElement('div'), - }; - - const viewEngine = new ViewEngine(dom); - - const data = [ - { idx: 0, data: 'test1' }, - { idx: 1, data: { field1: 'test2', field2: 'test3' } }, - ]; - - const options = { - fieldsToDisplay: ['field1'], - }; - - viewEngine.showResults(data, options, () => { - expect(dom.result.innerHTML).toContain('test1'); - expect(dom.result.innerHTML).toContain('test2'); - expect(dom.result.innerHTML).not.toContain('test3'); - done(); - }); - }); - }); -}); \ No newline at end of file diff --git a/test/kompletr.options.spec.js b/test/options.spec.js similarity index 97% rename from test/kompletr.options.spec.js rename to test/options.spec.js index 6b9a213..5662008 100644 --- a/test/kompletr.options.spec.js +++ b/test/options.spec.js @@ -1,4 +1,4 @@ -import { Options } from '../src/js/kompletr.options.js'; +import { Options } from '../src/js/options.js'; describe('Options', () => { let options; diff --git a/test/kompletr.properties.spec.js b/test/properties.spec.js similarity index 95% rename from test/kompletr.properties.spec.js rename to test/properties.spec.js index 10a0d8e..536acaf 100644 --- a/test/kompletr.properties.spec.js +++ b/test/properties.spec.js @@ -1,4 +1,4 @@ -import { Properties } from '../src/js/kompletr.properties.js'; +import { Properties } from '../src/js/properties.js'; describe('Properties', () => { let properties; diff --git a/test/kompletr.utils.spec.js b/test/utils.spec.js similarity index 93% rename from test/kompletr.utils.spec.js rename to test/utils.spec.js index 3683909..141cdd9 100644 --- a/test/kompletr.utils.spec.js +++ b/test/utils.spec.js @@ -1,5 +1,5 @@ import { JSDOM } from 'jsdom'; -import { build } from '../src/js/kompletr.utils.js'; +import { build } from '../src/js/utils.js'; describe('Utils functions', () => { describe('::build', () => { diff --git a/webpack.config.prod.js b/webpack.config.prod.js index 3a7ee71..c7dcd32 100644 --- a/webpack.config.prod.js +++ b/webpack.config.prod.js @@ -5,7 +5,7 @@ import DashboardPlugin from "webpack-dashboard/plugin/index.js"; const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); export default { - entry: './src/js/kompletr.js', + entry: './src/js/index.js', experiments: { outputModule: true, }, From d9a747f2a6d2018ff99f988689a4e6d76aeed5bb Mon Sep 17 00:00:00 2001 From: Steve Date: Thu, 14 Mar 2024 19:17:40 +0100 Subject: [PATCH 22/48] chore: partial review UT --- src/js/animation.js | 1 - src/js/dom.js | 69 +++- test/broadcaster.spec.js | 45 ++ test/cache.spec.js | 11 +- ...{options.spec.js => configuration.spec.js} | 39 +- test/dom.spec.js | 82 ++-- test/kompletr.spec.js | 110 +++++ test/kompletr.test.js | 389 ------------------ test/utils.spec.js | 25 -- 9 files changed, 278 insertions(+), 493 deletions(-) create mode 100644 test/broadcaster.spec.js rename test/{options.spec.js => configuration.spec.js} (57%) create mode 100644 test/kompletr.spec.js delete mode 100644 test/kompletr.test.js delete mode 100644 test/utils.spec.js diff --git a/src/js/animation.js b/src/js/animation.js index 47c4200..60c145c 100644 --- a/src/js/animation.js +++ b/src/js/animation.js @@ -93,7 +93,6 @@ export class Animation { */ static slideDown(element, duration = 500) { element.style.removeProperty('display'); - console.log(element) let display = window.getComputedStyle(element).display; if (display === 'none') display = 'block'; element.style.display = display; diff --git a/src/js/dom.js b/src/js/dom.js index ae48b33..1d180c0 100644 --- a/src/js/dom.js +++ b/src/js/dom.js @@ -1,9 +1,24 @@ import { event } from './enums.js'; -/** - * @description - */ export class DOM { + /** + * @description Identifiers for the DOM elements + */ + _identifiers = { + results: 'kpl-result', + }; + + /** + * @description Classes for the DOM elements + */ + _classes = { + main: 'kompletr', + input: 'input--search', + results: 'form--search__result', + result: 'item--result', + data: 'item--data', + focus: 'focus', + }; /** * @description Body tag @@ -28,8 +43,8 @@ export class DOM { } set input(value) { - if (input instanceof HTMLInputElement === false) { - throw new Error(`input should be an HTMLInputElement instance: ${input} given.`); + if (value instanceof HTMLInputElement === false) { + throw new Error(`input should be an HTMLInputElement instance: ${value} given.`); } this._input = value; } @@ -60,23 +75,33 @@ export class DOM { this._result = value; } + /** + * @description Broadcaster instance + */ _broadcaster = null; - // TODO: do better with hardcoded theme and classes - // TODO: do bindings out of the constructor + /** + * Represents a Kompletr DOM container. + * + * @param {string|HTMLInputElement} input - The input element or its ID. + * @param {object} broadcaster - The broadcaster object. + * @param {object} [options] - The options for the DOM object. + * @param {string} [options.theme='light'] - The theme for the DOM object. + * + * @returns {void} + */ constructor(input, broadcaster, options = { theme: 'light' }) { - this._body = document.getElementsByTagName('body')[0]; + this._broadcaster = broadcaster; + + this.body = document.getElementsByTagName('body')[0]; - this._input = input instanceof HTMLInputElement ? input : document.getElementById(input); - this._input.setAttribute('class', `${this._input.getAttribute('class')} input--search`); + this.input = input instanceof HTMLInputElement ? input : document.getElementById(input); + this.input.setAttribute('class', `${this._input.getAttribute('class')} ${this._classes.input}`); - this._result = this.build('div', [ { id: 'kpl-result' }, { class: 'form--search__result' } ]); - - this._input.parentElement.setAttribute('class', `${this._input.parentElement.getAttribute('class')} kompletr ${options.theme}`); - this._input.parentElement.appendChild(this._result); + this.result = this.build('div', [ { id: this._identifiers.results }, { class: this._classes.results } ]); - - this._broadcaster = broadcaster; + this.input.parentElement.setAttribute('class', `${this._input.parentElement.getAttribute('class')} ${this._classes.main} ${options.theme}`); + this.input.parentElement.appendChild(this._result); } /** @@ -110,13 +135,13 @@ export class DOM { switch (action) { case 'add': this.focused = this.result.children[pointer]; - this.result.children[pointer].className += ' focus'; + this.result.children[pointer].className += ` ${this._classes.focus}`; break; case 'remove': this.focused = null; Array.from(this.result.children).forEach(result => { ((result) => { - result.className = 'item--result'; + result.className = this._classes.result; })(result) }); break; @@ -134,15 +159,15 @@ export class DOM { if(data && data.length) { html = data .reduce((html, current) => { - html += `
`; + html += `
`; switch (typeof current.data) { case 'string': - html += `${current.data}`; + html += `${current.data}`; break; case 'object': let properties = Array.isArray(fieldsToDisplay) && fieldsToDisplay.length ? fieldsToDisplay: Object.keys(current.data); for(let j = 0; j < properties.length; j++) { - html += `${current.data[properties[j]]}`; + html += `${current.data[properties[j]]}`; } break; } @@ -151,7 +176,7 @@ export class DOM { }, ''); } else { - html = '
Not found
'; + html = `
Not found
`; } this.result.innerHTML = html; diff --git a/test/broadcaster.spec.js b/test/broadcaster.spec.js new file mode 100644 index 0000000..617aeed --- /dev/null +++ b/test/broadcaster.spec.js @@ -0,0 +1,45 @@ +import { jest } from '@jest/globals'; + +import { Broadcaster } from '../src/js/broadcaster.js'; +import { event } from '../src/js/enums.js'; + +describe('Broadcaster', () => { + let instance; + + beforeEach(() => { + instance = new Broadcaster(); + }); + + it('should construct properly', () => { + expect(instance).toBeInstanceOf(Broadcaster); + }); + + it('should subscribe to an event', () => { + const handler = jest.fn(); + instance.subscribe(event.error, handler); + expect(instance.subscribers).toEqual([{ type: event.error, handler }]); + }); + + it('should throw an error when subscribing to an invalid event', () => { + const handler = jest.fn(); + expect(() => instance.subscribe('invalid', handler)).toThrowError(); + }); + + it('should listen to an event', () => { + const element = { addEventListener: jest.fn() }; + const handler = jest.fn(); + instance.listen(element, event.error, handler); + expect(element.addEventListener).toHaveBeenCalledWith(event.error, handler); + }); + + it('should trigger an event', () => { + const handler = jest.fn(); + instance.subscribe(event.error, handler); + instance.trigger(event.error, { message: 'Test error' }); + expect(handler).toHaveBeenCalledWith({ message: 'Test error' }); + }); + + it('should throw an error when triggering an invalid event', () => { + expect(() => instance.trigger('invalid')).toThrowError(); + }); +}); \ No newline at end of file diff --git a/test/cache.spec.js b/test/cache.spec.js index f75a26e..59fc621 100644 --- a/test/cache.spec.js +++ b/test/cache.spec.js @@ -1,11 +1,13 @@ -import { describe, jest } from '@jest/globals'; +import { jest } from '@jest/globals'; import { Cache } from '../src/js/cache.js'; describe('Cache', () => { let cache; - beforeEach(() => { - cache = new Cache(1000, 'test.cache'); + const mockBroadcaster = { + trigger: jest.fn(), + }; + cache = new Cache(mockBroadcaster, 1000, 'test.cache'); window = Object.create(window); window.caches = {}; window.caches.open = jest.fn().mockResolvedValue({ @@ -53,4 +55,5 @@ describe('Cache', () => { expect(await cache.isValid('test')).toBe(true); }); }); -}); \ No newline at end of file +}); + diff --git a/test/options.spec.js b/test/configuration.spec.js similarity index 57% rename from test/options.spec.js rename to test/configuration.spec.js index 5662008..87ddfc0 100644 --- a/test/options.spec.js +++ b/test/configuration.spec.js @@ -1,11 +1,10 @@ -import { Options } from '../src/js/options.js'; +import { Configuration } from '../src/js/configuration.js'; -describe('Options', () => { - let options; +describe('Configuration', () => { + let configuration; beforeEach(() => { - - options = new Options({ + configuration = new Configuration({ theme: 'light', animationType: 'fadeIn', animationDuration: 500, @@ -20,45 +19,45 @@ describe('Options', () => { }); it('defines getters and setters for all properties', () => { - expect(options.theme).toBeDefined(); - expect(options.animationType).toBeDefined(); - expect(options.animationDuration).toBeDefined(); - expect(options.multiple).toBeDefined(); - expect(options.fieldsToDisplay).toBeDefined(); - expect(options.maxResults).toBeDefined(); - expect(options.startQueriyngFromChar).toBeDefined(); - expect(options.propToMapAsValue).toBeDefined(); - expect(options.filterOn).toBeDefined(); - expect(options.cache).toBeDefined(); + expect(configuration.theme).toBeDefined(); + expect(configuration.animationType).toBeDefined(); + expect(configuration.animationDuration).toBeDefined(); + expect(configuration.multiple).toBeDefined(); + expect(configuration.fieldsToDisplay).toBeDefined(); + expect(configuration.maxResults).toBeDefined(); + expect(configuration.startQueriyngFromChar).toBeDefined(); + expect(configuration.propToMapAsValue).toBeDefined(); + expect(configuration.filterOn).toBeDefined(); + expect(configuration.cache).toBeDefined(); }); it('throws error when setting invalid animationType', () => { expect(() => { - options.animationType = 'invalid'; + configuration.animationType = 'invalid'; }).toThrowError(new Error('animation.type should be one of fadeIn,slideDown')); }); it('throws error when setting non-integer animationDuration', () => { expect(() => { - options.animationDuration = 'not a number'; + configuration.animationDuration = 'not a number'; }).toThrowError(new Error('animation.duration should be an integer')); }); it('throws error when setting invalid theme', () => { expect(() => { - options.theme = 'invalid'; + configuration.theme = 'invalid'; }).toThrowError(new Error('theme should be one of light,dark, invalid given')); }); it('throws error when setting invalid filterOn', () => { expect(() => { - options.filterOn = 'invalid'; + configuration.filterOn = 'invalid'; }).toThrowError(new Error('filterOn should be one of prefix,expression, invalid given')); }); it('throws error when setting non-integer cache', () => { expect(() => { - options.cache = 'not a number'; + configuration.cache = 'not a number'; }).toThrowError(new Error('cache should be an integer')); }); }); diff --git a/test/dom.spec.js b/test/dom.spec.js index c677fca..f102fef 100644 --- a/test/dom.spec.js +++ b/test/dom.spec.js @@ -1,44 +1,62 @@ +const dom = new JSDOM(''); + +global.window = dom.window; +global.document = window.document; +global.document.body.innerHTML = ''; + +import { jest } from '@jest/globals'; import { JSDOM } from 'jsdom'; import { DOM } from '../src/js/dom.js'; -describe('DOM class', () => { +describe('DOM', () => { + let dom; + let broadcaster = { + trigger: jest.fn() + }; + beforeEach(() => { - const dom = new JSDOM(); - global.document = dom.window.document; + dom = new DOM('input', broadcaster) }); - test('constructor should initialize properties', () => { - const inputElement = document.createElement('input'); - inputElement.id = 'test'; - document.body.appendChild(inputElement); - - const dom = new DOM('test', { theme: 'dark' }); - - expect(dom.body).toBe(document.body); - expect(dom.input).toBe(inputElement); - expect(dom.focused).toBe(null); - expect(dom.result.id).toBe('kpl-result'); - expect(dom.result.className).toBe('form--search__result'); - expect(inputElement.parentElement.className).toContain('kompletr dark'); + test('constructor', () => { + expect(dom._broadcaster).toBe(broadcaster); + expect(dom._body).toBe(document.body); + expect(dom._input).toBeInstanceOf(HTMLInputElement); + expect(dom._result).toBeInstanceOf(HTMLElement); }); - test('getter/setter methods should get and set properties', () => { - const dom = new DOM('test'); - - const newBody = document.createElement('body'); - dom.body = newBody; - expect(dom.body).toBe(newBody); + it('defines getters and setters for all properties', () => { + expect(dom.body).toBeDefined(); + expect(dom.result).toBeDefined(); + expect(dom.input).toBeDefined(); + expect(dom.focused).toBeDefined(); + }); - const newInput = document.createElement('input'); - dom.input = newInput; - expect(dom.input).toBe(newInput); + test('build', () => { + const element = dom.build('div', [{ id: 'test' }, { class: 'test' }]); + expect(element).toBeInstanceOf(HTMLElement); + expect(element.id).toBe('test'); + expect(element.className).toBe('test'); + }); - const newFocused = document.createElement('div'); - dom.focused = newFocused; - expect(dom.focused).toBe(newFocused); + test('focus', () => { + dom._result.appendChild(document.createElement('div')); + dom.focus(0, 'add'); + expect(dom._focused).toBeInstanceOf(HTMLElement); + expect(dom._focused.className).toContain('focus'); + dom.focus(0, 'remove'); + expect(dom._focused).toBeNull(); + expect(dom._result.firstChild.className).not.toContain('focus'); + }); - const newResult = document.createElement('div'); - dom.result = newResult; - expect(dom.result).toBe(newResult); + test('buildResults', () => { + const data = [{ idx: '1', data: 'test' }]; + dom.buildResults(data); + expect(dom._result.firstChild).toBeInstanceOf(HTMLElement); + expect(dom._result.firstChild.id).toBe('1'); + expect(dom._result.firstChild.className).toBe('item--result'); + expect(dom._result.firstChild.firstChild.className).toBe('item--data'); + expect(dom._result.firstChild.firstChild.textContent).toBe('test'); + expect(broadcaster.trigger).toHaveBeenCalledWith('kompletr.dom.done'); }); -}); +}); \ No newline at end of file diff --git a/test/kompletr.spec.js b/test/kompletr.spec.js new file mode 100644 index 0000000..ff5fe59 --- /dev/null +++ b/test/kompletr.spec.js @@ -0,0 +1,110 @@ +import { jest } from '@jest/globals'; + +import Kompletr from '../src/js/kompletr.js'; + +describe('Kompletr', () => { + let instance; + let mockBroadcaster; + let mockDom; + let mockCache; + let mockCallbacks; + + // Mock with real mocks better than copilot hé hé + beforeEach(() => { + mockBroadcaster = { + subscribe: jest.fn(), + listen: jest.fn(), + trigger: jest.fn(), + }; + + mockDom = { + input: { value: 'test' }, + body: {}, + result: { children: [] }, + buildResults: jest.fn(), + focus: jest.fn(), + }; + + mockCache = { + isValid: jest.fn().mockResolvedValue(false), + get: jest.fn(), + set: jest.fn(), + }; + + mockCallbacks = { + onKeyup: jest.fn(), + onSelect: jest.fn(), + onError: jest.fn(), + }; + + instance = new Kompletr({ + configuration: {}, + properties: {}, + dom: mockDom, + cache: mockCache, + broadcaster: mockBroadcaster, + ...mockCallbacks, + }); + }); + + test('constructor', () => { + expect(instance.broadcaster).toBe(mockBroadcaster); + expect(instance.dom).toBe(mockDom); + expect(mockBroadcaster.subscribe).toHaveBeenCalledTimes(4); + expect(mockBroadcaster.listen).toHaveBeenCalledTimes(2); + }); + + test('closeTheShop', () => { + const mockEvent = { srcElement: {} }; + instance.closeTheShop(mockEvent); + expect(mockDom.result).toBeUndefined(); + }); + + test('resetPointer', () => { + instance.props.pointer = 5; + instance.resetPointer(); + expect(instance.props.pointer).toBe(-1); + }); + + test('error', () => { + const mockError = new Error('Test error'); + console.error = jest.fn(); + instance.error(mockError); + expect(console.error).toHaveBeenCalledWith(`[kompletr] An error has occured -> ${mockError.stack}`); + expect(mockCallbacks.onError).toHaveBeenCalledWith(mockError); + }); + + test('showResults', async () => { + const mockData = ['test1', 'test2']; + await instance.showResults({ from: 'test', data: mockData }); + expect(mockDom.buildResults).toHaveBeenCalled(); + }); + + test('bindResults', () => { + instance.bindResults(); + expect(mockBroadcaster.listen).toHaveBeenCalledTimes(2); + }); + + test('suggest', () => { + const mockEvent = { keyCode: 13 }; + instance.suggest(mockEvent); + expect(mockCallbacks.onSelect).toHaveBeenCalled(); + }); + + test('hydrate', async () => { + await instance.hydrate('test'); + expect(mockBroadcaster.trigger).toHaveBeenCalled(); + }); + + test('navigate', () => { + const mockEvent = { keyCode: 38 }; + instance.navigate(mockEvent); + expect(mockDom.focus).toHaveBeenCalled(); + }); + + test('select', () => { + instance.props.data = ['test1', 'test2']; + instance.select(1); + expect(mockCallbacks.onSelect).toHaveBeenCalledWith('test2'); + }); +}); \ No newline at end of file diff --git a/test/kompletr.test.js b/test/kompletr.test.js deleted file mode 100644 index 53caa60..0000000 --- a/test/kompletr.test.js +++ /dev/null @@ -1,389 +0,0 @@ -import { jest } from '@jest/globals'; -import { JSDOM } from 'jsdom'; - -import kompletr from '../src/js/kompletr.js'; - -describe.only('kompletr', () => { - let inputElement, parentElement; - - beforeEach(() => { - const dom = new JSDOM(); - global.document = dom.window.document; - parentElement = document.createElement('div'); - inputElement = document.createElement('input'); - parentElement.appendChild(inputElement); - document.body.appendChild(parentElement); - }); - - afterEach(() => { - document.body.innerHTML = ''; - }); - - describe.only('::init', () => { - it.only('should initialize kompletr with provided input, data, options, onKeyup, onSelect, and onError', () => { - const data = ['apple', 'banana', 'cherry']; - const options = { startQueriyngFromChar: 3 }; - const onKeyup = jest.fn(); - const onSelect = jest.fn(); - const onError = jest.fn(); - - kompletr.init({ input: inputElement, data, options, onKeyup, onSelect, onError }); - - expect(kompletr.dom.input).toBe(inputElement); - expect(kompletr.props.data).toBe(data); - - expect(kompletr.options).toBe(options); // Mocking the options object - - expect(kompletr.callbacks.onKeyup).toBe(onKeyup); - expect(kompletr.callbacks.onSelect).toBe(onSelect); - expect(kompletr.callbacks.onError).toBe(onError); - }); - - it('should throw an error if input is not provided', () => { - expect(() => { - kompletr.init({ data: ['apple', 'banana'] }); - }).toThrow('Input element is required'); - }); - }); - - describe.skip('::handlers', () => { - beforeEach(() => { - kompletr.dom = { - input: inputElement, - result: document.createElement('div'), - focused: null - }; - kompletr.props = { - data: ['apple', 'banana', 'cherry'], - pointer: -1, - previousValue: '' - }; - kompletr.options = { - startQueriyngFromChar: 3, - maxResults: 5, - propToMapAsValue: 'name', - filterOn: 'prefix' - }; - kompletr.callbacks = { - onKeyup: jest.fn(), - onSelect: jest.fn() - }; - }); - - describe('::hydrate', () => { - it('should call cache.get if cache is active and valid', async () => { - kompletr.cache = { - isActive: jest.fn().mockReturnValue(true), - isValid: jest.fn().mockResolvedValue(true), - get: jest.fn() - }; - - await kompletr.handlers.hydrate('app'); - - expect(kompletr.cache.isActive).toHaveBeenCalled(); - expect(kompletr.cache.isValid).toHaveBeenCalledWith('app'); - expect(kompletr.cache.get).toHaveBeenCalled(); - }); - - it('should call callbacks.onKeyup if it is defined', async () => { - kompletr.callbacks.onKeyup = jest.fn(); - - await kompletr.handlers.hydrate('app'); - - expect(kompletr.callbacks.onKeyup).toHaveBeenCalledWith('app', expect.any(Function)); - }); - - it('should trigger EventManager.event.dataDone if neither cache nor callbacks.onKeyup are defined', async () => { - const triggerMock = jest.spyOn(EventManager, 'trigger'); - - await kompletr.handlers.hydrate('app'); - - expect(triggerMock).toHaveBeenCalledWith(EventManager.event.dataDone, { from: 'local', data: kompletr.props.data }); - }); - - it('should trigger EventManager.event.error if an error occurs', async () => { - const triggerMock = jest.spyOn(EventManager, 'trigger'); - const error = new Error('Something went wrong'); - - kompletr.cache = { - isActive: jest.fn().mockReturnValue(true), - isValid: jest.fn().mockRejectedValue(error) - }; - - await kompletr.handlers.hydrate('app'); - - expect(triggerMock).toHaveBeenCalledWith(EventManager.event.error, error); - }); - }); - - describe('::navigate', () => { - it('should not change pointer if keyCode is not 38 (Up) or 40 (Down)', () => { - kompletr.props.pointer = 0; - - kompletr.handlers.navigate(37); // Left - - expect(kompletr.props.pointer).toBe(0); - }); - - it('should not change pointer if it is out of range', () => { - kompletr.props.pointer = -2; - - kompletr.handlers.navigate(38); // Up - - expect(kompletr.props.pointer).toBe(-2); - - kompletr.props.pointer = 3; - - kompletr.handlers.navigate(40); // Down - - expect(kompletr.props.pointer).toBe(3); - }); - - it('should decrease pointer by 1 if keyCode is 38 (Up)', () => { - kompletr.props.pointer = 2; - - kompletr.handlers.navigate(38); // Up - - expect(kompletr.props.pointer).toBe(1); - }); - - it('should increase pointer by 1 if keyCode is 40 (Down)', () => { - kompletr.props.pointer = 1; - - kompletr.handlers.navigate(40); // Down - - expect(kompletr.props.pointer).toBe(2); - }); - - it('should call kompletr.viewEngine.focus with "remove" and "add"', () => { - kompletr.props.pointer = 1; - kompletr.viewEngine = { - focus: jest.fn() - }; - - kompletr.handlers.navigate(38); // Up - - expect(kompletr.viewEngine.focus).toHaveBeenCalledWith(1, 'remove'); - expect(kompletr.viewEngine.focus).toHaveBeenCalledWith(1, 'add'); - }); - }); - - describe('::select', () => { - it('should set input value to selected item and call callbacks.onSelect', () => { - kompletr.dom.input.value = ''; - kompletr.callbacks.onSelect = jest.fn(); - - kompletr.handlers.select(1); - - expect(kompletr.dom.input.value).toBe('banana'); - expect(kompletr.callbacks.onSelect).toHaveBeenCalledWith('banana'); - }); - - it('should trigger EventManager.event.selectDone', () => { - const triggerMock = jest.spyOn(EventManager, 'trigger'); - - kompletr.handlers.select(1); - - expect(triggerMock).toHaveBeenCalledWith(EventManager.event.selectDone); - }); - }); - }); - - describe.skip('::listeners', () => { - beforeEach(() => { - kompletr.dom = { - input: inputElement, - result: document.createElement('div'), - focused: null - }; - kompletr.props = { - pointer: -1 - }; - kompletr.options = { - animationType: 'fadeIn', - animationDuration: 500 - }; - kompletr.callbacks = { - onSelect: jest.fn() - }; - }); - - describe('::onError', () => { - it('should log the error and call callbacks.onError', () => { - const consoleErrorMock = jest.spyOn(console, 'error'); - const error = new Error('Something went wrong'); - - kompletr.callbacks.onError = jest.fn(); - - kompletr.listeners.onError({ detail: error }); - - expect(consoleErrorMock).toHaveBeenCalledWith('[kompletr] An error has occured -> Something went wrong'); - expect(kompletr.callbacks.onError).toHaveBeenCalledWith(error); - }); - }); - - describe('::onSelectDone', () => { - it('should return early if the event target is the input element', () => { - const animateBackMock = jest.spyOn(Animation, 'animateBack'); - const triggerMock = jest.spyOn(EventManager, 'trigger'); - - const event = { srcElement: inputElement }; - - kompletr.listeners.onSelectDone(event); - - expect(animateBackMock).not.toHaveBeenCalled(); - expect(triggerMock).not.toHaveBeenCalled(); - }); - - it('should call Animation.animateBack and trigger EventManager.event.navigationDone', () => { - const animateBackMock = jest.spyOn(Animation, 'animateBack'); - const triggerMock = jest.spyOn(EventManager, 'trigger'); - - const event = { srcElement: document.createElement('div') }; - - kompletr.listeners.onSelectDone(event); - - expect(animateBackMock).toHaveBeenCalledWith(kompletr.dom.result, kompletr.options.animationType, kompletr.options.animationDuration); - expect(triggerMock).toHaveBeenCalledWith(EventManager.event.navigationDone); - }); - }); - - describe('::onNavigationDone', () => { - it('should reset pointer to -1', () => { - kompletr.props.pointer = 2; - - kompletr.listeners.onNavigationDone(); - - expect(kompletr.props.pointer).toBe(-1); - }); - }); - - describe('::onDataDone', () => { - it('should set kompletr.props.data and trigger EventManager.event.renderDone', () => { - const triggerMock = jest.spyOn(EventManager, 'trigger'); - - const data = ['apple', 'banana', 'cherry']; - - kompletr.listeners.onDataDone({ detail: { data } }); - - expect(kompletr.props.data).toBe(data); - expect(triggerMock).toHaveBeenCalledWith(EventManager.event.renderDone); - }); - - it('should filter data based on kompletr.options.filterOn if callbacks.onKeyup is not defined', () => { - const triggerMock = jest.spyOn(EventManager, 'trigger'); - - kompletr.options.filterOn = 'prefix'; - kompletr.dom.input.value = 'b'; - kompletr.props.data = [ - { name: 'apple' }, - { name: 'banana' }, - { name: 'cherry' } - ]; - - kompletr.listeners.onDataDone({ detail: { data: kompletr.props.data } }); - - expect(kompletr.props.data).toEqual([{ idx: 1, data: { name: 'banana' } }]); - expect(triggerMock).toHaveBeenCalledWith(EventManager.event.renderDone); - }); - - it('should set cache if cache is active and not valid', async () => { - const triggerMock = jest.spyOn(EventManager, 'trigger'); - - kompletr.cache = { - isActive: jest.fn().mockReturnValue(true), - isValid: jest.fn().mockResolvedValue(false), - set: jest.fn() - }; - - kompletr.dom.input.value = 'apple'; - kompletr.props.data = ['apple', 'banana', 'cherry']; - - await kompletr.listeners.onDataDone({ detail: { data: kompletr.props.data } }); - - expect(kompletr.cache.set).toHaveBeenCalledWith({ string: 'apple', data: kompletr.props.data }); - expect(triggerMock).toHaveBeenCalledWith(EventManager.event.renderDone); - }); - }); - - describe('::onKeyup', () => { - it('should return early if input value length is less than kompletr.options.startQueriyngFromChar', () => { - const hydrateMock = jest.spyOn(kompletr.handlers, 'hydrate'); - const triggerMock = jest.spyOn(EventManager, 'trigger'); - - kompletr.dom.input.value = 'ap'; - kompletr.options.startQueriyngFromChar = 3; - - const event = { keyCode: 65 }; // 'A' - - kompletr.listeners.onKeyup(event); - - expect(hydrateMock).not.toHaveBeenCalled(); - expect(triggerMock).not.toHaveBeenCalled(); - }); - - it('should call kompletr.handlers.select if keyCode is 13 (Enter)', () => { - const selectMock = jest.spyOn(kompletr.handlers, 'select'); - - const event = { keyCode: 13 }; // Enter - - kompletr.listeners.onKeyup(event); - - expect(selectMock).toHaveBeenCalledWith(kompletr.dom.focused.id); - }); - - it('should call kompletr.handlers.navigate if keyCode is 38 (Up) or 40 (Down)', () => { - const navigateMock = jest.spyOn(kompletr.handlers, 'navigate'); - - const event1 = { keyCode: 38 }; // Up - const event2 = { keyCode: 40 }; // Down - - kompletr.listeners.onKeyup(event1); - kompletr.listeners.onKeyup(event2); - - expect(navigateMock).toHaveBeenCalledTimes(2); - expect(navigateMock).toHaveBeenCalledWith(38); - expect(navigateMock).toHaveBeenCalledWith(40); - }); - - it('should call kompletr.handlers.hydrate if input value has changed', () => { - const hydrateMock = jest.spyOn(kompletr.handlers, 'hydrate'); - - kompletr.dom.input.value = 'app'; - kompletr.props.previousValue = 'ap'; - - const event = { keyCode: 65 }; // 'A' - - kompletr.listeners.onKeyup(event); - - expect(hydrateMock).toHaveBeenCalledWith('app'); - }); - - it('should trigger EventManager.event.navigationDone', () => { - const triggerMock = jest.spyOn(EventManager, 'trigger'); - - const event = { keyCode: 65 }; // 'A' - - kompletr.listeners.onKeyup(event); - - expect(triggerMock).toHaveBeenCalledWith(EventManager.event.navigationDone); - }); - }); - - describe('::onRenderDone', () => { - it('should call Animation[kompletr.options.animationType] and add click event listeners to result children', () => { - const fadeInMock = jest.spyOn(Animation, 'fadeIn'); - const addEventListenerMock = jest.spyOn(kompletr.dom.result.children[0], 'addEventListener'); - const triggerMock = jest.spyOn(EventManager, 'trigger'); - - kompletr.dom.result.appendChild(document.createElement('div')); - - kompletr.listeners.onRenderDone(); - - expect(fadeInMock).toHaveBeenCalledWith(kompletr.dom.result, kompletr.options.animationDuration); - expect(addEventListenerMock).toHaveBeenCalledWith('click', expect.any(Function)); - expect(triggerMock).toHaveBeenCalledWith(EventManager.event.renderDone); - }); - }); - }); -}); \ No newline at end of file diff --git a/test/utils.spec.js b/test/utils.spec.js deleted file mode 100644 index 141cdd9..0000000 --- a/test/utils.spec.js +++ /dev/null @@ -1,25 +0,0 @@ -import { JSDOM } from 'jsdom'; -import { build } from '../src/js/utils.js'; - -describe('Utils functions', () => { - describe('::build', () => { - beforeEach(() => { - const dom = new JSDOM(); - global.document = dom.window.document; - }); - - test('should create an element with no attributes', () => { - const element = build('div'); - expect(element.tagName).toBe('DIV'); - expect(element.attributes.length).toBe(0); - }); - - test('should create an element with attributes', () => { - const element = build('div', [{ id: 'test' }, { class: 'test-class' }]); - expect(element.tagName).toBe('DIV'); - expect(element.attributes.length).toBe(2); - expect(element.getAttribute('id')).toBe('test'); - expect(element.getAttribute('class')).toBe('test-class'); - }); - }); -}); \ No newline at end of file From b85ac9bf2085cc342d2fef3d457ee7fa1362c0b7 Mon Sep 17 00:00:00 2001 From: Steve Date: Thu, 14 Mar 2024 23:23:02 +0100 Subject: [PATCH 23/48] chore: UT with acceptable coverage --- package.json | 1 + src/js/animation.js | 4 +- src/js/configuration.js | 30 ++-- src/js/dom.js | 5 +- src/js/index.js | 7 +- src/js/kompletr.js | 37 ++-- test/animation.spec.js | 4 +- test/broadcaster.spec.js | 60 ++++--- test/configuration.spec.js | 84 ++++----- test/dom.spec.js | 78 +++++---- test/index.spec.js | 39 +++++ test/kompletr.spec.js | 342 +++++++++++++++++++++++++++++++------ test/properties.spec.js | 59 ++++--- 13 files changed, 530 insertions(+), 220 deletions(-) create mode 100644 test/index.spec.js diff --git a/package.json b/package.json index 663424d..08f230c 100755 --- a/package.json +++ b/package.json @@ -53,6 +53,7 @@ "cypress:open": "cypress open", "cypress:run": "cypress run --browser chrome ./cypress", "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js ./test/**.spec.js", + "teste": "node --experimental-vm-modules node_modules/jest/bin/jest.js ./test/index.spec.js", "dev": "webpack-dashboard -- webpack serve --hot --mode development --config ./webpack.config.js", "prod": "webpack-dashboard -- webpack --mode production --config ./webpack.config.prod.js", "docs:dev": "vitepress dev docs", diff --git a/src/js/animation.js b/src/js/animation.js index 60c145c..c92e8b5 100644 --- a/src/js/animation.js +++ b/src/js/animation.js @@ -17,9 +17,9 @@ export class Animation { * * @todo Manage duration */ - static fadeIn(element, display, duration = 500) { + static fadeIn(element, duration = 500) { element.style.opacity = 0; - element.style.display = display || 'block'; + element.style.display = 'block'; (function fade(){ let value = parseFloat(element.style.opacity); if (!((value += .1) > 1)) { diff --git a/src/js/configuration.js b/src/js/configuration.js index a2133e3..2a58d4b 100644 --- a/src/js/configuration.js +++ b/src/js/configuration.js @@ -46,7 +46,7 @@ export class Configuration { * The character index from which querying should start. * @type {number} */ - _startQueriyngFromChar = 2 + _startQueryingFromChar = 2 /** * Represents the value of a property to be mapped. @@ -149,12 +149,12 @@ export class Configuration { /** * @description Input minimal value length before to fire research */ - get startQueriyngFromChar() { - return this._startQueriyngFromChar; + get startQueryingFromChar() { + return this._startQueryingFromChar; } - set startQueriyngFromChar(value) { - this._startQueriyngFromChar = value; + set startQueryingFromChar(value) { + this._startQueryingFromChar = value; } /** @@ -202,15 +202,15 @@ export class Configuration { if (typeof options !== 'object') { throw new Error('options should be an object'); }; - this._theme = options?.theme || this._theme; - this._animationType = options?.animationType || this._animationType; - this._animationDuration = options?.animationDuration || this._animationDuration; - this._multiple = options?.multiple || this._multiple; - this._fieldsToDisplay = options?.fieldsToDisplay || this._fieldsToDisplay; - this._maxResults = options?.maxResults || this._maxResults; - this._startQueriyngFromChar = options?.startQueriyngFromChar || this._startQueriyngFromChar; - this._propToMapAsValue = options?.propToMapAsValue || this._propToMapAsValue; - this._filterOn = options?.filterOn || this._filterOn; - this._cache = options?.cache || this._cache; + this.theme = options?.theme || this._theme; + this.animationType = options?.animationType || this._animationType; + this.animationDuration = options?.animationDuration || this._animationDuration; + this.multiple = options?.multiple || this._multiple; + this.fieldsToDisplay = options?.fieldsToDisplay || this._fieldsToDisplay; + this.maxResults = options?.maxResults || this._maxResults; + this.startQueryingFromChar = options?.startQueryingFromChar || this._startQueryingFromChar; + this.propToMapAsValue = options?.propToMapAsValue || this._propToMapAsValue; + this.filterOn = options?.filterOn || this._filterOn; + this.cache = options?.cache || this._cache; } } \ No newline at end of file diff --git a/src/js/dom.js b/src/js/dom.js index 1d180c0..ecf39d1 100644 --- a/src/js/dom.js +++ b/src/js/dom.js @@ -132,6 +132,8 @@ export class DOM { throw new Error('action should be one of ["add", "remove]: ' + action + ' given.'); } + + switch (action) { case 'add': this.focused = this.result.children[pointer]; @@ -180,6 +182,7 @@ export class DOM { } this.result.innerHTML = html; - this._broadcaster.trigger(event.domDone); // TODO here or in the handlers ? + + this._broadcaster.trigger(event.domDone, this.result); // TODO: to be validated } } \ No newline at end of file diff --git a/src/js/index.js b/src/js/index.js index cd96e73..0ccdc38 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -9,21 +9,22 @@ import { DOM } from './dom.js'; /** * Initializes the module with the provided data and options. * - * @param {Object} options - The configuration options for the application. + * @param {string|HTMLInputElement} input - The target input as selector or instance. * @param {Object} data - The data used by the application. + * @param {Object} options - The configuration options for the application. * @param {Function} onKeyup - The callback function to be executed on keyup event. * @param {Function} onSelect - The callback function to be executed on select event. * @param {Function} onError - The callback function to be executed on error event. * * @returns {void} */ -const kompletr = function({ data, options, onKeyup, onSelect, onError }) { +const kompletr = function({ input, data, options, onKeyup, onSelect, onError }) { const broadcaster = new Broadcaster(); const configuration = new Configuration(options); const properties = new Properties(data); - const dom = new DOM(this, broadcaster, configuration); + const dom = new DOM(this || input, broadcaster, configuration); // FIXME: broken when this is not an input element (when kompleter is called from a different context) const cache = configuration.cache ? new Cache(broadcaster, configuration.cache) : null; new Kompletr({ configuration, properties, dom, cache, broadcaster, onKeyup, onSelect, onError }); diff --git a/src/js/kompletr.js b/src/js/kompletr.js index 476f8f1..d38aad4 100644 --- a/src/js/kompletr.js +++ b/src/js/kompletr.js @@ -1,6 +1,6 @@ import { Animation } from './animation.js'; -import { event, origin } from './enums.js'; +import { event, origin, searchExpression } from './enums.js'; /** * @summary Kømpletr.js is a library providing features dedicated to autocomplete fields. @@ -10,6 +10,9 @@ import { event, origin } from './enums.js'; * @see https://github.com/steve-lebleu/kompletr */ export default class Kompletr { + /** + * + */ broadcaster = null; /** @@ -45,8 +48,11 @@ export default class Kompletr { this.dom = dom; this.cache = cache; + // animation parameters = this.result, this.configuration.animationDuration + this.broadcaster.subscribe(event.error, this.error); this.broadcaster.subscribe(event.dataDone, this.showResults); + this.broadcaster.subscribe(event.domDone, Animation[this.configuration.animationType]); this.broadcaster.subscribe(event.domDone, this.bindResults); this.broadcaster.subscribe(event.selectDone, this.closeTheShop); @@ -57,7 +63,7 @@ export default class Kompletr { this.callbacks = Object.assign(this.callbacks, { onKeyup, onSelect, onError }); } } catch(e) { - broadcaster.trigger(event.error, e); + broadcaster ? broadcaster.trigger(event.error, e) : console.error(`[kompletr] An error has occured -> ${e.stack}`); } } @@ -79,6 +85,16 @@ export default class Kompletr { this.callbacks.onError && this.callbacks.onError(e); } + filter = (data, pattern) => { + return data.filter((record) => { + const value = typeof record.data === 'string' ? record.data : record.data[this.configuration.propToMapAsValue]; + if (this.configuration.filterOn === searchExpression.prefix) { + return value.toLowerCase().lastIndexOf(pattern.toLowerCase(), 0) === 0; + } + return value.toLowerCase().lastIndexOf(pattern.toLowerCase()) !== -1; + }); + } + /** * @description CustomEvent 'this.request.done' listener * @@ -87,16 +103,10 @@ export default class Kompletr { showResults = async ({ from, data }) => { this.props.data = data; - data = this.props.data.map((record, idx) => ({ idx, data: record }) ); // TODO: Check if we can avoid this step + data = this.props.data.map((record, idx) => ({ idx, data: record }) ); // TODO: Check if we can avoid this shit if (!this.callbacks.onKeyup) { - data = data.filter((record) => { - const value = typeof record.data === 'string' ? record.data : record.data[this.configuration.propToMapAsValue]; - if (this.configuration.filterOn === 'prefix') { - return value.toLowerCase().lastIndexOf(this.dom.input.value.toLowerCase(), 0) === 0; - } - return value.toLowerCase().lastIndexOf(this.dom.input.value.toLowerCase()) !== -1; - }); + data = this.filter(data, this.dom.input.value); } if (this.cache && from !== origin.cache) { @@ -110,7 +120,6 @@ export default class Kompletr { * @description CustomEvent 'kompletr.dom.done' listener */ bindResults = () => { - Animation[this.configuration.animationType](this.dom.result, this.configuration.animationDuration); // TODO this is not really bindResult if(this.dom.result?.children?.length) { for(let i = 0; i < this.dom.result.children.length; i++) { ((i) => { @@ -127,7 +136,7 @@ export default class Kompletr { * @description 'input.keyup' listener */ suggest = (e) => { - if (this.dom.input.value.length < this.configuration.startQueriyngFromChar) { + if (this.dom.input.value.length < this.configuration.startQueryingFromChar) { return; } @@ -202,7 +211,7 @@ export default class Kompletr { this.props.pointer++; } - this.dom.focus(this.props.pointer, 'remove'); + this.dom.focus(this.props.pointer, 'remove'); // TODO: check if we can do better like in one step this.dom.focus(this.props.pointer, 'add'); } @@ -217,7 +226,7 @@ export default class Kompletr { */ select = (idx = 0) => { this.dom.input.value = typeof this.props.data[idx] === 'object' ? this.props.data[idx][this.configuration.propToMapAsValue] : this.props.data[idx]; - this.callbacks.onSelect(this.props.data[idx]); + this.callbacks.onSelect && this.callbacks.onSelect(this.props.data[idx]); this.broadcaster.trigger(event.selectDone); } }; \ No newline at end of file diff --git a/test/animation.spec.js b/test/animation.spec.js index 633abde..d588c53 100644 --- a/test/animation.spec.js +++ b/test/animation.spec.js @@ -34,8 +34,8 @@ describe('Animation', () => { }, 500); }); - it.skip('slideDown changes the style of the element', () => { - Animation.slideDown(element); + it('slideDown changes the style of the element', () => { + Animation.slideDown(document.createElement('div')); setTimeout(() => { expect(element.style.height).not.toBe('0px'); expect(element.style.display).toBe('block'); diff --git a/test/broadcaster.spec.js b/test/broadcaster.spec.js index 617aeed..f2b6478 100644 --- a/test/broadcaster.spec.js +++ b/test/broadcaster.spec.js @@ -1,4 +1,4 @@ -import { jest } from '@jest/globals'; +import { describe, jest } from '@jest/globals'; import { Broadcaster } from '../src/js/broadcaster.js'; import { event } from '../src/js/enums.js'; @@ -10,36 +10,44 @@ describe('Broadcaster', () => { instance = new Broadcaster(); }); - it('should construct properly', () => { - expect(instance).toBeInstanceOf(Broadcaster); + describe('::constructor', () => { + it('should construct properly', () => { + expect(instance).toBeInstanceOf(Broadcaster); + }); }); - it('should subscribe to an event', () => { - const handler = jest.fn(); - instance.subscribe(event.error, handler); - expect(instance.subscribers).toEqual([{ type: event.error, handler }]); + describe('::subscribe', () => { + it('should subscribe to an event', () => { + const handler = jest.fn(); + instance.subscribe(event.error, handler); + expect(instance.subscribers).toEqual([{ type: event.error, handler }]); + }); + + it('should throw an error when subscribing to an invalid event', () => { + const handler = jest.fn(); + expect(() => instance.subscribe('invalid', handler)).toThrowError(); + }); }); - it('should throw an error when subscribing to an invalid event', () => { - const handler = jest.fn(); - expect(() => instance.subscribe('invalid', handler)).toThrowError(); + describe('::listen', () => { + it('should listen to an event', () => { + const element = { addEventListener: jest.fn() }; + const handler = jest.fn(); + instance.listen(element, event.error, handler); + expect(element.addEventListener).toHaveBeenCalledWith(event.error, handler); + }); }); - it('should listen to an event', () => { - const element = { addEventListener: jest.fn() }; - const handler = jest.fn(); - instance.listen(element, event.error, handler); - expect(element.addEventListener).toHaveBeenCalledWith(event.error, handler); - }); - - it('should trigger an event', () => { - const handler = jest.fn(); - instance.subscribe(event.error, handler); - instance.trigger(event.error, { message: 'Test error' }); - expect(handler).toHaveBeenCalledWith({ message: 'Test error' }); - }); - - it('should throw an error when triggering an invalid event', () => { - expect(() => instance.trigger('invalid')).toThrowError(); + describe('::trigger', () => { + it('should trigger an event', () => { + const handler = jest.fn(); + instance.subscribe(event.error, handler); + instance.trigger(event.error, { message: 'Test error' }); + expect(handler).toHaveBeenCalledWith({ message: 'Test error' }); + }); + + it('should throw an error when triggering an invalid event', () => { + expect(() => instance.trigger('invalid')).toThrowError(); + }); }); }); \ No newline at end of file diff --git a/test/configuration.spec.js b/test/configuration.spec.js index 87ddfc0..f36eea5 100644 --- a/test/configuration.spec.js +++ b/test/configuration.spec.js @@ -18,46 +18,48 @@ describe('Configuration', () => { }); }); - it('defines getters and setters for all properties', () => { - expect(configuration.theme).toBeDefined(); - expect(configuration.animationType).toBeDefined(); - expect(configuration.animationDuration).toBeDefined(); - expect(configuration.multiple).toBeDefined(); - expect(configuration.fieldsToDisplay).toBeDefined(); - expect(configuration.maxResults).toBeDefined(); - expect(configuration.startQueriyngFromChar).toBeDefined(); - expect(configuration.propToMapAsValue).toBeDefined(); - expect(configuration.filterOn).toBeDefined(); - expect(configuration.cache).toBeDefined(); - }); - - it('throws error when setting invalid animationType', () => { - expect(() => { - configuration.animationType = 'invalid'; - }).toThrowError(new Error('animation.type should be one of fadeIn,slideDown')); - }); - - it('throws error when setting non-integer animationDuration', () => { - expect(() => { - configuration.animationDuration = 'not a number'; - }).toThrowError(new Error('animation.duration should be an integer')); - }); - - it('throws error when setting invalid theme', () => { - expect(() => { - configuration.theme = 'invalid'; - }).toThrowError(new Error('theme should be one of light,dark, invalid given')); - }); - - it('throws error when setting invalid filterOn', () => { - expect(() => { - configuration.filterOn = 'invalid'; - }).toThrowError(new Error('filterOn should be one of prefix,expression, invalid given')); - }); - - it('throws error when setting non-integer cache', () => { - expect(() => { - configuration.cache = 'not a number'; - }).toThrowError(new Error('cache should be an integer')); + describe('::constructor', () => { + it('defines getters and setters for all properties', () => { + expect(configuration.theme).toBeDefined(); + expect(configuration.animationType).toBeDefined(); + expect(configuration.animationDuration).toBeDefined(); + expect(configuration.multiple).toBeDefined(); + expect(configuration.fieldsToDisplay).toBeDefined(); + expect(configuration.maxResults).toBeDefined(); + expect(configuration.startQueryingFromChar).toBeDefined(); + expect(configuration.propToMapAsValue).toBeDefined(); + expect(configuration.filterOn).toBeDefined(); + expect(configuration.cache).toBeDefined(); + }); + + it('throws error when setting invalid animationType', () => { + expect(() => { + configuration.animationType = 'invalid'; + }).toThrowError(new Error('animation.type should be one of fadeIn,slideDown')); + }); + + it('throws error when setting non-integer animationDuration', () => { + expect(() => { + configuration.animationDuration = 'not a number'; + }).toThrowError(new Error('animation.duration should be an integer')); + }); + + it('throws error when setting invalid theme', () => { + expect(() => { + configuration.theme = 'invalid'; + }).toThrowError(new Error('theme should be one of light,dark, invalid given')); + }); + + it('throws error when setting invalid filterOn', () => { + expect(() => { + configuration.filterOn = 'invalid'; + }).toThrowError(new Error('filterOn should be one of prefix,expression, invalid given')); + }); + + it('throws error when setting non-integer cache', () => { + expect(() => { + configuration.cache = 'not a number'; + }).toThrowError(new Error('cache should be an integer')); + }); }); }); diff --git a/test/dom.spec.js b/test/dom.spec.js index f102fef..304a99f 100644 --- a/test/dom.spec.js +++ b/test/dom.spec.js @@ -4,7 +4,7 @@ global.window = dom.window; global.document = window.document; global.document.body.innerHTML = ''; -import { jest } from '@jest/globals'; +import { describe, jest } from '@jest/globals'; import { JSDOM } from 'jsdom'; import { DOM } from '../src/js/dom.js'; @@ -18,45 +18,53 @@ describe('DOM', () => { dom = new DOM('input', broadcaster) }); - test('constructor', () => { - expect(dom._broadcaster).toBe(broadcaster); - expect(dom._body).toBe(document.body); - expect(dom._input).toBeInstanceOf(HTMLInputElement); - expect(dom._result).toBeInstanceOf(HTMLElement); + describe('::constructor', () => { + it('should instanciate correctly the right properties', () => { + expect(dom._broadcaster).toBe(broadcaster); + expect(dom.body).toBe(document.body); + expect(dom.input).toBeInstanceOf(HTMLInputElement); + expect(dom.result).toBeInstanceOf(HTMLElement); + }); + + it('should defines getters and setters for all properties', () => { + expect(dom.body).toBeDefined(); + expect(dom.result).toBeDefined(); + expect(dom.input).toBeDefined(); + expect(dom.focused).toBeDefined(); + }); }); - it('defines getters and setters for all properties', () => { - expect(dom.body).toBeDefined(); - expect(dom.result).toBeDefined(); - expect(dom.input).toBeDefined(); - expect(dom.focused).toBeDefined(); + describe('::build', () => { + it('should build element with right attributes', () => { + const element = dom.build('div', [{ id: 'test' }, { class: 'test' }]); + expect(element).toBeInstanceOf(HTMLElement); + expect(element.id).toBe('test'); + expect(element.className).toBe('test'); + }); }); - test('build', () => { - const element = dom.build('div', [{ id: 'test' }, { class: 'test' }]); - expect(element).toBeInstanceOf(HTMLElement); - expect(element.id).toBe('test'); - expect(element.className).toBe('test'); + describe('::focus', () => { + it('should manage adding and removing focus', () => { + dom.result.appendChild(document.createElement('div')); + dom.focus(0, 'add'); + expect(dom.focused).toBeInstanceOf(HTMLElement); + expect(dom.focused.className).toContain('focus'); + dom.focus(0, 'remove'); + expect(dom.focused).toBeNull(); + expect(dom.result.firstChild.className).not.toContain('focus'); + }); }); - test('focus', () => { - dom._result.appendChild(document.createElement('div')); - dom.focus(0, 'add'); - expect(dom._focused).toBeInstanceOf(HTMLElement); - expect(dom._focused.className).toContain('focus'); - dom.focus(0, 'remove'); - expect(dom._focused).toBeNull(); - expect(dom._result.firstChild.className).not.toContain('focus'); - }); - - test('buildResults', () => { - const data = [{ idx: '1', data: 'test' }]; - dom.buildResults(data); - expect(dom._result.firstChild).toBeInstanceOf(HTMLElement); - expect(dom._result.firstChild.id).toBe('1'); - expect(dom._result.firstChild.className).toBe('item--result'); - expect(dom._result.firstChild.firstChild.className).toBe('item--data'); - expect(dom._result.firstChild.firstChild.textContent).toBe('test'); - expect(broadcaster.trigger).toHaveBeenCalledWith('kompletr.dom.done'); + describe('::buildResults', () => { + it('should build well formed DOM with suggestions results', () => { + const data = [{ idx: '1', data: 'test' }]; + dom.buildResults(data); + expect(dom.result.firstChild).toBeInstanceOf(HTMLElement); + expect(dom.result.firstChild.id).toBe('1'); + expect(dom.result.firstChild.className).toBe('item--result'); + expect(dom.result.firstChild.firstChild.className).toBe('item--data'); + expect(dom.result.firstChild.firstChild.textContent).toBe('test'); + expect(broadcaster.trigger).toHaveBeenCalled(); + }); }); }); \ No newline at end of file diff --git a/test/index.spec.js b/test/index.spec.js new file mode 100644 index 0000000..da71857 --- /dev/null +++ b/test/index.spec.js @@ -0,0 +1,39 @@ +import { JSDOM } from 'jsdom'; + +const dom = new JSDOM(''); + +global.window = dom.window; +global.document = window.document; +global.document.body.innerHTML = '
'; + +import { afterEach, expect, jest } from '@jest/globals'; +import kompletr from '../src/js/index.js'; + +describe('kompletr', () => { + let mockData; + let mockOptions; + let mockCallbacks; + + beforeEach(() => { + mockData = {}; + mockOptions = { cache: 0 }; + mockCallbacks = { + onKeyup: jest.fn(), + onSelect: jest.fn(), + onError: jest.fn(), + }; + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + it('should initialize all components correctly', () => { + kompletr({ input: 'input', data: mockData, options: mockOptions, ...mockCallbacks }); + expect(kompletr).toBeInstanceOf(Function); + }); + + it('should put kompletr as prototype of input element', () => { + expect(window.HTMLInputElement.prototype.kompletr).toBeDefined(); + }); +}); \ No newline at end of file diff --git a/test/kompletr.spec.js b/test/kompletr.spec.js index ff5fe59..ddf7d79 100644 --- a/test/kompletr.spec.js +++ b/test/kompletr.spec.js @@ -1,5 +1,13 @@ -import { jest } from '@jest/globals'; +import { describe, expect, it, jest } from '@jest/globals'; +import { JSDOM } from 'jsdom'; +const dom = new JSDOM('
'); + +global.window = dom.window; +global.document = window.document; +global.document.body.innerHTML = '
'; + +import { DOM } from '../src/js/dom.js'; import Kompletr from '../src/js/kompletr.js'; describe('Kompletr', () => { @@ -9,21 +17,30 @@ describe('Kompletr', () => { let mockCache; let mockCallbacks; - // Mock with real mocks better than copilot hé hé beforeEach(() => { + mockBroadcaster = { - subscribe: jest.fn(), - listen: jest.fn(), - trigger: jest.fn(), + subscribers: [], + subscribe: jest.fn().mockImplementation(function(callback){ + this.subscribers.push(jest.fn()); + }), + listen: jest.fn().mockImplementation((element, type, handler) => { + element.addEventListener(type, handler); + }), + trigger: jest.fn().mockImplementation(function(type, detail){ + this.subscribers + .filter(subscriber => subscriber.type === type) + .forEach(subscriber => subscriber.handler(detail)); + }) }; - mockDom = { - input: { value: 'test' }, - body: {}, - result: { children: [] }, - buildResults: jest.fn(), - focus: jest.fn(), - }; + let dom = new DOM('input', mockBroadcaster); + + dom.build = jest.fn(); + dom.buildResults = jest.fn(); + dom.focus = jest.fn(); + + mockDom = dom; mockCache = { isValid: jest.fn().mockResolvedValue(false), @@ -47,64 +64,283 @@ describe('Kompletr', () => { }); }); - test('constructor', () => { - expect(instance.broadcaster).toBe(mockBroadcaster); - expect(instance.dom).toBe(mockDom); - expect(mockBroadcaster.subscribe).toHaveBeenCalledTimes(4); - expect(mockBroadcaster.listen).toHaveBeenCalledTimes(2); + afterEach(() => { + jest.clearAllMocks(); }); - test('closeTheShop', () => { - const mockEvent = { srcElement: {} }; - instance.closeTheShop(mockEvent); - expect(mockDom.result).toBeUndefined(); + describe('::constructor', () => { + it('should construct the Kompletr instance with the right dependencies', () => { + expect(instance.broadcaster).toBe(mockBroadcaster); + expect(instance.dom).toBe(mockDom); + expect(mockBroadcaster.subscribe).toHaveBeenCalledTimes(5); + expect(mockBroadcaster.listen).toHaveBeenCalledTimes(2); + }); + + xit('should broadcast the error if something bad happens during instanciation', () => { + console.error = jest.fn().mockImplementation((message) => {}); + mockBroadcaster.subscribe.mockRejectedValue(new Error('Test error')); + new Kompletr({ broadcaster: mockBroadcaster }); + expect(instance.broadcaster.trigger).toHaveBeenCalledWith('kompletr.error', new Error('Test error')); + }); + + it('should log error if something bad happens during instanciation and the broadcaster is not available', () => { + console.error = jest.fn().mockImplementation((message) => {}); + new Kompletr({}); + expect(console.error).toHaveBeenCalled(); + }); }); - test('resetPointer', () => { - instance.props.pointer = 5; - instance.resetPointer(); - expect(instance.props.pointer).toBe(-1); + describe('::closeTheShop', () => { + it('should do nothing when the event is fired by focusing the input', () => { + const mockEvent = { srcElement: instance.dom.input }; + const spy = jest.spyOn(instance, 'resetPointer'); + instance.closeTheShop(mockEvent); + expect(spy).not.toHaveBeenCalled(); + }); + + it('should reset the pointer value to -1 by calling resetPointer', () => { + const mockEvent = { srcElement: {} }; + const spy = jest.spyOn(instance, 'resetPointer'); + instance.closeTheShop(mockEvent); + expect(spy).toHaveBeenCalled(); + }); }); - test('error', () => { - const mockError = new Error('Test error'); - console.error = jest.fn(); - instance.error(mockError); - expect(console.error).toHaveBeenCalledWith(`[kompletr] An error has occured -> ${mockError.stack}`); - expect(mockCallbacks.onError).toHaveBeenCalledWith(mockError); + describe('::resetPointer', () => { + it('should reset the pointer value to -1', () => { + instance.props.pointer = 5; + instance.resetPointer(); + expect(instance.props.pointer).toBe(-1); + }); }); - test('showResults', async () => { - const mockData = ['test1', 'test2']; - await instance.showResults({ from: 'test', data: mockData }); - expect(mockDom.buildResults).toHaveBeenCalled(); + describe('::error', () => { + it('should log error in the console and call error callback', () => { + const mockError = new Error('Test error'); + console.error = jest.fn(); + instance.error(mockError); + expect(console.error).toHaveBeenCalledWith(`[kompletr] An error has occured -> ${mockError.stack}`); + expect(mockCallbacks.onError).toHaveBeenCalledWith(mockError); + }); }); - test('bindResults', () => { - instance.bindResults(); - expect(mockBroadcaster.listen).toHaveBeenCalledTimes(2); + describe('::filter', () => { + it('should filter on prefix and returns 3/7 entries', () => { + const mockData = ['test1', 'test2', 'test3', 'fest1', 'fest2', 'fest3', 'falsy'].map((record, idx) => ({ idx, data: record }) ); // The map is to simulate an array of objects, like done in the showResults method + instance.configuration.filterOn = 'prefix'; + const result = instance.filter(mockData, 'test'); + expect(result.length).toBe(3); + }); + + it('should filter on expression and returns 6/7 entries', () => { + const mockData = ['test1', 'test2', 'test3', 'fest1', 'fest2', 'fest3', 'falsy'].map((record, idx) => ({ idx, data: record }) ); // The map is to simulate an array of objects, like done in the showResults method + instance.configuration.filterOn = 'expression'; + const result = instance.filter(mockData, 'est'); + expect(result.length).toBe(6); + }); }); - test('suggest', () => { - const mockEvent = { keyCode: 13 }; - instance.suggest(mockEvent); - expect(mockCallbacks.onSelect).toHaveBeenCalled(); + describe('::showResults', () => { + it('should filter the results when no callback out of the box', async () => { + const spy = jest.spyOn(instance, 'filter'); + const mockData = ['test1', 'test2', 'test3', 'falsy']; + instance.callbacks.onKeyup = undefined; + await instance.showResults({ from: 'local', data: mockData }); + expect(spy).toHaveBeenCalled(); + }); + + it('should put the data in cache when cache is active and current data is not coming from cache', async () => { + const mockData = ['test1', 'test2']; + await instance.showResults({ from: 'test', data: mockData }); + expect(mockCache.set).toHaveBeenCalled(); + }); + + it('should call the dom.buildResults method', async () => { + const mockData = ['test1', 'test2']; + await instance.showResults({ from: 'test', data: mockData }); + expect(mockDom.buildResults).toHaveBeenCalled(); + }); }); - test('hydrate', async () => { - await instance.hydrate('test'); - expect(mockBroadcaster.trigger).toHaveBeenCalled(); + describe('::bindResults', () => { + it('should call the broadcaster.listen method 2 times', () => { + instance.bindResults(); + expect(mockBroadcaster.listen).toHaveBeenCalledTimes(2); + }); }); - test('navigate', () => { - const mockEvent = { keyCode: 38 }; - instance.navigate(mockEvent); - expect(mockDom.focus).toHaveBeenCalled(); + describe('::suggest', () => { + it('should not suggest when input length value is smaller than configuration.startQueryingFromChar', () => { + const spy = jest.spyOn(instance, 'hydrate'); + instance.configuration.startQueryingFromChar = 10; + instance.suggest({ keyCode: 12 }); + expect(mockCache.get).not.toHaveBeenCalled(); + expect(mockCallbacks.onKeyup).not.toHaveBeenCalled(); + expect(spy).not.toHaveBeenCalled(); + }); + + it('should select an entry when Enter is pressed', () => { + const focused = document.createElement('div'); + focused.id = 0; + instance.dom.focused = focused; + instance.props.data = ['test1', 'test2']; + const mockEvent = { keyCode: 13 }; + const spy = jest.spyOn(instance, 'select'); + instance.suggest(mockEvent); + expect(spy).toHaveBeenCalled(); + }); + + it('should navigate in results when arrow up is pressed', () => { + const mockEvent = { keyCode: 38 }; + const spy = jest.spyOn(instance, 'navigate'); + instance.suggest(mockEvent); + expect(spy).toHaveBeenCalled(); + }); + + it('should navigate in results when arrow down is pressed', () => { + const mockEvent = { keyCode: 40 }; + const spy = jest.spyOn(instance, 'navigate'); + instance.suggest(mockEvent); + expect(spy).toHaveBeenCalled(); + }); + + it('should request data when another key is pressed and input value has changed', () => { + const mockEvent = { keyCode: 12 }; + const spy = jest.spyOn(instance, 'hydrate'); + instance.suggest(mockEvent); + expect(spy).toHaveBeenCalled(); + }); + + it('should not request data when another key is pressed and input value has not changed', () => { + instance.dom.input.value = 'test'; + instance.props.previousValue = 'test'; + const mockEvent = { keyCode: 12 }; + const spy = jest.spyOn(instance, 'hydrate'); + instance.suggest(mockEvent); + expect(spy).not.toHaveBeenCalled(); + }); + }); + + describe('::hydrate', () => { + it('should request data from cache if it is valid', async () => { + mockCache.isValid.mockResolvedValue(true); + await instance.hydrate('test'); + expect(mockCache.get).toHaveBeenCalled(); + }); + + it('should request data from callback when onKeyup callback exists', async () => { + mockCache.isValid.mockResolvedValue(false); + await instance.hydrate('test'); + expect(mockCache.get).not.toHaveBeenCalled(); + expect(mockCallbacks.onKeyup).toHaveBeenCalled(); + }); + + it('should request data from props when she\'s not provided from cache or callback', async () => { + mockCache.isValid.mockResolvedValue(false); + instance.props.data = ['test1', 'test2']; + instance.callbacks.onKeyup = undefined; + await instance.hydrate('test'); + expect(mockCache.get).not.toHaveBeenCalled(); + expect(mockCallbacks.onKeyup).not.toHaveBeenCalled(); + }); + + it('should broadcast the data when she\'s available from cache', async () => { + instance.cache.isValid = jest.fn().mockImplementation(async (value) => { + return true + }); + instance.cache.get = jest.fn().mockImplementation((value, callback) => { + callback(['test1', 'test2']); + }); + await instance.hydrate('test'); + expect(mockBroadcaster.trigger).toHaveBeenCalledWith('kompletr.data.done', { from: 'cache', data: ['test1', 'test2'] }); + }); + + it('should broadcast the data when she\'s available from callback', async () => { + mockCache.isValid.mockResolvedValue(false); + instance.callbacks.onKeyup = jest.fn().mockImplementation((value, callback) => { + callback(['test1', 'test2']); + }); + await instance.hydrate('test'); + expect(mockBroadcaster.trigger).toHaveBeenCalledWith('kompletr.data.done', { from: 'callback', data: ['test1', 'test2'] }); + }); + + it('should broadcast the data when she\'s available from props', async () => { + mockCache.isValid.mockResolvedValue(false); + instance.callbacks.onKeyup = undefined; + instance.props.data = ['test1', 'test2']; + await instance.hydrate('test'); + expect(mockBroadcaster.trigger).toHaveBeenCalledWith('kompletr.data.done', { from: 'local', data: ['test1', 'test2'] }); + }); + + xit('should trigger error when an error occurs', async () => { + mockCache.isValid.mockResolvedValue(true); + mockCache.get.mockRejectedValue(new Error('Test error')); + await instance.hydrate('test'); + expect(mockBroadcaster.trigger).toHaveBeenCalled; + }); }); - test('select', () => { - instance.props.data = ['test1', 'test2']; - instance.select(1); - expect(mockCallbacks.onSelect).toHaveBeenCalledWith('test2'); + describe('::navigate', () => { + it('should do nothing when key code is not up / down arrow', () => { + instance.navigate(12); + expect(mockDom.focus).not.toHaveBeenCalled(); + }); + + it('should do nothing when pointer is out of range', () => { + instance.props.pointer = -2 + instance.navigate(38); + expect(instance.props.pointer).toBe(-2); + expect(mockDom.focus).not.toHaveBeenCalled(); + }); + + it('should move up the pointer', () => { + instance.props.pointer = 2; + instance.dom.result = { children: [1, 2, 3, 4, 5] }; + instance.navigate(40); + expect(instance.props.pointer).toBe(3); + }); + + it('should move down the pointer', () => { + instance.props.pointer = 2; + instance.dom.result = { children: [1, 2, 3, 4, 5] }; + instance.navigate(38); + expect(instance.props.pointer).toBe(1); + }); + + it('should update the focus by calling dom.focus method', () => { + const spy = jest.spyOn(mockDom, 'focus'); + instance.props.pointer = 2; + instance.dom.result = { children: [1, 2, 3, 4, 5] }; + instance.navigate(38); + expect(spy).toHaveBeenCalledWith(1, 'add'); + expect(spy).toHaveBeenCalledWith(1, 'remove'); + }); + }); + + describe('::select', () => { + it('should assign the right value as string on the input', () => { + instance.props.data = ['test1', 'test2']; + instance.select(1); + expect(instance.dom.input.value).toBe('test2'); + }); + + it('should assign the right value as object property on the input', () => { + instance.configuration.propToMapAsValue = 'prop'; + instance.props.data = [{ prop: 'test1' }]; + instance.select(0); + expect(instance.dom.input.value).toBe('test1'); + }); + + it('should call onSelect callback with the selected value', () => { + instance.props.data = ['test1', 'test2']; + instance.select(1); + expect(mockCallbacks.onSelect).toHaveBeenCalledWith('test2'); + }); + + it('should broadcast select.done', () => { + instance.props.data = ['test1', 'test2']; + instance.select(1); + expect(mockBroadcaster.trigger).toHaveBeenCalledWith('kompletr.select.done'); + }); }); }); \ No newline at end of file diff --git a/test/properties.spec.js b/test/properties.spec.js index 536acaf..cdb4327 100644 --- a/test/properties.spec.js +++ b/test/properties.spec.js @@ -1,3 +1,4 @@ +import { describe } from '@jest/globals'; import { Properties } from '../src/js/properties.js'; describe('Properties', () => { @@ -7,33 +8,35 @@ describe('Properties', () => { properties = new Properties({ data: ['test1', 'test2', 'test3'] }); }); - it('should defines data getter and setter', () => { - expect(properties.data).toBeDefined(); - properties.data = ['test4', 'test5']; - expect(properties.data).toEqual(['test4', 'test5']); - }); - - it('should throws error when setting data with non-array value', () => { - expect(() => { - properties.data = 'not an array'; - }).toThrowError(new Error('data must be an array (not an array given)')); - }); - - it('should defines pointer getter and setter', () => { - expect(properties.pointer).toBeDefined(); - properties.pointer = 1; - expect(properties.pointer).toBe(1); - }); - - it('should throws error when setting pointer with non-integer value', () => { - expect(() => { - properties.pointer = 'not an integer'; - }).toThrowError(new Error('pointer must be an integer (not an integer given)')); - }); - - it('should defines previousValue getter and setter', () => { - expect(properties.previousValue).toBeDefined(); - properties.previousValue = 'test value'; - expect(properties.previousValue).toBe('test value'); + describe('::constructor', () => { + it('should defines data getter and setter', () => { + expect(properties.data).toBeDefined(); + properties.data = ['test4', 'test5']; + expect(properties.data).toEqual(['test4', 'test5']); + }); + + it('should throws error when setting data with non-array value', () => { + expect(() => { + properties.data = 'not an array'; + }).toThrowError(new Error('data must be an array (not an array given)')); + }); + + it('should defines pointer getter and setter', () => { + expect(properties.pointer).toBeDefined(); + properties.pointer = 1; + expect(properties.pointer).toBe(1); + }); + + it('should throws error when setting pointer with non-integer value', () => { + expect(() => { + properties.pointer = 'not an integer'; + }).toThrowError(new Error('pointer must be an integer (not an integer given)')); + }); + + it('should defines previousValue getter and setter', () => { + expect(properties.previousValue).toBeDefined(); + properties.previousValue = 'test value'; + expect(properties.previousValue).toBe('test value'); + }); }); }); From b4da1aea8077dcc80e537992de7a04dc6e812519 Mon Sep 17 00:00:00 2001 From: Steve Date: Thu, 14 Mar 2024 23:42:37 +0100 Subject: [PATCH 24/48] feat: UT with coverage --- .github/workflows/build.yml | 33 ++++++++++- cypress-api/data.json | 1 + cypress-api/index.js | 17 ++++++ package-lock.json | 107 ++++++++++++++++++++++++++++++++++++ package.json | 4 +- 5 files changed, 159 insertions(+), 3 deletions(-) create mode 100644 cypress-api/data.json create mode 100644 cypress-api/index.js diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ba6c43f..46acc93 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -29,7 +29,32 @@ jobs: path: | dist retention-days: 3 - test: + unit-tests: + name: Unit Tests + runs-on: ubuntu-latest + needs: [ build ] + env: + RUNNER: github + NODE_ENV: dev + steps: + - name: Github checkout + uses: actions/checkout@v4 + - name: Setup node.js environment + uses: actions/setup-node@v4 + with: + node-version: '18.19.0' + - name: Install Node.js dependencies + run: npm i + - name: Run unit tests + run: npm run ci:test + env: + CI: true + - name: Publish to coveralls.io + uses: coverallsapp/github-action@v2 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + path-to-lcov: ./coverage/lcov.info + e2e-tests: name: E2E Tests runs-on: ubuntu-latest needs: [ build ] @@ -54,7 +79,11 @@ jobs: with: name: build-files path: dist + - name: Run local servers + run: npm run ci:api & npm run ci:dev + env: + CI: true - name: Run E2E tests - run: npm run start & npm run cypress:run + run: npm run cypress:run env: CI: true \ No newline at end of file diff --git a/cypress-api/data.json b/cypress-api/data.json new file mode 100644 index 0000000..d06d2d5 --- /dev/null +++ b/cypress-api/data.json @@ -0,0 +1 @@ +[{"Name":"Kabul","0":"Kabul","CountryCode":"AFG","1":"AFG","Population":"1780000","2":"1780000"},{"Name":"Qandahar","0":"Qandahar","CountryCode":"AFG","1":"AFG","Population":"237500","2":"237500"},{"Name":"Herat","0":"Herat","CountryCode":"AFG","1":"AFG","Population":"186800","2":"186800"},{"Name":"Mazar-e-Sharif","0":"Mazar-e-Sharif","CountryCode":"AFG","1":"AFG","Population":"127800","2":"127800"},{"Name":"Amsterdam","0":"Amsterdam","CountryCode":"NLD","1":"NLD","Population":"731200","2":"731200"},{"Name":"Rotterdam","0":"Rotterdam","CountryCode":"NLD","1":"NLD","Population":"593321","2":"593321"},{"Name":"Haag","0":"Haag","CountryCode":"NLD","1":"NLD","Population":"440900","2":"440900"},{"Name":"Utrecht","0":"Utrecht","CountryCode":"NLD","1":"NLD","Population":"234323","2":"234323"},{"Name":"Eindhoven","0":"Eindhoven","CountryCode":"NLD","1":"NLD","Population":"201843","2":"201843"},{"Name":"Tilburg","0":"Tilburg","CountryCode":"NLD","1":"NLD","Population":"193238","2":"193238"},{"Name":"Groningen","0":"Groningen","CountryCode":"NLD","1":"NLD","Population":"172701","2":"172701"},{"Name":"Breda","0":"Breda","CountryCode":"NLD","1":"NLD","Population":"160398","2":"160398"},{"Name":"Apeldoorn","0":"Apeldoorn","CountryCode":"NLD","1":"NLD","Population":"153491","2":"153491"},{"Name":"Nijmegen","0":"Nijmegen","CountryCode":"NLD","1":"NLD","Population":"152463","2":"152463"},{"Name":"Enschede","0":"Enschede","CountryCode":"NLD","1":"NLD","Population":"149544","2":"149544"},{"Name":"Haarlem","0":"Haarlem","CountryCode":"NLD","1":"NLD","Population":"148772","2":"148772"},{"Name":"Almere","0":"Almere","CountryCode":"NLD","1":"NLD","Population":"142465","2":"142465"},{"Name":"Arnhem","0":"Arnhem","CountryCode":"NLD","1":"NLD","Population":"138020","2":"138020"},{"Name":"Zaanstad","0":"Zaanstad","CountryCode":"NLD","1":"NLD","Population":"135621","2":"135621"},{"Name":"\u00b4s-Hertogenbosch","0":"\u00b4s-Hertogenbosch","CountryCode":"NLD","1":"NLD","Population":"129170","2":"129170"},{"Name":"Amersfoort","0":"Amersfoort","CountryCode":"NLD","1":"NLD","Population":"126270","2":"126270"},{"Name":"Maastricht","0":"Maastricht","CountryCode":"NLD","1":"NLD","Population":"122087","2":"122087"},{"Name":"Dordrecht","0":"Dordrecht","CountryCode":"NLD","1":"NLD","Population":"119811","2":"119811"},{"Name":"Leiden","0":"Leiden","CountryCode":"NLD","1":"NLD","Population":"117196","2":"117196"},{"Name":"Haarlemmermeer","0":"Haarlemmermeer","CountryCode":"NLD","1":"NLD","Population":"110722","2":"110722"},{"Name":"Zoetermeer","0":"Zoetermeer","CountryCode":"NLD","1":"NLD","Population":"110214","2":"110214"},{"Name":"Emmen","0":"Emmen","CountryCode":"NLD","1":"NLD","Population":"105853","2":"105853"},{"Name":"Zwolle","0":"Zwolle","CountryCode":"NLD","1":"NLD","Population":"105819","2":"105819"},{"Name":"Ede","0":"Ede","CountryCode":"NLD","1":"NLD","Population":"101574","2":"101574"},{"Name":"Delft","0":"Delft","CountryCode":"NLD","1":"NLD","Population":"95268","2":"95268"},{"Name":"Heerlen","0":"Heerlen","CountryCode":"NLD","1":"NLD","Population":"95052","2":"95052"},{"Name":"Alkmaar","0":"Alkmaar","CountryCode":"NLD","1":"NLD","Population":"92713","2":"92713"},{"Name":"Willemstad","0":"Willemstad","CountryCode":"ANT","1":"ANT","Population":"2345","2":"2345"},{"Name":"Tirana","0":"Tirana","CountryCode":"ALB","1":"ALB","Population":"270000","2":"270000"},{"Name":"Alger","0":"Alger","CountryCode":"DZA","1":"DZA","Population":"2168000","2":"2168000"},{"Name":"Oran","0":"Oran","CountryCode":"DZA","1":"DZA","Population":"609823","2":"609823"},{"Name":"Constantine","0":"Constantine","CountryCode":"DZA","1":"DZA","Population":"443727","2":"443727"},{"Name":"Annaba","0":"Annaba","CountryCode":"DZA","1":"DZA","Population":"222518","2":"222518"},{"Name":"Batna","0":"Batna","CountryCode":"DZA","1":"DZA","Population":"183377","2":"183377"},{"Name":"S\u00e9tif","0":"S\u00e9tif","CountryCode":"DZA","1":"DZA","Population":"179055","2":"179055"},{"Name":"Sidi Bel Abb\u00e8s","0":"Sidi Bel Abb\u00e8s","CountryCode":"DZA","1":"DZA","Population":"153106","2":"153106"},{"Name":"Skikda","0":"Skikda","CountryCode":"DZA","1":"DZA","Population":"128747","2":"128747"},{"Name":"Biskra","0":"Biskra","CountryCode":"DZA","1":"DZA","Population":"128281","2":"128281"},{"Name":"Blida (el-Boulaida)","0":"Blida (el-Boulaida)","CountryCode":"DZA","1":"DZA","Population":"127284","2":"127284"},{"Name":"B\u00e9ja\u00efa","0":"B\u00e9ja\u00efa","CountryCode":"DZA","1":"DZA","Population":"117162","2":"117162"},{"Name":"Mostaganem","0":"Mostaganem","CountryCode":"DZA","1":"DZA","Population":"115212","2":"115212"},{"Name":"T\u00e9bessa","0":"T\u00e9bessa","CountryCode":"DZA","1":"DZA","Population":"112007","2":"112007"},{"Name":"Tlemcen (Tilimsen)","0":"Tlemcen (Tilimsen)","CountryCode":"DZA","1":"DZA","Population":"110242","2":"110242"},{"Name":"B\u00e9char","0":"B\u00e9char","CountryCode":"DZA","1":"DZA","Population":"107311","2":"107311"},{"Name":"Tiaret","0":"Tiaret","CountryCode":"DZA","1":"DZA","Population":"100118","2":"100118"},{"Name":"Ech-Chleff (el-Asnam)","0":"Ech-Chleff (el-Asnam)","CountryCode":"DZA","1":"DZA","Population":"96794","2":"96794"},{"Name":"Gharda\u00efa","0":"Gharda\u00efa","CountryCode":"DZA","1":"DZA","Population":"89415","2":"89415"},{"Name":"Tafuna","0":"Tafuna","CountryCode":"ASM","1":"ASM","Population":"5200","2":"5200"},{"Name":"Fagatogo","0":"Fagatogo","CountryCode":"ASM","1":"ASM","Population":"2323","2":"2323"},{"Name":"Andorra la Vella","0":"Andorra la Vella","CountryCode":"AND","1":"AND","Population":"21189","2":"21189"},{"Name":"Luanda","0":"Luanda","CountryCode":"AGO","1":"AGO","Population":"2022000","2":"2022000"},{"Name":"Huambo","0":"Huambo","CountryCode":"AGO","1":"AGO","Population":"163100","2":"163100"},{"Name":"Lobito","0":"Lobito","CountryCode":"AGO","1":"AGO","Population":"130000","2":"130000"},{"Name":"Benguela","0":"Benguela","CountryCode":"AGO","1":"AGO","Population":"128300","2":"128300"},{"Name":"Namibe","0":"Namibe","CountryCode":"AGO","1":"AGO","Population":"118200","2":"118200"},{"Name":"South Hill","0":"South Hill","CountryCode":"AIA","1":"AIA","Population":"961","2":"961"},{"Name":"The Valley","0":"The Valley","CountryCode":"AIA","1":"AIA","Population":"595","2":"595"},{"Name":"Saint John\u00b4s","0":"Saint John\u00b4s","CountryCode":"ATG","1":"ATG","Population":"24000","2":"24000"},{"Name":"Dubai","0":"Dubai","CountryCode":"ARE","1":"ARE","Population":"669181","2":"669181"},{"Name":"Abu Dhabi","0":"Abu Dhabi","CountryCode":"ARE","1":"ARE","Population":"398695","2":"398695"},{"Name":"Sharja","0":"Sharja","CountryCode":"ARE","1":"ARE","Population":"320095","2":"320095"},{"Name":"al-Ayn","0":"al-Ayn","CountryCode":"ARE","1":"ARE","Population":"225970","2":"225970"},{"Name":"Ajman","0":"Ajman","CountryCode":"ARE","1":"ARE","Population":"114395","2":"114395"},{"Name":"Buenos Aires","0":"Buenos Aires","CountryCode":"ARG","1":"ARG","Population":"2982146","2":"2982146"},{"Name":"La Matanza","0":"La Matanza","CountryCode":"ARG","1":"ARG","Population":"1266461","2":"1266461"},{"Name":"C\u00f3rdoba","0":"C\u00f3rdoba","CountryCode":"ARG","1":"ARG","Population":"1157507","2":"1157507"},{"Name":"Rosario","0":"Rosario","CountryCode":"ARG","1":"ARG","Population":"907718","2":"907718"},{"Name":"Lomas de Zamora","0":"Lomas de Zamora","CountryCode":"ARG","1":"ARG","Population":"622013","2":"622013"},{"Name":"Quilmes","0":"Quilmes","CountryCode":"ARG","1":"ARG","Population":"559249","2":"559249"},{"Name":"Almirante Brown","0":"Almirante Brown","CountryCode":"ARG","1":"ARG","Population":"538918","2":"538918"},{"Name":"La Plata","0":"La Plata","CountryCode":"ARG","1":"ARG","Population":"521936","2":"521936"},{"Name":"Mar del Plata","0":"Mar del Plata","CountryCode":"ARG","1":"ARG","Population":"512880","2":"512880"},{"Name":"San Miguel de Tucum\u00e1n","0":"San Miguel de Tucum\u00e1n","CountryCode":"ARG","1":"ARG","Population":"470809","2":"470809"},{"Name":"Lan\u00fas","0":"Lan\u00fas","CountryCode":"ARG","1":"ARG","Population":"469735","2":"469735"},{"Name":"Merlo","0":"Merlo","CountryCode":"ARG","1":"ARG","Population":"463846","2":"463846"},{"Name":"General San Mart\u00edn","0":"General San Mart\u00edn","CountryCode":"ARG","1":"ARG","Population":"422542","2":"422542"},{"Name":"Salta","0":"Salta","CountryCode":"ARG","1":"ARG","Population":"367550","2":"367550"},{"Name":"Moreno","0":"Moreno","CountryCode":"ARG","1":"ARG","Population":"356993","2":"356993"},{"Name":"Santa F\u00e9","0":"Santa F\u00e9","CountryCode":"ARG","1":"ARG","Population":"353063","2":"353063"},{"Name":"Avellaneda","0":"Avellaneda","CountryCode":"ARG","1":"ARG","Population":"353046","2":"353046"},{"Name":"Tres de Febrero","0":"Tres de Febrero","CountryCode":"ARG","1":"ARG","Population":"352311","2":"352311"},{"Name":"Mor\u00f3n","0":"Mor\u00f3n","CountryCode":"ARG","1":"ARG","Population":"349246","2":"349246"},{"Name":"Florencio Varela","0":"Florencio Varela","CountryCode":"ARG","1":"ARG","Population":"315432","2":"315432"},{"Name":"San Isidro","0":"San Isidro","CountryCode":"ARG","1":"ARG","Population":"306341","2":"306341"},{"Name":"Tigre","0":"Tigre","CountryCode":"ARG","1":"ARG","Population":"296226","2":"296226"},{"Name":"Malvinas Argentinas","0":"Malvinas Argentinas","CountryCode":"ARG","1":"ARG","Population":"290335","2":"290335"},{"Name":"Vicente L\u00f3pez","0":"Vicente L\u00f3pez","CountryCode":"ARG","1":"ARG","Population":"288341","2":"288341"},{"Name":"Berazategui","0":"Berazategui","CountryCode":"ARG","1":"ARG","Population":"276916","2":"276916"},{"Name":"Corrientes","0":"Corrientes","CountryCode":"ARG","1":"ARG","Population":"258103","2":"258103"},{"Name":"San Miguel","0":"San Miguel","CountryCode":"ARG","1":"ARG","Population":"248700","2":"248700"},{"Name":"Bah\u00eda Blanca","0":"Bah\u00eda Blanca","CountryCode":"ARG","1":"ARG","Population":"239810","2":"239810"},{"Name":"Esteban Echeverr\u00eda","0":"Esteban Echeverr\u00eda","CountryCode":"ARG","1":"ARG","Population":"235760","2":"235760"},{"Name":"Resistencia","0":"Resistencia","CountryCode":"ARG","1":"ARG","Population":"229212","2":"229212"},{"Name":"Jos\u00e9 C. Paz","0":"Jos\u00e9 C. Paz","CountryCode":"ARG","1":"ARG","Population":"221754","2":"221754"},{"Name":"Paran\u00e1","0":"Paran\u00e1","CountryCode":"ARG","1":"ARG","Population":"207041","2":"207041"},{"Name":"Godoy Cruz","0":"Godoy Cruz","CountryCode":"ARG","1":"ARG","Population":"206998","2":"206998"},{"Name":"Posadas","0":"Posadas","CountryCode":"ARG","1":"ARG","Population":"201273","2":"201273"},{"Name":"Guaymall\u00e9n","0":"Guaymall\u00e9n","CountryCode":"ARG","1":"ARG","Population":"200595","2":"200595"},{"Name":"Santiago del Estero","0":"Santiago del Estero","CountryCode":"ARG","1":"ARG","Population":"189947","2":"189947"},{"Name":"San Salvador de Jujuy","0":"San Salvador de Jujuy","CountryCode":"ARG","1":"ARG","Population":"178748","2":"178748"},{"Name":"Hurlingham","0":"Hurlingham","CountryCode":"ARG","1":"ARG","Population":"170028","2":"170028"},{"Name":"Neuqu\u00e9n","0":"Neuqu\u00e9n","CountryCode":"ARG","1":"ARG","Population":"167296","2":"167296"},{"Name":"Ituzaing\u00f3","0":"Ituzaing\u00f3","CountryCode":"ARG","1":"ARG","Population":"158197","2":"158197"},{"Name":"San Fernando","0":"San Fernando","CountryCode":"ARG","1":"ARG","Population":"153036","2":"153036"},{"Name":"Formosa","0":"Formosa","CountryCode":"ARG","1":"ARG","Population":"147636","2":"147636"},{"Name":"Las Heras","0":"Las Heras","CountryCode":"ARG","1":"ARG","Population":"145823","2":"145823"},{"Name":"La Rioja","0":"La Rioja","CountryCode":"ARG","1":"ARG","Population":"138117","2":"138117"},{"Name":"San Fernando del Valle de Cata","0":"San Fernando del Valle de Cata","CountryCode":"ARG","1":"ARG","Population":"134935","2":"134935"},{"Name":"R\u00edo Cuarto","0":"R\u00edo Cuarto","CountryCode":"ARG","1":"ARG","Population":"134355","2":"134355"},{"Name":"Comodoro Rivadavia","0":"Comodoro Rivadavia","CountryCode":"ARG","1":"ARG","Population":"124104","2":"124104"},{"Name":"Mendoza","0":"Mendoza","CountryCode":"ARG","1":"ARG","Population":"123027","2":"123027"},{"Name":"San Nicol\u00e1s de los Arroyos","0":"San Nicol\u00e1s de los Arroyos","CountryCode":"ARG","1":"ARG","Population":"119302","2":"119302"},{"Name":"San Juan","0":"San Juan","CountryCode":"ARG","1":"ARG","Population":"119152","2":"119152"},{"Name":"Escobar","0":"Escobar","CountryCode":"ARG","1":"ARG","Population":"116675","2":"116675"},{"Name":"Concordia","0":"Concordia","CountryCode":"ARG","1":"ARG","Population":"116485","2":"116485"},{"Name":"Pilar","0":"Pilar","CountryCode":"ARG","1":"ARG","Population":"113428","2":"113428"},{"Name":"San Luis","0":"San Luis","CountryCode":"ARG","1":"ARG","Population":"110136","2":"110136"},{"Name":"Ezeiza","0":"Ezeiza","CountryCode":"ARG","1":"ARG","Population":"99578","2":"99578"},{"Name":"San Rafael","0":"San Rafael","CountryCode":"ARG","1":"ARG","Population":"94651","2":"94651"},{"Name":"Tandil","0":"Tandil","CountryCode":"ARG","1":"ARG","Population":"91101","2":"91101"},{"Name":"Yerevan","0":"Yerevan","CountryCode":"ARM","1":"ARM","Population":"1248700","2":"1248700"},{"Name":"Gjumri","0":"Gjumri","CountryCode":"ARM","1":"ARM","Population":"211700","2":"211700"},{"Name":"Vanadzor","0":"Vanadzor","CountryCode":"ARM","1":"ARM","Population":"172700","2":"172700"},{"Name":"Oranjestad","0":"Oranjestad","CountryCode":"ABW","1":"ABW","Population":"29034","2":"29034"},{"Name":"Sydney","0":"Sydney","CountryCode":"AUS","1":"AUS","Population":"3276207","2":"3276207"},{"Name":"Melbourne","0":"Melbourne","CountryCode":"AUS","1":"AUS","Population":"2865329","2":"2865329"},{"Name":"Brisbane","0":"Brisbane","CountryCode":"AUS","1":"AUS","Population":"1291117","2":"1291117"},{"Name":"Perth","0":"Perth","CountryCode":"AUS","1":"AUS","Population":"1096829","2":"1096829"},{"Name":"Adelaide","0":"Adelaide","CountryCode":"AUS","1":"AUS","Population":"978100","2":"978100"},{"Name":"Canberra","0":"Canberra","CountryCode":"AUS","1":"AUS","Population":"322723","2":"322723"},{"Name":"Gold Coast","0":"Gold Coast","CountryCode":"AUS","1":"AUS","Population":"311932","2":"311932"},{"Name":"Newcastle","0":"Newcastle","CountryCode":"AUS","1":"AUS","Population":"270324","2":"270324"},{"Name":"Central Coast","0":"Central Coast","CountryCode":"AUS","1":"AUS","Population":"227657","2":"227657"},{"Name":"Wollongong","0":"Wollongong","CountryCode":"AUS","1":"AUS","Population":"219761","2":"219761"},{"Name":"Hobart","0":"Hobart","CountryCode":"AUS","1":"AUS","Population":"126118","2":"126118"},{"Name":"Geelong","0":"Geelong","CountryCode":"AUS","1":"AUS","Population":"125382","2":"125382"},{"Name":"Townsville","0":"Townsville","CountryCode":"AUS","1":"AUS","Population":"109914","2":"109914"},{"Name":"Cairns","0":"Cairns","CountryCode":"AUS","1":"AUS","Population":"92273","2":"92273"},{"Name":"Baku","0":"Baku","CountryCode":"AZE","1":"AZE","Population":"1787800","2":"1787800"},{"Name":"G\u00e4nc\u00e4","0":"G\u00e4nc\u00e4","CountryCode":"AZE","1":"AZE","Population":"299300","2":"299300"},{"Name":"Sumqayit","0":"Sumqayit","CountryCode":"AZE","1":"AZE","Population":"283000","2":"283000"},{"Name":"Ming\u00e4\u00e7evir","0":"Ming\u00e4\u00e7evir","CountryCode":"AZE","1":"AZE","Population":"93900","2":"93900"},{"Name":"Nassau","0":"Nassau","CountryCode":"BHS","1":"BHS","Population":"172000","2":"172000"},{"Name":"al-Manama","0":"al-Manama","CountryCode":"BHR","1":"BHR","Population":"148000","2":"148000"},{"Name":"Dhaka","0":"Dhaka","CountryCode":"BGD","1":"BGD","Population":"3612850","2":"3612850"},{"Name":"Chittagong","0":"Chittagong","CountryCode":"BGD","1":"BGD","Population":"1392860","2":"1392860"},{"Name":"Khulna","0":"Khulna","CountryCode":"BGD","1":"BGD","Population":"663340","2":"663340"},{"Name":"Rajshahi","0":"Rajshahi","CountryCode":"BGD","1":"BGD","Population":"294056","2":"294056"},{"Name":"Narayanganj","0":"Narayanganj","CountryCode":"BGD","1":"BGD","Population":"202134","2":"202134"},{"Name":"Rangpur","0":"Rangpur","CountryCode":"BGD","1":"BGD","Population":"191398","2":"191398"},{"Name":"Mymensingh","0":"Mymensingh","CountryCode":"BGD","1":"BGD","Population":"188713","2":"188713"},{"Name":"Barisal","0":"Barisal","CountryCode":"BGD","1":"BGD","Population":"170232","2":"170232"},{"Name":"Tungi","0":"Tungi","CountryCode":"BGD","1":"BGD","Population":"168702","2":"168702"},{"Name":"Jessore","0":"Jessore","CountryCode":"BGD","1":"BGD","Population":"139710","2":"139710"},{"Name":"Comilla","0":"Comilla","CountryCode":"BGD","1":"BGD","Population":"135313","2":"135313"},{"Name":"Nawabganj","0":"Nawabganj","CountryCode":"BGD","1":"BGD","Population":"130577","2":"130577"},{"Name":"Dinajpur","0":"Dinajpur","CountryCode":"BGD","1":"BGD","Population":"127815","2":"127815"},{"Name":"Bogra","0":"Bogra","CountryCode":"BGD","1":"BGD","Population":"120170","2":"120170"},{"Name":"Sylhet","0":"Sylhet","CountryCode":"BGD","1":"BGD","Population":"117396","2":"117396"},{"Name":"Brahmanbaria","0":"Brahmanbaria","CountryCode":"BGD","1":"BGD","Population":"109032","2":"109032"},{"Name":"Tangail","0":"Tangail","CountryCode":"BGD","1":"BGD","Population":"106004","2":"106004"},{"Name":"Jamalpur","0":"Jamalpur","CountryCode":"BGD","1":"BGD","Population":"103556","2":"103556"},{"Name":"Pabna","0":"Pabna","CountryCode":"BGD","1":"BGD","Population":"103277","2":"103277"},{"Name":"Naogaon","0":"Naogaon","CountryCode":"BGD","1":"BGD","Population":"101266","2":"101266"},{"Name":"Sirajganj","0":"Sirajganj","CountryCode":"BGD","1":"BGD","Population":"99669","2":"99669"},{"Name":"Narsinghdi","0":"Narsinghdi","CountryCode":"BGD","1":"BGD","Population":"98342","2":"98342"},{"Name":"Saidpur","0":"Saidpur","CountryCode":"BGD","1":"BGD","Population":"96777","2":"96777"},{"Name":"Gazipur","0":"Gazipur","CountryCode":"BGD","1":"BGD","Population":"96717","2":"96717"},{"Name":"Bridgetown","0":"Bridgetown","CountryCode":"BRB","1":"BRB","Population":"6070","2":"6070"},{"Name":"Antwerpen","0":"Antwerpen","CountryCode":"BEL","1":"BEL","Population":"446525","2":"446525"},{"Name":"Gent","0":"Gent","CountryCode":"BEL","1":"BEL","Population":"224180","2":"224180"},{"Name":"Charleroi","0":"Charleroi","CountryCode":"BEL","1":"BEL","Population":"200827","2":"200827"},{"Name":"Li\u00e8ge","0":"Li\u00e8ge","CountryCode":"BEL","1":"BEL","Population":"185639","2":"185639"},{"Name":"Bruxelles [Brussel]","0":"Bruxelles [Brussel]","CountryCode":"BEL","1":"BEL","Population":"133859","2":"133859"},{"Name":"Brugge","0":"Brugge","CountryCode":"BEL","1":"BEL","Population":"116246","2":"116246"},{"Name":"Schaerbeek","0":"Schaerbeek","CountryCode":"BEL","1":"BEL","Population":"105692","2":"105692"},{"Name":"Namur","0":"Namur","CountryCode":"BEL","1":"BEL","Population":"105419","2":"105419"},{"Name":"Mons","0":"Mons","CountryCode":"BEL","1":"BEL","Population":"90935","2":"90935"},{"Name":"Belize City","0":"Belize City","CountryCode":"BLZ","1":"BLZ","Population":"55810","2":"55810"},{"Name":"Belmopan","0":"Belmopan","CountryCode":"BLZ","1":"BLZ","Population":"7105","2":"7105"},{"Name":"Cotonou","0":"Cotonou","CountryCode":"BEN","1":"BEN","Population":"536827","2":"536827"},{"Name":"Porto-Novo","0":"Porto-Novo","CountryCode":"BEN","1":"BEN","Population":"194000","2":"194000"},{"Name":"Djougou","0":"Djougou","CountryCode":"BEN","1":"BEN","Population":"134099","2":"134099"},{"Name":"Parakou","0":"Parakou","CountryCode":"BEN","1":"BEN","Population":"103577","2":"103577"},{"Name":"Saint George","0":"Saint George","CountryCode":"BMU","1":"BMU","Population":"1800","2":"1800"},{"Name":"Hamilton","0":"Hamilton","CountryCode":"BMU","1":"BMU","Population":"1200","2":"1200"},{"Name":"Thimphu","0":"Thimphu","CountryCode":"BTN","1":"BTN","Population":"22000","2":"22000"},{"Name":"Santa Cruz de la Sierra","0":"Santa Cruz de la Sierra","CountryCode":"BOL","1":"BOL","Population":"935361","2":"935361"},{"Name":"La Paz","0":"La Paz","CountryCode":"BOL","1":"BOL","Population":"758141","2":"758141"},{"Name":"El Alto","0":"El Alto","CountryCode":"BOL","1":"BOL","Population":"534466","2":"534466"},{"Name":"Cochabamba","0":"Cochabamba","CountryCode":"BOL","1":"BOL","Population":"482800","2":"482800"},{"Name":"Oruro","0":"Oruro","CountryCode":"BOL","1":"BOL","Population":"223553","2":"223553"},{"Name":"Sucre","0":"Sucre","CountryCode":"BOL","1":"BOL","Population":"178426","2":"178426"},{"Name":"Potos\u00ed","0":"Potos\u00ed","CountryCode":"BOL","1":"BOL","Population":"140642","2":"140642"},{"Name":"Tarija","0":"Tarija","CountryCode":"BOL","1":"BOL","Population":"125255","2":"125255"},{"Name":"Sarajevo","0":"Sarajevo","CountryCode":"BIH","1":"BIH","Population":"360000","2":"360000"},{"Name":"Banja Luka","0":"Banja Luka","CountryCode":"BIH","1":"BIH","Population":"143079","2":"143079"},{"Name":"Zenica","0":"Zenica","CountryCode":"BIH","1":"BIH","Population":"96027","2":"96027"},{"Name":"Gaborone","0":"Gaborone","CountryCode":"BWA","1":"BWA","Population":"213017","2":"213017"},{"Name":"Francistown","0":"Francistown","CountryCode":"BWA","1":"BWA","Population":"101805","2":"101805"},{"Name":"S\u00e3o Paulo","0":"S\u00e3o Paulo","CountryCode":"BRA","1":"BRA","Population":"9968485","2":"9968485"},{"Name":"Rio de Janeiro","0":"Rio de Janeiro","CountryCode":"BRA","1":"BRA","Population":"5598953","2":"5598953"},{"Name":"Salvador","0":"Salvador","CountryCode":"BRA","1":"BRA","Population":"2302832","2":"2302832"},{"Name":"Belo Horizonte","0":"Belo Horizonte","CountryCode":"BRA","1":"BRA","Population":"2139125","2":"2139125"},{"Name":"Fortaleza","0":"Fortaleza","CountryCode":"BRA","1":"BRA","Population":"2097757","2":"2097757"},{"Name":"Bras\u00edlia","0":"Bras\u00edlia","CountryCode":"BRA","1":"BRA","Population":"1969868","2":"1969868"},{"Name":"Curitiba","0":"Curitiba","CountryCode":"BRA","1":"BRA","Population":"1584232","2":"1584232"},{"Name":"Recife","0":"Recife","CountryCode":"BRA","1":"BRA","Population":"1378087","2":"1378087"},{"Name":"Porto Alegre","0":"Porto Alegre","CountryCode":"BRA","1":"BRA","Population":"1314032","2":"1314032"},{"Name":"Manaus","0":"Manaus","CountryCode":"BRA","1":"BRA","Population":"1255049","2":"1255049"},{"Name":"Bel\u00e9m","0":"Bel\u00e9m","CountryCode":"BRA","1":"BRA","Population":"1186926","2":"1186926"},{"Name":"Guarulhos","0":"Guarulhos","CountryCode":"BRA","1":"BRA","Population":"1095874","2":"1095874"},{"Name":"Goi\u00e2nia","0":"Goi\u00e2nia","CountryCode":"BRA","1":"BRA","Population":"1056330","2":"1056330"},{"Name":"Campinas","0":"Campinas","CountryCode":"BRA","1":"BRA","Population":"950043","2":"950043"},{"Name":"S\u00e3o Gon\u00e7alo","0":"S\u00e3o Gon\u00e7alo","CountryCode":"BRA","1":"BRA","Population":"869254","2":"869254"},{"Name":"Nova Igua\u00e7u","0":"Nova Igua\u00e7u","CountryCode":"BRA","1":"BRA","Population":"862225","2":"862225"},{"Name":"S\u00e3o Lu\u00eds","0":"S\u00e3o Lu\u00eds","CountryCode":"BRA","1":"BRA","Population":"837588","2":"837588"},{"Name":"Macei\u00f3","0":"Macei\u00f3","CountryCode":"BRA","1":"BRA","Population":"786288","2":"786288"},{"Name":"Duque de Caxias","0":"Duque de Caxias","CountryCode":"BRA","1":"BRA","Population":"746758","2":"746758"},{"Name":"S\u00e3o Bernardo do Campo","0":"S\u00e3o Bernardo do Campo","CountryCode":"BRA","1":"BRA","Population":"723132","2":"723132"},{"Name":"Teresina","0":"Teresina","CountryCode":"BRA","1":"BRA","Population":"691942","2":"691942"},{"Name":"Natal","0":"Natal","CountryCode":"BRA","1":"BRA","Population":"688955","2":"688955"},{"Name":"Osasco","0":"Osasco","CountryCode":"BRA","1":"BRA","Population":"659604","2":"659604"},{"Name":"Campo Grande","0":"Campo Grande","CountryCode":"BRA","1":"BRA","Population":"649593","2":"649593"},{"Name":"Santo Andr\u00e9","0":"Santo Andr\u00e9","CountryCode":"BRA","1":"BRA","Population":"630073","2":"630073"},{"Name":"Jo\u00e3o Pessoa","0":"Jo\u00e3o Pessoa","CountryCode":"BRA","1":"BRA","Population":"584029","2":"584029"},{"Name":"Jaboat\u00e3o dos Guararapes","0":"Jaboat\u00e3o dos Guararapes","CountryCode":"BRA","1":"BRA","Population":"558680","2":"558680"},{"Name":"Contagem","0":"Contagem","CountryCode":"BRA","1":"BRA","Population":"520801","2":"520801"},{"Name":"S\u00e3o Jos\u00e9 dos Campos","0":"S\u00e3o Jos\u00e9 dos Campos","CountryCode":"BRA","1":"BRA","Population":"515553","2":"515553"},{"Name":"Uberl\u00e2ndia","0":"Uberl\u00e2ndia","CountryCode":"BRA","1":"BRA","Population":"487222","2":"487222"},{"Name":"Feira de Santana","0":"Feira de Santana","CountryCode":"BRA","1":"BRA","Population":"479992","2":"479992"},{"Name":"Ribeir\u00e3o Preto","0":"Ribeir\u00e3o Preto","CountryCode":"BRA","1":"BRA","Population":"473276","2":"473276"},{"Name":"Sorocaba","0":"Sorocaba","CountryCode":"BRA","1":"BRA","Population":"466823","2":"466823"},{"Name":"Niter\u00f3i","0":"Niter\u00f3i","CountryCode":"BRA","1":"BRA","Population":"459884","2":"459884"},{"Name":"Cuiab\u00e1","0":"Cuiab\u00e1","CountryCode":"BRA","1":"BRA","Population":"453813","2":"453813"},{"Name":"Juiz de Fora","0":"Juiz de Fora","CountryCode":"BRA","1":"BRA","Population":"450288","2":"450288"},{"Name":"Aracaju","0":"Aracaju","CountryCode":"BRA","1":"BRA","Population":"445555","2":"445555"},{"Name":"S\u00e3o Jo\u00e3o de Meriti","0":"S\u00e3o Jo\u00e3o de Meriti","CountryCode":"BRA","1":"BRA","Population":"440052","2":"440052"},{"Name":"Londrina","0":"Londrina","CountryCode":"BRA","1":"BRA","Population":"432257","2":"432257"},{"Name":"Joinville","0":"Joinville","CountryCode":"BRA","1":"BRA","Population":"428011","2":"428011"},{"Name":"Belford Roxo","0":"Belford Roxo","CountryCode":"BRA","1":"BRA","Population":"425194","2":"425194"},{"Name":"Santos","0":"Santos","CountryCode":"BRA","1":"BRA","Population":"408748","2":"408748"},{"Name":"Ananindeua","0":"Ananindeua","CountryCode":"BRA","1":"BRA","Population":"400940","2":"400940"},{"Name":"Campos dos Goytacazes","0":"Campos dos Goytacazes","CountryCode":"BRA","1":"BRA","Population":"398418","2":"398418"},{"Name":"Mau\u00e1","0":"Mau\u00e1","CountryCode":"BRA","1":"BRA","Population":"375055","2":"375055"},{"Name":"Carapicu\u00edba","0":"Carapicu\u00edba","CountryCode":"BRA","1":"BRA","Population":"357552","2":"357552"},{"Name":"Olinda","0":"Olinda","CountryCode":"BRA","1":"BRA","Population":"354732","2":"354732"},{"Name":"Campina Grande","0":"Campina Grande","CountryCode":"BRA","1":"BRA","Population":"352497","2":"352497"},{"Name":"S\u00e3o Jos\u00e9 do Rio Preto","0":"S\u00e3o Jos\u00e9 do Rio Preto","CountryCode":"BRA","1":"BRA","Population":"351944","2":"351944"},{"Name":"Caxias do Sul","0":"Caxias do Sul","CountryCode":"BRA","1":"BRA","Population":"349581","2":"349581"},{"Name":"Moji das Cruzes","0":"Moji das Cruzes","CountryCode":"BRA","1":"BRA","Population":"339194","2":"339194"},{"Name":"Diadema","0":"Diadema","CountryCode":"BRA","1":"BRA","Population":"335078","2":"335078"},{"Name":"Aparecida de Goi\u00e2nia","0":"Aparecida de Goi\u00e2nia","CountryCode":"BRA","1":"BRA","Population":"324662","2":"324662"},{"Name":"Piracicaba","0":"Piracicaba","CountryCode":"BRA","1":"BRA","Population":"319104","2":"319104"},{"Name":"Cariacica","0":"Cariacica","CountryCode":"BRA","1":"BRA","Population":"319033","2":"319033"},{"Name":"Vila Velha","0":"Vila Velha","CountryCode":"BRA","1":"BRA","Population":"318758","2":"318758"},{"Name":"Pelotas","0":"Pelotas","CountryCode":"BRA","1":"BRA","Population":"315415","2":"315415"},{"Name":"Bauru","0":"Bauru","CountryCode":"BRA","1":"BRA","Population":"313670","2":"313670"},{"Name":"Porto Velho","0":"Porto Velho","CountryCode":"BRA","1":"BRA","Population":"309750","2":"309750"},{"Name":"Serra","0":"Serra","CountryCode":"BRA","1":"BRA","Population":"302666","2":"302666"},{"Name":"Betim","0":"Betim","CountryCode":"BRA","1":"BRA","Population":"302108","2":"302108"},{"Name":"Jund\u00eda\u00ed","0":"Jund\u00eda\u00ed","CountryCode":"BRA","1":"BRA","Population":"296127","2":"296127"},{"Name":"Canoas","0":"Canoas","CountryCode":"BRA","1":"BRA","Population":"294125","2":"294125"},{"Name":"Franca","0":"Franca","CountryCode":"BRA","1":"BRA","Population":"290139","2":"290139"},{"Name":"S\u00e3o Vicente","0":"S\u00e3o Vicente","CountryCode":"BRA","1":"BRA","Population":"286848","2":"286848"},{"Name":"Maring\u00e1","0":"Maring\u00e1","CountryCode":"BRA","1":"BRA","Population":"286461","2":"286461"},{"Name":"Montes Claros","0":"Montes Claros","CountryCode":"BRA","1":"BRA","Population":"286058","2":"286058"},{"Name":"An\u00e1polis","0":"An\u00e1polis","CountryCode":"BRA","1":"BRA","Population":"282197","2":"282197"},{"Name":"Florian\u00f3polis","0":"Florian\u00f3polis","CountryCode":"BRA","1":"BRA","Population":"281928","2":"281928"},{"Name":"Petr\u00f3polis","0":"Petr\u00f3polis","CountryCode":"BRA","1":"BRA","Population":"279183","2":"279183"},{"Name":"Itaquaquecetuba","0":"Itaquaquecetuba","CountryCode":"BRA","1":"BRA","Population":"270874","2":"270874"},{"Name":"Vit\u00f3ria","0":"Vit\u00f3ria","CountryCode":"BRA","1":"BRA","Population":"270626","2":"270626"},{"Name":"Ponta Grossa","0":"Ponta Grossa","CountryCode":"BRA","1":"BRA","Population":"268013","2":"268013"},{"Name":"Rio Branco","0":"Rio Branco","CountryCode":"BRA","1":"BRA","Population":"259537","2":"259537"},{"Name":"Foz do Igua\u00e7u","0":"Foz do Igua\u00e7u","CountryCode":"BRA","1":"BRA","Population":"259425","2":"259425"},{"Name":"Macap\u00e1","0":"Macap\u00e1","CountryCode":"BRA","1":"BRA","Population":"256033","2":"256033"},{"Name":"Ilh\u00e9us","0":"Ilh\u00e9us","CountryCode":"BRA","1":"BRA","Population":"254970","2":"254970"},{"Name":"Vit\u00f3ria da Conquista","0":"Vit\u00f3ria da Conquista","CountryCode":"BRA","1":"BRA","Population":"253587","2":"253587"},{"Name":"Uberaba","0":"Uberaba","CountryCode":"BRA","1":"BRA","Population":"249225","2":"249225"},{"Name":"Paulista","0":"Paulista","CountryCode":"BRA","1":"BRA","Population":"248473","2":"248473"},{"Name":"Limeira","0":"Limeira","CountryCode":"BRA","1":"BRA","Population":"245497","2":"245497"},{"Name":"Blumenau","0":"Blumenau","CountryCode":"BRA","1":"BRA","Population":"244379","2":"244379"},{"Name":"Caruaru","0":"Caruaru","CountryCode":"BRA","1":"BRA","Population":"244247","2":"244247"},{"Name":"Santar\u00e9m","0":"Santar\u00e9m","CountryCode":"BRA","1":"BRA","Population":"241771","2":"241771"},{"Name":"Volta Redonda","0":"Volta Redonda","CountryCode":"BRA","1":"BRA","Population":"240315","2":"240315"},{"Name":"Novo Hamburgo","0":"Novo Hamburgo","CountryCode":"BRA","1":"BRA","Population":"239940","2":"239940"},{"Name":"Caucaia","0":"Caucaia","CountryCode":"BRA","1":"BRA","Population":"238738","2":"238738"},{"Name":"Santa Maria","0":"Santa Maria","CountryCode":"BRA","1":"BRA","Population":"238473","2":"238473"},{"Name":"Cascavel","0":"Cascavel","CountryCode":"BRA","1":"BRA","Population":"237510","2":"237510"},{"Name":"Guaruj\u00e1","0":"Guaruj\u00e1","CountryCode":"BRA","1":"BRA","Population":"237206","2":"237206"},{"Name":"Ribeir\u00e3o das Neves","0":"Ribeir\u00e3o das Neves","CountryCode":"BRA","1":"BRA","Population":"232685","2":"232685"},{"Name":"Governador Valadares","0":"Governador Valadares","CountryCode":"BRA","1":"BRA","Population":"231724","2":"231724"},{"Name":"Taubat\u00e9","0":"Taubat\u00e9","CountryCode":"BRA","1":"BRA","Population":"229130","2":"229130"},{"Name":"Imperatriz","0":"Imperatriz","CountryCode":"BRA","1":"BRA","Population":"224564","2":"224564"},{"Name":"Gravata\u00ed","0":"Gravata\u00ed","CountryCode":"BRA","1":"BRA","Population":"223011","2":"223011"},{"Name":"Embu","0":"Embu","CountryCode":"BRA","1":"BRA","Population":"222223","2":"222223"},{"Name":"Mossor\u00f3","0":"Mossor\u00f3","CountryCode":"BRA","1":"BRA","Population":"214901","2":"214901"},{"Name":"V\u00e1rzea Grande","0":"V\u00e1rzea Grande","CountryCode":"BRA","1":"BRA","Population":"214435","2":"214435"},{"Name":"Petrolina","0":"Petrolina","CountryCode":"BRA","1":"BRA","Population":"210540","2":"210540"},{"Name":"Barueri","0":"Barueri","CountryCode":"BRA","1":"BRA","Population":"208426","2":"208426"},{"Name":"Viam\u00e3o","0":"Viam\u00e3o","CountryCode":"BRA","1":"BRA","Population":"207557","2":"207557"},{"Name":"Ipatinga","0":"Ipatinga","CountryCode":"BRA","1":"BRA","Population":"206338","2":"206338"},{"Name":"Juazeiro","0":"Juazeiro","CountryCode":"BRA","1":"BRA","Population":"201073","2":"201073"},{"Name":"Juazeiro do Norte","0":"Juazeiro do Norte","CountryCode":"BRA","1":"BRA","Population":"199636","2":"199636"},{"Name":"Tabo\u00e3o da Serra","0":"Tabo\u00e3o da Serra","CountryCode":"BRA","1":"BRA","Population":"197550","2":"197550"},{"Name":"S\u00e3o Jos\u00e9 dos Pinhais","0":"S\u00e3o Jos\u00e9 dos Pinhais","CountryCode":"BRA","1":"BRA","Population":"196884","2":"196884"},{"Name":"Mag\u00e9","0":"Mag\u00e9","CountryCode":"BRA","1":"BRA","Population":"196147","2":"196147"},{"Name":"Suzano","0":"Suzano","CountryCode":"BRA","1":"BRA","Population":"195434","2":"195434"},{"Name":"S\u00e3o Leopoldo","0":"S\u00e3o Leopoldo","CountryCode":"BRA","1":"BRA","Population":"189258","2":"189258"},{"Name":"Mar\u00edlia","0":"Mar\u00edlia","CountryCode":"BRA","1":"BRA","Population":"188691","2":"188691"},{"Name":"S\u00e3o Carlos","0":"S\u00e3o Carlos","CountryCode":"BRA","1":"BRA","Population":"187122","2":"187122"},{"Name":"Sumar\u00e9","0":"Sumar\u00e9","CountryCode":"BRA","1":"BRA","Population":"186205","2":"186205"},{"Name":"Presidente Prudente","0":"Presidente Prudente","CountryCode":"BRA","1":"BRA","Population":"185340","2":"185340"},{"Name":"Divin\u00f3polis","0":"Divin\u00f3polis","CountryCode":"BRA","1":"BRA","Population":"185047","2":"185047"},{"Name":"Sete Lagoas","0":"Sete Lagoas","CountryCode":"BRA","1":"BRA","Population":"182984","2":"182984"},{"Name":"Rio Grande","0":"Rio Grande","CountryCode":"BRA","1":"BRA","Population":"182222","2":"182222"},{"Name":"Itabuna","0":"Itabuna","CountryCode":"BRA","1":"BRA","Population":"182148","2":"182148"},{"Name":"Jequi\u00e9","0":"Jequi\u00e9","CountryCode":"BRA","1":"BRA","Population":"179128","2":"179128"},{"Name":"Arapiraca","0":"Arapiraca","CountryCode":"BRA","1":"BRA","Population":"178988","2":"178988"},{"Name":"Colombo","0":"Colombo","CountryCode":"BRA","1":"BRA","Population":"177764","2":"177764"},{"Name":"Americana","0":"Americana","CountryCode":"BRA","1":"BRA","Population":"177409","2":"177409"},{"Name":"Alvorada","0":"Alvorada","CountryCode":"BRA","1":"BRA","Population":"175574","2":"175574"},{"Name":"Araraquara","0":"Araraquara","CountryCode":"BRA","1":"BRA","Population":"174381","2":"174381"},{"Name":"Itabora\u00ed","0":"Itabora\u00ed","CountryCode":"BRA","1":"BRA","Population":"173977","2":"173977"},{"Name":"Santa B\u00e1rbara d\u00b4Oeste","0":"Santa B\u00e1rbara d\u00b4Oeste","CountryCode":"BRA","1":"BRA","Population":"171657","2":"171657"},{"Name":"Nova Friburgo","0":"Nova Friburgo","CountryCode":"BRA","1":"BRA","Population":"170697","2":"170697"},{"Name":"Jacare\u00ed","0":"Jacare\u00ed","CountryCode":"BRA","1":"BRA","Population":"170356","2":"170356"},{"Name":"Ara\u00e7atuba","0":"Ara\u00e7atuba","CountryCode":"BRA","1":"BRA","Population":"169303","2":"169303"},{"Name":"Barra Mansa","0":"Barra Mansa","CountryCode":"BRA","1":"BRA","Population":"168953","2":"168953"},{"Name":"Praia Grande","0":"Praia Grande","CountryCode":"BRA","1":"BRA","Population":"168434","2":"168434"},{"Name":"Marab\u00e1","0":"Marab\u00e1","CountryCode":"BRA","1":"BRA","Population":"167795","2":"167795"},{"Name":"Crici\u00fama","0":"Crici\u00fama","CountryCode":"BRA","1":"BRA","Population":"167661","2":"167661"},{"Name":"Boa Vista","0":"Boa Vista","CountryCode":"BRA","1":"BRA","Population":"167185","2":"167185"},{"Name":"Passo Fundo","0":"Passo Fundo","CountryCode":"BRA","1":"BRA","Population":"166343","2":"166343"},{"Name":"Dourados","0":"Dourados","CountryCode":"BRA","1":"BRA","Population":"164716","2":"164716"},{"Name":"Santa Luzia","0":"Santa Luzia","CountryCode":"BRA","1":"BRA","Population":"164704","2":"164704"},{"Name":"Rio Claro","0":"Rio Claro","CountryCode":"BRA","1":"BRA","Population":"163551","2":"163551"},{"Name":"Maracana\u00fa","0":"Maracana\u00fa","CountryCode":"BRA","1":"BRA","Population":"162022","2":"162022"},{"Name":"Guarapuava","0":"Guarapuava","CountryCode":"BRA","1":"BRA","Population":"160510","2":"160510"},{"Name":"Rondon\u00f3polis","0":"Rondon\u00f3polis","CountryCode":"BRA","1":"BRA","Population":"155115","2":"155115"},{"Name":"S\u00e3o Jos\u00e9","0":"S\u00e3o Jos\u00e9","CountryCode":"BRA","1":"BRA","Population":"155105","2":"155105"},{"Name":"Cachoeiro de Itapemirim","0":"Cachoeiro de Itapemirim","CountryCode":"BRA","1":"BRA","Population":"155024","2":"155024"},{"Name":"Nil\u00f3polis","0":"Nil\u00f3polis","CountryCode":"BRA","1":"BRA","Population":"153383","2":"153383"},{"Name":"Itapevi","0":"Itapevi","CountryCode":"BRA","1":"BRA","Population":"150664","2":"150664"},{"Name":"Cabo de Santo Agostinho","0":"Cabo de Santo Agostinho","CountryCode":"BRA","1":"BRA","Population":"149964","2":"149964"},{"Name":"Cama\u00e7ari","0":"Cama\u00e7ari","CountryCode":"BRA","1":"BRA","Population":"149146","2":"149146"},{"Name":"Sobral","0":"Sobral","CountryCode":"BRA","1":"BRA","Population":"146005","2":"146005"},{"Name":"Itaja\u00ed","0":"Itaja\u00ed","CountryCode":"BRA","1":"BRA","Population":"145197","2":"145197"},{"Name":"Chapec\u00f3","0":"Chapec\u00f3","CountryCode":"BRA","1":"BRA","Population":"144158","2":"144158"},{"Name":"Cotia","0":"Cotia","CountryCode":"BRA","1":"BRA","Population":"140042","2":"140042"},{"Name":"Lages","0":"Lages","CountryCode":"BRA","1":"BRA","Population":"139570","2":"139570"},{"Name":"Ferraz de Vasconcelos","0":"Ferraz de Vasconcelos","CountryCode":"BRA","1":"BRA","Population":"139283","2":"139283"},{"Name":"Indaiatuba","0":"Indaiatuba","CountryCode":"BRA","1":"BRA","Population":"135968","2":"135968"},{"Name":"Hortol\u00e2ndia","0":"Hortol\u00e2ndia","CountryCode":"BRA","1":"BRA","Population":"135755","2":"135755"},{"Name":"Caxias","0":"Caxias","CountryCode":"BRA","1":"BRA","Population":"133980","2":"133980"},{"Name":"S\u00e3o Caetano do Sul","0":"S\u00e3o Caetano do Sul","CountryCode":"BRA","1":"BRA","Population":"133321","2":"133321"},{"Name":"Itu","0":"Itu","CountryCode":"BRA","1":"BRA","Population":"132736","2":"132736"},{"Name":"Nossa Senhora do Socorro","0":"Nossa Senhora do Socorro","CountryCode":"BRA","1":"BRA","Population":"131351","2":"131351"},{"Name":"Parna\u00edba","0":"Parna\u00edba","CountryCode":"BRA","1":"BRA","Population":"129756","2":"129756"},{"Name":"Po\u00e7os de Caldas","0":"Po\u00e7os de Caldas","CountryCode":"BRA","1":"BRA","Population":"129683","2":"129683"},{"Name":"Teres\u00f3polis","0":"Teres\u00f3polis","CountryCode":"BRA","1":"BRA","Population":"128079","2":"128079"},{"Name":"Barreiras","0":"Barreiras","CountryCode":"BRA","1":"BRA","Population":"127801","2":"127801"},{"Name":"Castanhal","0":"Castanhal","CountryCode":"BRA","1":"BRA","Population":"127634","2":"127634"},{"Name":"Alagoinhas","0":"Alagoinhas","CountryCode":"BRA","1":"BRA","Population":"126820","2":"126820"},{"Name":"Itapecerica da Serra","0":"Itapecerica da Serra","CountryCode":"BRA","1":"BRA","Population":"126672","2":"126672"},{"Name":"Uruguaiana","0":"Uruguaiana","CountryCode":"BRA","1":"BRA","Population":"126305","2":"126305"},{"Name":"Paranagu\u00e1","0":"Paranagu\u00e1","CountryCode":"BRA","1":"BRA","Population":"126076","2":"126076"},{"Name":"Ibirit\u00e9","0":"Ibirit\u00e9","CountryCode":"BRA","1":"BRA","Population":"125982","2":"125982"},{"Name":"Timon","0":"Timon","CountryCode":"BRA","1":"BRA","Population":"125812","2":"125812"},{"Name":"Luzi\u00e2nia","0":"Luzi\u00e2nia","CountryCode":"BRA","1":"BRA","Population":"125597","2":"125597"},{"Name":"Maca\u00e9","0":"Maca\u00e9","CountryCode":"BRA","1":"BRA","Population":"125597","2":"125597"},{"Name":"Te\u00f3filo Otoni","0":"Te\u00f3filo Otoni","CountryCode":"BRA","1":"BRA","Population":"124489","2":"124489"},{"Name":"Moji-Gua\u00e7u","0":"Moji-Gua\u00e7u","CountryCode":"BRA","1":"BRA","Population":"123782","2":"123782"},{"Name":"Palmas","0":"Palmas","CountryCode":"BRA","1":"BRA","Population":"121919","2":"121919"},{"Name":"Pindamonhangaba","0":"Pindamonhangaba","CountryCode":"BRA","1":"BRA","Population":"121904","2":"121904"},{"Name":"Francisco Morato","0":"Francisco Morato","CountryCode":"BRA","1":"BRA","Population":"121197","2":"121197"},{"Name":"Bag\u00e9","0":"Bag\u00e9","CountryCode":"BRA","1":"BRA","Population":"120793","2":"120793"},{"Name":"Sapucaia do Sul","0":"Sapucaia do Sul","CountryCode":"BRA","1":"BRA","Population":"120217","2":"120217"},{"Name":"Cabo Frio","0":"Cabo Frio","CountryCode":"BRA","1":"BRA","Population":"119503","2":"119503"},{"Name":"Itapetininga","0":"Itapetininga","CountryCode":"BRA","1":"BRA","Population":"119391","2":"119391"},{"Name":"Patos de Minas","0":"Patos de Minas","CountryCode":"BRA","1":"BRA","Population":"119262","2":"119262"},{"Name":"Camaragibe","0":"Camaragibe","CountryCode":"BRA","1":"BRA","Population":"118968","2":"118968"},{"Name":"Bragan\u00e7a Paulista","0":"Bragan\u00e7a Paulista","CountryCode":"BRA","1":"BRA","Population":"116929","2":"116929"},{"Name":"Queimados","0":"Queimados","CountryCode":"BRA","1":"BRA","Population":"115020","2":"115020"},{"Name":"Aragua\u00edna","0":"Aragua\u00edna","CountryCode":"BRA","1":"BRA","Population":"114948","2":"114948"},{"Name":"Garanhuns","0":"Garanhuns","CountryCode":"BRA","1":"BRA","Population":"114603","2":"114603"},{"Name":"Vit\u00f3ria de Santo Ant\u00e3o","0":"Vit\u00f3ria de Santo Ant\u00e3o","CountryCode":"BRA","1":"BRA","Population":"113595","2":"113595"},{"Name":"Santa Rita","0":"Santa Rita","CountryCode":"BRA","1":"BRA","Population":"113135","2":"113135"},{"Name":"Barbacena","0":"Barbacena","CountryCode":"BRA","1":"BRA","Population":"113079","2":"113079"},{"Name":"Abaetetuba","0":"Abaetetuba","CountryCode":"BRA","1":"BRA","Population":"111258","2":"111258"},{"Name":"Ja\u00fa","0":"Ja\u00fa","CountryCode":"BRA","1":"BRA","Population":"109965","2":"109965"},{"Name":"Lauro de Freitas","0":"Lauro de Freitas","CountryCode":"BRA","1":"BRA","Population":"109236","2":"109236"},{"Name":"Franco da Rocha","0":"Franco da Rocha","CountryCode":"BRA","1":"BRA","Population":"108964","2":"108964"},{"Name":"Teixeira de Freitas","0":"Teixeira de Freitas","CountryCode":"BRA","1":"BRA","Population":"108441","2":"108441"},{"Name":"Varginha","0":"Varginha","CountryCode":"BRA","1":"BRA","Population":"108314","2":"108314"},{"Name":"Ribeir\u00e3o Pires","0":"Ribeir\u00e3o Pires","CountryCode":"BRA","1":"BRA","Population":"108121","2":"108121"},{"Name":"Sabar\u00e1","0":"Sabar\u00e1","CountryCode":"BRA","1":"BRA","Population":"107781","2":"107781"},{"Name":"Catanduva","0":"Catanduva","CountryCode":"BRA","1":"BRA","Population":"107761","2":"107761"},{"Name":"Rio Verde","0":"Rio Verde","CountryCode":"BRA","1":"BRA","Population":"107755","2":"107755"},{"Name":"Botucatu","0":"Botucatu","CountryCode":"BRA","1":"BRA","Population":"107663","2":"107663"},{"Name":"Colatina","0":"Colatina","CountryCode":"BRA","1":"BRA","Population":"107354","2":"107354"},{"Name":"Santa Cruz do Sul","0":"Santa Cruz do Sul","CountryCode":"BRA","1":"BRA","Population":"106734","2":"106734"},{"Name":"Linhares","0":"Linhares","CountryCode":"BRA","1":"BRA","Population":"106278","2":"106278"},{"Name":"Apucarana","0":"Apucarana","CountryCode":"BRA","1":"BRA","Population":"105114","2":"105114"},{"Name":"Barretos","0":"Barretos","CountryCode":"BRA","1":"BRA","Population":"104156","2":"104156"},{"Name":"Guaratinguet\u00e1","0":"Guaratinguet\u00e1","CountryCode":"BRA","1":"BRA","Population":"103433","2":"103433"},{"Name":"Cachoeirinha","0":"Cachoeirinha","CountryCode":"BRA","1":"BRA","Population":"103240","2":"103240"},{"Name":"Cod\u00f3","0":"Cod\u00f3","CountryCode":"BRA","1":"BRA","Population":"103153","2":"103153"},{"Name":"Jaragu\u00e1 do Sul","0":"Jaragu\u00e1 do Sul","CountryCode":"BRA","1":"BRA","Population":"102580","2":"102580"},{"Name":"Cubat\u00e3o","0":"Cubat\u00e3o","CountryCode":"BRA","1":"BRA","Population":"102372","2":"102372"},{"Name":"Itabira","0":"Itabira","CountryCode":"BRA","1":"BRA","Population":"102217","2":"102217"},{"Name":"Itaituba","0":"Itaituba","CountryCode":"BRA","1":"BRA","Population":"101320","2":"101320"},{"Name":"Araras","0":"Araras","CountryCode":"BRA","1":"BRA","Population":"101046","2":"101046"},{"Name":"Resende","0":"Resende","CountryCode":"BRA","1":"BRA","Population":"100627","2":"100627"},{"Name":"Atibaia","0":"Atibaia","CountryCode":"BRA","1":"BRA","Population":"100356","2":"100356"},{"Name":"Pouso Alegre","0":"Pouso Alegre","CountryCode":"BRA","1":"BRA","Population":"100028","2":"100028"},{"Name":"Toledo","0":"Toledo","CountryCode":"BRA","1":"BRA","Population":"99387","2":"99387"},{"Name":"Crato","0":"Crato","CountryCode":"BRA","1":"BRA","Population":"98965","2":"98965"},{"Name":"Passos","0":"Passos","CountryCode":"BRA","1":"BRA","Population":"98570","2":"98570"},{"Name":"Araguari","0":"Araguari","CountryCode":"BRA","1":"BRA","Population":"98399","2":"98399"},{"Name":"S\u00e3o Jos\u00e9 de Ribamar","0":"S\u00e3o Jos\u00e9 de Ribamar","CountryCode":"BRA","1":"BRA","Population":"98318","2":"98318"},{"Name":"Pinhais","0":"Pinhais","CountryCode":"BRA","1":"BRA","Population":"98198","2":"98198"},{"Name":"Sert\u00e3ozinho","0":"Sert\u00e3ozinho","CountryCode":"BRA","1":"BRA","Population":"98140","2":"98140"},{"Name":"Conselheiro Lafaiete","0":"Conselheiro Lafaiete","CountryCode":"BRA","1":"BRA","Population":"97507","2":"97507"},{"Name":"Paulo Afonso","0":"Paulo Afonso","CountryCode":"BRA","1":"BRA","Population":"97291","2":"97291"},{"Name":"Angra dos Reis","0":"Angra dos Reis","CountryCode":"BRA","1":"BRA","Population":"96864","2":"96864"},{"Name":"Eun\u00e1polis","0":"Eun\u00e1polis","CountryCode":"BRA","1":"BRA","Population":"96610","2":"96610"},{"Name":"Salto","0":"Salto","CountryCode":"BRA","1":"BRA","Population":"96348","2":"96348"},{"Name":"Ourinhos","0":"Ourinhos","CountryCode":"BRA","1":"BRA","Population":"96291","2":"96291"},{"Name":"Parnamirim","0":"Parnamirim","CountryCode":"BRA","1":"BRA","Population":"96210","2":"96210"},{"Name":"Jacobina","0":"Jacobina","CountryCode":"BRA","1":"BRA","Population":"96131","2":"96131"},{"Name":"Coronel Fabriciano","0":"Coronel Fabriciano","CountryCode":"BRA","1":"BRA","Population":"95933","2":"95933"},{"Name":"Birigui","0":"Birigui","CountryCode":"BRA","1":"BRA","Population":"94685","2":"94685"},{"Name":"Tatu\u00ed","0":"Tatu\u00ed","CountryCode":"BRA","1":"BRA","Population":"93897","2":"93897"},{"Name":"Ji-Paran\u00e1","0":"Ji-Paran\u00e1","CountryCode":"BRA","1":"BRA","Population":"93346","2":"93346"},{"Name":"Bacabal","0":"Bacabal","CountryCode":"BRA","1":"BRA","Population":"93121","2":"93121"},{"Name":"Camet\u00e1","0":"Camet\u00e1","CountryCode":"BRA","1":"BRA","Population":"92779","2":"92779"},{"Name":"Gua\u00edba","0":"Gua\u00edba","CountryCode":"BRA","1":"BRA","Population":"92224","2":"92224"},{"Name":"S\u00e3o Louren\u00e7o da Mata","0":"S\u00e3o Louren\u00e7o da Mata","CountryCode":"BRA","1":"BRA","Population":"91999","2":"91999"},{"Name":"Santana do Livramento","0":"Santana do Livramento","CountryCode":"BRA","1":"BRA","Population":"91779","2":"91779"},{"Name":"Votorantim","0":"Votorantim","CountryCode":"BRA","1":"BRA","Population":"91777","2":"91777"},{"Name":"Campo Largo","0":"Campo Largo","CountryCode":"BRA","1":"BRA","Population":"91203","2":"91203"},{"Name":"Patos","0":"Patos","CountryCode":"BRA","1":"BRA","Population":"90519","2":"90519"},{"Name":"Ituiutaba","0":"Ituiutaba","CountryCode":"BRA","1":"BRA","Population":"90507","2":"90507"},{"Name":"Corumb\u00e1","0":"Corumb\u00e1","CountryCode":"BRA","1":"BRA","Population":"90111","2":"90111"},{"Name":"Palho\u00e7a","0":"Palho\u00e7a","CountryCode":"BRA","1":"BRA","Population":"89465","2":"89465"},{"Name":"Barra do Pira\u00ed","0":"Barra do Pira\u00ed","CountryCode":"BRA","1":"BRA","Population":"89388","2":"89388"},{"Name":"Bento Gon\u00e7alves","0":"Bento Gon\u00e7alves","CountryCode":"BRA","1":"BRA","Population":"89254","2":"89254"},{"Name":"Po\u00e1","0":"Po\u00e1","CountryCode":"BRA","1":"BRA","Population":"89236","2":"89236"},{"Name":"\u00c1guas Lindas de Goi\u00e1s","0":"\u00c1guas Lindas de Goi\u00e1s","CountryCode":"BRA","1":"BRA","Population":"89200","2":"89200"},{"Name":"London","0":"London","CountryCode":"GBR","1":"GBR","Population":"7285000","2":"7285000"},{"Name":"Birmingham","0":"Birmingham","CountryCode":"GBR","1":"GBR","Population":"1013000","2":"1013000"},{"Name":"Glasgow","0":"Glasgow","CountryCode":"GBR","1":"GBR","Population":"619680","2":"619680"},{"Name":"Liverpool","0":"Liverpool","CountryCode":"GBR","1":"GBR","Population":"461000","2":"461000"},{"Name":"Edinburgh","0":"Edinburgh","CountryCode":"GBR","1":"GBR","Population":"450180","2":"450180"},{"Name":"Sheffield","0":"Sheffield","CountryCode":"GBR","1":"GBR","Population":"431607","2":"431607"},{"Name":"Manchester","0":"Manchester","CountryCode":"GBR","1":"GBR","Population":"430000","2":"430000"},{"Name":"Leeds","0":"Leeds","CountryCode":"GBR","1":"GBR","Population":"424194","2":"424194"},{"Name":"Bristol","0":"Bristol","CountryCode":"GBR","1":"GBR","Population":"402000","2":"402000"},{"Name":"Cardiff","0":"Cardiff","CountryCode":"GBR","1":"GBR","Population":"321000","2":"321000"},{"Name":"Coventry","0":"Coventry","CountryCode":"GBR","1":"GBR","Population":"304000","2":"304000"},{"Name":"Leicester","0":"Leicester","CountryCode":"GBR","1":"GBR","Population":"294000","2":"294000"},{"Name":"Bradford","0":"Bradford","CountryCode":"GBR","1":"GBR","Population":"289376","2":"289376"},{"Name":"Belfast","0":"Belfast","CountryCode":"GBR","1":"GBR","Population":"287500","2":"287500"},{"Name":"Nottingham","0":"Nottingham","CountryCode":"GBR","1":"GBR","Population":"287000","2":"287000"},{"Name":"Kingston upon Hull","0":"Kingston upon Hull","CountryCode":"GBR","1":"GBR","Population":"262000","2":"262000"},{"Name":"Plymouth","0":"Plymouth","CountryCode":"GBR","1":"GBR","Population":"253000","2":"253000"},{"Name":"Stoke-on-Trent","0":"Stoke-on-Trent","CountryCode":"GBR","1":"GBR","Population":"252000","2":"252000"},{"Name":"Wolverhampton","0":"Wolverhampton","CountryCode":"GBR","1":"GBR","Population":"242000","2":"242000"},{"Name":"Derby","0":"Derby","CountryCode":"GBR","1":"GBR","Population":"236000","2":"236000"},{"Name":"Swansea","0":"Swansea","CountryCode":"GBR","1":"GBR","Population":"230000","2":"230000"},{"Name":"Southampton","0":"Southampton","CountryCode":"GBR","1":"GBR","Population":"216000","2":"216000"},{"Name":"Aberdeen","0":"Aberdeen","CountryCode":"GBR","1":"GBR","Population":"213070","2":"213070"},{"Name":"Northampton","0":"Northampton","CountryCode":"GBR","1":"GBR","Population":"196000","2":"196000"},{"Name":"Dudley","0":"Dudley","CountryCode":"GBR","1":"GBR","Population":"192171","2":"192171"},{"Name":"Portsmouth","0":"Portsmouth","CountryCode":"GBR","1":"GBR","Population":"190000","2":"190000"},{"Name":"Newcastle upon Tyne","0":"Newcastle upon Tyne","CountryCode":"GBR","1":"GBR","Population":"189150","2":"189150"},{"Name":"Sunderland","0":"Sunderland","CountryCode":"GBR","1":"GBR","Population":"183310","2":"183310"},{"Name":"Luton","0":"Luton","CountryCode":"GBR","1":"GBR","Population":"183000","2":"183000"},{"Name":"Swindon","0":"Swindon","CountryCode":"GBR","1":"GBR","Population":"180000","2":"180000"},{"Name":"Southend-on-Sea","0":"Southend-on-Sea","CountryCode":"GBR","1":"GBR","Population":"176000","2":"176000"},{"Name":"Walsall","0":"Walsall","CountryCode":"GBR","1":"GBR","Population":"174739","2":"174739"},{"Name":"Bournemouth","0":"Bournemouth","CountryCode":"GBR","1":"GBR","Population":"162000","2":"162000"},{"Name":"Peterborough","0":"Peterborough","CountryCode":"GBR","1":"GBR","Population":"156000","2":"156000"},{"Name":"Brighton","0":"Brighton","CountryCode":"GBR","1":"GBR","Population":"156124","2":"156124"},{"Name":"Blackpool","0":"Blackpool","CountryCode":"GBR","1":"GBR","Population":"151000","2":"151000"},{"Name":"Dundee","0":"Dundee","CountryCode":"GBR","1":"GBR","Population":"146690","2":"146690"},{"Name":"West Bromwich","0":"West Bromwich","CountryCode":"GBR","1":"GBR","Population":"146386","2":"146386"},{"Name":"Reading","0":"Reading","CountryCode":"GBR","1":"GBR","Population":"148000","2":"148000"},{"Name":"Oldbury\/Smethwick (Warley)","0":"Oldbury\/Smethwick (Warley)","CountryCode":"GBR","1":"GBR","Population":"145542","2":"145542"},{"Name":"Middlesbrough","0":"Middlesbrough","CountryCode":"GBR","1":"GBR","Population":"145000","2":"145000"},{"Name":"Huddersfield","0":"Huddersfield","CountryCode":"GBR","1":"GBR","Population":"143726","2":"143726"},{"Name":"Oxford","0":"Oxford","CountryCode":"GBR","1":"GBR","Population":"144000","2":"144000"},{"Name":"Poole","0":"Poole","CountryCode":"GBR","1":"GBR","Population":"141000","2":"141000"},{"Name":"Bolton","0":"Bolton","CountryCode":"GBR","1":"GBR","Population":"139020","2":"139020"},{"Name":"Blackburn","0":"Blackburn","CountryCode":"GBR","1":"GBR","Population":"140000","2":"140000"},{"Name":"Newport","0":"Newport","CountryCode":"GBR","1":"GBR","Population":"139000","2":"139000"},{"Name":"Preston","0":"Preston","CountryCode":"GBR","1":"GBR","Population":"135000","2":"135000"},{"Name":"Stockport","0":"Stockport","CountryCode":"GBR","1":"GBR","Population":"132813","2":"132813"},{"Name":"Norwich","0":"Norwich","CountryCode":"GBR","1":"GBR","Population":"124000","2":"124000"},{"Name":"Rotherham","0":"Rotherham","CountryCode":"GBR","1":"GBR","Population":"121380","2":"121380"},{"Name":"Cambridge","0":"Cambridge","CountryCode":"GBR","1":"GBR","Population":"121000","2":"121000"},{"Name":"Watford","0":"Watford","CountryCode":"GBR","1":"GBR","Population":"113080","2":"113080"},{"Name":"Ipswich","0":"Ipswich","CountryCode":"GBR","1":"GBR","Population":"114000","2":"114000"},{"Name":"Slough","0":"Slough","CountryCode":"GBR","1":"GBR","Population":"112000","2":"112000"},{"Name":"Exeter","0":"Exeter","CountryCode":"GBR","1":"GBR","Population":"111000","2":"111000"},{"Name":"Cheltenham","0":"Cheltenham","CountryCode":"GBR","1":"GBR","Population":"106000","2":"106000"},{"Name":"Gloucester","0":"Gloucester","CountryCode":"GBR","1":"GBR","Population":"107000","2":"107000"},{"Name":"Saint Helens","0":"Saint Helens","CountryCode":"GBR","1":"GBR","Population":"106293","2":"106293"},{"Name":"Sutton Coldfield","0":"Sutton Coldfield","CountryCode":"GBR","1":"GBR","Population":"106001","2":"106001"},{"Name":"York","0":"York","CountryCode":"GBR","1":"GBR","Population":"104425","2":"104425"},{"Name":"Oldham","0":"Oldham","CountryCode":"GBR","1":"GBR","Population":"103931","2":"103931"},{"Name":"Basildon","0":"Basildon","CountryCode":"GBR","1":"GBR","Population":"100924","2":"100924"},{"Name":"Worthing","0":"Worthing","CountryCode":"GBR","1":"GBR","Population":"100000","2":"100000"},{"Name":"Chelmsford","0":"Chelmsford","CountryCode":"GBR","1":"GBR","Population":"97451","2":"97451"},{"Name":"Colchester","0":"Colchester","CountryCode":"GBR","1":"GBR","Population":"96063","2":"96063"},{"Name":"Crawley","0":"Crawley","CountryCode":"GBR","1":"GBR","Population":"97000","2":"97000"},{"Name":"Gillingham","0":"Gillingham","CountryCode":"GBR","1":"GBR","Population":"92000","2":"92000"},{"Name":"Solihull","0":"Solihull","CountryCode":"GBR","1":"GBR","Population":"94531","2":"94531"},{"Name":"Rochdale","0":"Rochdale","CountryCode":"GBR","1":"GBR","Population":"94313","2":"94313"},{"Name":"Birkenhead","0":"Birkenhead","CountryCode":"GBR","1":"GBR","Population":"93087","2":"93087"},{"Name":"Worcester","0":"Worcester","CountryCode":"GBR","1":"GBR","Population":"95000","2":"95000"},{"Name":"Hartlepool","0":"Hartlepool","CountryCode":"GBR","1":"GBR","Population":"92000","2":"92000"},{"Name":"Halifax","0":"Halifax","CountryCode":"GBR","1":"GBR","Population":"91069","2":"91069"},{"Name":"Woking\/Byfleet","0":"Woking\/Byfleet","CountryCode":"GBR","1":"GBR","Population":"92000","2":"92000"},{"Name":"Southport","0":"Southport","CountryCode":"GBR","1":"GBR","Population":"90959","2":"90959"},{"Name":"Maidstone","0":"Maidstone","CountryCode":"GBR","1":"GBR","Population":"90878","2":"90878"},{"Name":"Eastbourne","0":"Eastbourne","CountryCode":"GBR","1":"GBR","Population":"90000","2":"90000"},{"Name":"Grimsby","0":"Grimsby","CountryCode":"GBR","1":"GBR","Population":"89000","2":"89000"},{"Name":"Saint Helier","0":"Saint Helier","CountryCode":"GBR","1":"GBR","Population":"27523","2":"27523"},{"Name":"Douglas","0":"Douglas","CountryCode":"GBR","1":"GBR","Population":"23487","2":"23487"},{"Name":"Road Town","0":"Road Town","CountryCode":"VGB","1":"VGB","Population":"8000","2":"8000"},{"Name":"Bandar Seri Begawan","0":"Bandar Seri Begawan","CountryCode":"BRN","1":"BRN","Population":"21484","2":"21484"},{"Name":"Sofija","0":"Sofija","CountryCode":"BGR","1":"BGR","Population":"1122302","2":"1122302"},{"Name":"Plovdiv","0":"Plovdiv","CountryCode":"BGR","1":"BGR","Population":"342584","2":"342584"},{"Name":"Varna","0":"Varna","CountryCode":"BGR","1":"BGR","Population":"299801","2":"299801"},{"Name":"Burgas","0":"Burgas","CountryCode":"BGR","1":"BGR","Population":"195255","2":"195255"},{"Name":"Ruse","0":"Ruse","CountryCode":"BGR","1":"BGR","Population":"166467","2":"166467"},{"Name":"Stara Zagora","0":"Stara Zagora","CountryCode":"BGR","1":"BGR","Population":"147939","2":"147939"},{"Name":"Pleven","0":"Pleven","CountryCode":"BGR","1":"BGR","Population":"121952","2":"121952"},{"Name":"Sliven","0":"Sliven","CountryCode":"BGR","1":"BGR","Population":"105530","2":"105530"},{"Name":"Dobric","0":"Dobric","CountryCode":"BGR","1":"BGR","Population":"100399","2":"100399"},{"Name":"\u0160umen","0":"\u0160umen","CountryCode":"BGR","1":"BGR","Population":"94686","2":"94686"},{"Name":"Ouagadougou","0":"Ouagadougou","CountryCode":"BFA","1":"BFA","Population":"824000","2":"824000"},{"Name":"Bobo-Dioulasso","0":"Bobo-Dioulasso","CountryCode":"BFA","1":"BFA","Population":"300000","2":"300000"},{"Name":"Koudougou","0":"Koudougou","CountryCode":"BFA","1":"BFA","Population":"105000","2":"105000"},{"Name":"Bujumbura","0":"Bujumbura","CountryCode":"BDI","1":"BDI","Population":"300000","2":"300000"},{"Name":"George Town","0":"George Town","CountryCode":"CYM","1":"CYM","Population":"19600","2":"19600"},{"Name":"Santiago de Chile","0":"Santiago de Chile","CountryCode":"CHL","1":"CHL","Population":"4703954","2":"4703954"},{"Name":"Puente Alto","0":"Puente Alto","CountryCode":"CHL","1":"CHL","Population":"386236","2":"386236"},{"Name":"Vi\u00f1a del Mar","0":"Vi\u00f1a del Mar","CountryCode":"CHL","1":"CHL","Population":"312493","2":"312493"},{"Name":"Valpara\u00edso","0":"Valpara\u00edso","CountryCode":"CHL","1":"CHL","Population":"293800","2":"293800"},{"Name":"Talcahuano","0":"Talcahuano","CountryCode":"CHL","1":"CHL","Population":"277752","2":"277752"},{"Name":"Antofagasta","0":"Antofagasta","CountryCode":"CHL","1":"CHL","Population":"251429","2":"251429"},{"Name":"San Bernardo","0":"San Bernardo","CountryCode":"CHL","1":"CHL","Population":"241910","2":"241910"},{"Name":"Temuco","0":"Temuco","CountryCode":"CHL","1":"CHL","Population":"233041","2":"233041"},{"Name":"Concepci\u00f3n","0":"Concepci\u00f3n","CountryCode":"CHL","1":"CHL","Population":"217664","2":"217664"},{"Name":"Rancagua","0":"Rancagua","CountryCode":"CHL","1":"CHL","Population":"212977","2":"212977"},{"Name":"Arica","0":"Arica","CountryCode":"CHL","1":"CHL","Population":"189036","2":"189036"},{"Name":"Talca","0":"Talca","CountryCode":"CHL","1":"CHL","Population":"187557","2":"187557"},{"Name":"Chill\u00e1n","0":"Chill\u00e1n","CountryCode":"CHL","1":"CHL","Population":"178182","2":"178182"},{"Name":"Iquique","0":"Iquique","CountryCode":"CHL","1":"CHL","Population":"177892","2":"177892"},{"Name":"Los Angeles","0":"Los Angeles","CountryCode":"CHL","1":"CHL","Population":"158215","2":"158215"},{"Name":"Puerto Montt","0":"Puerto Montt","CountryCode":"CHL","1":"CHL","Population":"152194","2":"152194"},{"Name":"Coquimbo","0":"Coquimbo","CountryCode":"CHL","1":"CHL","Population":"143353","2":"143353"},{"Name":"Osorno","0":"Osorno","CountryCode":"CHL","1":"CHL","Population":"141468","2":"141468"},{"Name":"La Serena","0":"La Serena","CountryCode":"CHL","1":"CHL","Population":"137409","2":"137409"},{"Name":"Calama","0":"Calama","CountryCode":"CHL","1":"CHL","Population":"137265","2":"137265"},{"Name":"Valdivia","0":"Valdivia","CountryCode":"CHL","1":"CHL","Population":"133106","2":"133106"},{"Name":"Punta Arenas","0":"Punta Arenas","CountryCode":"CHL","1":"CHL","Population":"125631","2":"125631"},{"Name":"Copiap\u00f3","0":"Copiap\u00f3","CountryCode":"CHL","1":"CHL","Population":"120128","2":"120128"},{"Name":"Quilpu\u00e9","0":"Quilpu\u00e9","CountryCode":"CHL","1":"CHL","Population":"118857","2":"118857"},{"Name":"Curic\u00f3","0":"Curic\u00f3","CountryCode":"CHL","1":"CHL","Population":"115766","2":"115766"},{"Name":"Ovalle","0":"Ovalle","CountryCode":"CHL","1":"CHL","Population":"94854","2":"94854"},{"Name":"Coronel","0":"Coronel","CountryCode":"CHL","1":"CHL","Population":"93061","2":"93061"},{"Name":"San Pedro de la Paz","0":"San Pedro de la Paz","CountryCode":"CHL","1":"CHL","Population":"91684","2":"91684"},{"Name":"Melipilla","0":"Melipilla","CountryCode":"CHL","1":"CHL","Population":"91056","2":"91056"},{"Name":"Avarua","0":"Avarua","CountryCode":"COK","1":"COK","Population":"11900","2":"11900"},{"Name":"San Jos\u00e9","0":"San Jos\u00e9","CountryCode":"CRI","1":"CRI","Population":"339131","2":"339131"},{"Name":"Djibouti","0":"Djibouti","CountryCode":"DJI","1":"DJI","Population":"383000","2":"383000"},{"Name":"Roseau","0":"Roseau","CountryCode":"DMA","1":"DMA","Population":"16243","2":"16243"},{"Name":"Santo Domingo de Guzm\u00e1n","0":"Santo Domingo de Guzm\u00e1n","CountryCode":"DOM","1":"DOM","Population":"1609966","2":"1609966"},{"Name":"Santiago de los Caballeros","0":"Santiago de los Caballeros","CountryCode":"DOM","1":"DOM","Population":"365463","2":"365463"},{"Name":"La Romana","0":"La Romana","CountryCode":"DOM","1":"DOM","Population":"140204","2":"140204"},{"Name":"San Pedro de Macor\u00eds","0":"San Pedro de Macor\u00eds","CountryCode":"DOM","1":"DOM","Population":"124735","2":"124735"},{"Name":"San Francisco de Macor\u00eds","0":"San Francisco de Macor\u00eds","CountryCode":"DOM","1":"DOM","Population":"108485","2":"108485"},{"Name":"San Felipe de Puerto Plata","0":"San Felipe de Puerto Plata","CountryCode":"DOM","1":"DOM","Population":"89423","2":"89423"},{"Name":"Guayaquil","0":"Guayaquil","CountryCode":"ECU","1":"ECU","Population":"2070040","2":"2070040"},{"Name":"Quito","0":"Quito","CountryCode":"ECU","1":"ECU","Population":"1573458","2":"1573458"},{"Name":"Cuenca","0":"Cuenca","CountryCode":"ECU","1":"ECU","Population":"270353","2":"270353"},{"Name":"Machala","0":"Machala","CountryCode":"ECU","1":"ECU","Population":"210368","2":"210368"},{"Name":"Santo Domingo de los Colorados","0":"Santo Domingo de los Colorados","CountryCode":"ECU","1":"ECU","Population":"202111","2":"202111"},{"Name":"Portoviejo","0":"Portoviejo","CountryCode":"ECU","1":"ECU","Population":"176413","2":"176413"},{"Name":"Ambato","0":"Ambato","CountryCode":"ECU","1":"ECU","Population":"169612","2":"169612"},{"Name":"Manta","0":"Manta","CountryCode":"ECU","1":"ECU","Population":"164739","2":"164739"},{"Name":"Duran [Eloy Alfaro]","0":"Duran [Eloy Alfaro]","CountryCode":"ECU","1":"ECU","Population":"152514","2":"152514"},{"Name":"Ibarra","0":"Ibarra","CountryCode":"ECU","1":"ECU","Population":"130643","2":"130643"},{"Name":"Quevedo","0":"Quevedo","CountryCode":"ECU","1":"ECU","Population":"129631","2":"129631"},{"Name":"Milagro","0":"Milagro","CountryCode":"ECU","1":"ECU","Population":"124177","2":"124177"},{"Name":"Loja","0":"Loja","CountryCode":"ECU","1":"ECU","Population":"123875","2":"123875"},{"Name":"R\u00edobamba","0":"R\u00edobamba","CountryCode":"ECU","1":"ECU","Population":"123163","2":"123163"},{"Name":"Esmeraldas","0":"Esmeraldas","CountryCode":"ECU","1":"ECU","Population":"123045","2":"123045"},{"Name":"Cairo","0":"Cairo","CountryCode":"EGY","1":"EGY","Population":"6789479","2":"6789479"},{"Name":"Alexandria","0":"Alexandria","CountryCode":"EGY","1":"EGY","Population":"3328196","2":"3328196"},{"Name":"Giza","0":"Giza","CountryCode":"EGY","1":"EGY","Population":"2221868","2":"2221868"},{"Name":"Shubra al-Khayma","0":"Shubra al-Khayma","CountryCode":"EGY","1":"EGY","Population":"870716","2":"870716"},{"Name":"Port Said","0":"Port Said","CountryCode":"EGY","1":"EGY","Population":"469533","2":"469533"},{"Name":"Suez","0":"Suez","CountryCode":"EGY","1":"EGY","Population":"417610","2":"417610"},{"Name":"al-Mahallat al-Kubra","0":"al-Mahallat al-Kubra","CountryCode":"EGY","1":"EGY","Population":"395402","2":"395402"},{"Name":"Tanta","0":"Tanta","CountryCode":"EGY","1":"EGY","Population":"371010","2":"371010"},{"Name":"al-Mansura","0":"al-Mansura","CountryCode":"EGY","1":"EGY","Population":"369621","2":"369621"},{"Name":"Luxor","0":"Luxor","CountryCode":"EGY","1":"EGY","Population":"360503","2":"360503"},{"Name":"Asyut","0":"Asyut","CountryCode":"EGY","1":"EGY","Population":"343498","2":"343498"},{"Name":"Bahtim","0":"Bahtim","CountryCode":"EGY","1":"EGY","Population":"275807","2":"275807"},{"Name":"Zagazig","0":"Zagazig","CountryCode":"EGY","1":"EGY","Population":"267351","2":"267351"},{"Name":"al-Faiyum","0":"al-Faiyum","CountryCode":"EGY","1":"EGY","Population":"260964","2":"260964"},{"Name":"Ismailia","0":"Ismailia","CountryCode":"EGY","1":"EGY","Population":"254477","2":"254477"},{"Name":"Kafr al-Dawwar","0":"Kafr al-Dawwar","CountryCode":"EGY","1":"EGY","Population":"231978","2":"231978"},{"Name":"Assuan","0":"Assuan","CountryCode":"EGY","1":"EGY","Population":"219017","2":"219017"},{"Name":"Damanhur","0":"Damanhur","CountryCode":"EGY","1":"EGY","Population":"212203","2":"212203"},{"Name":"al-Minya","0":"al-Minya","CountryCode":"EGY","1":"EGY","Population":"201360","2":"201360"},{"Name":"Bani Suwayf","0":"Bani Suwayf","CountryCode":"EGY","1":"EGY","Population":"172032","2":"172032"},{"Name":"Qina","0":"Qina","CountryCode":"EGY","1":"EGY","Population":"171275","2":"171275"},{"Name":"Sawhaj","0":"Sawhaj","CountryCode":"EGY","1":"EGY","Population":"170125","2":"170125"},{"Name":"Shibin al-Kawm","0":"Shibin al-Kawm","CountryCode":"EGY","1":"EGY","Population":"159909","2":"159909"},{"Name":"Bulaq al-Dakrur","0":"Bulaq al-Dakrur","CountryCode":"EGY","1":"EGY","Population":"148787","2":"148787"},{"Name":"Banha","0":"Banha","CountryCode":"EGY","1":"EGY","Population":"145792","2":"145792"},{"Name":"Warraq al-Arab","0":"Warraq al-Arab","CountryCode":"EGY","1":"EGY","Population":"127108","2":"127108"},{"Name":"Kafr al-Shaykh","0":"Kafr al-Shaykh","CountryCode":"EGY","1":"EGY","Population":"124819","2":"124819"},{"Name":"Mallawi","0":"Mallawi","CountryCode":"EGY","1":"EGY","Population":"119283","2":"119283"},{"Name":"Bilbays","0":"Bilbays","CountryCode":"EGY","1":"EGY","Population":"113608","2":"113608"},{"Name":"Mit Ghamr","0":"Mit Ghamr","CountryCode":"EGY","1":"EGY","Population":"101801","2":"101801"},{"Name":"al-Arish","0":"al-Arish","CountryCode":"EGY","1":"EGY","Population":"100447","2":"100447"},{"Name":"Talkha","0":"Talkha","CountryCode":"EGY","1":"EGY","Population":"97700","2":"97700"},{"Name":"Qalyub","0":"Qalyub","CountryCode":"EGY","1":"EGY","Population":"97200","2":"97200"},{"Name":"Jirja","0":"Jirja","CountryCode":"EGY","1":"EGY","Population":"95400","2":"95400"},{"Name":"Idfu","0":"Idfu","CountryCode":"EGY","1":"EGY","Population":"94200","2":"94200"},{"Name":"al-Hawamidiya","0":"al-Hawamidiya","CountryCode":"EGY","1":"EGY","Population":"91700","2":"91700"},{"Name":"Disuq","0":"Disuq","CountryCode":"EGY","1":"EGY","Population":"91300","2":"91300"},{"Name":"San Salvador","0":"San Salvador","CountryCode":"SLV","1":"SLV","Population":"415346","2":"415346"},{"Name":"Santa Ana","0":"Santa Ana","CountryCode":"SLV","1":"SLV","Population":"139389","2":"139389"},{"Name":"Mejicanos","0":"Mejicanos","CountryCode":"SLV","1":"SLV","Population":"138800","2":"138800"},{"Name":"Soyapango","0":"Soyapango","CountryCode":"SLV","1":"SLV","Population":"129800","2":"129800"},{"Name":"San Miguel","0":"San Miguel","CountryCode":"SLV","1":"SLV","Population":"127696","2":"127696"},{"Name":"Nueva San Salvador","0":"Nueva San Salvador","CountryCode":"SLV","1":"SLV","Population":"98400","2":"98400"},{"Name":"Apopa","0":"Apopa","CountryCode":"SLV","1":"SLV","Population":"88800","2":"88800"},{"Name":"Asmara","0":"Asmara","CountryCode":"ERI","1":"ERI","Population":"431000","2":"431000"},{"Name":"Madrid","0":"Madrid","CountryCode":"ESP","1":"ESP","Population":"2879052","2":"2879052"},{"Name":"Barcelona","0":"Barcelona","CountryCode":"ESP","1":"ESP","Population":"1503451","2":"1503451"},{"Name":"Valencia","0":"Valencia","CountryCode":"ESP","1":"ESP","Population":"739412","2":"739412"},{"Name":"Sevilla","0":"Sevilla","CountryCode":"ESP","1":"ESP","Population":"701927","2":"701927"},{"Name":"Zaragoza","0":"Zaragoza","CountryCode":"ESP","1":"ESP","Population":"603367","2":"603367"},{"Name":"M\u00e1laga","0":"M\u00e1laga","CountryCode":"ESP","1":"ESP","Population":"530553","2":"530553"},{"Name":"Bilbao","0":"Bilbao","CountryCode":"ESP","1":"ESP","Population":"357589","2":"357589"},{"Name":"Las Palmas de Gran Canaria","0":"Las Palmas de Gran Canaria","CountryCode":"ESP","1":"ESP","Population":"354757","2":"354757"},{"Name":"Murcia","0":"Murcia","CountryCode":"ESP","1":"ESP","Population":"353504","2":"353504"},{"Name":"Palma de Mallorca","0":"Palma de Mallorca","CountryCode":"ESP","1":"ESP","Population":"326993","2":"326993"},{"Name":"Valladolid","0":"Valladolid","CountryCode":"ESP","1":"ESP","Population":"319998","2":"319998"},{"Name":"C\u00f3rdoba","0":"C\u00f3rdoba","CountryCode":"ESP","1":"ESP","Population":"311708","2":"311708"},{"Name":"Vigo","0":"Vigo","CountryCode":"ESP","1":"ESP","Population":"283670","2":"283670"},{"Name":"Alicante [Alacant]","0":"Alicante [Alacant]","CountryCode":"ESP","1":"ESP","Population":"272432","2":"272432"},{"Name":"Gij\u00f3n","0":"Gij\u00f3n","CountryCode":"ESP","1":"ESP","Population":"267980","2":"267980"},{"Name":"L\u00b4Hospitalet de Llobregat","0":"L\u00b4Hospitalet de Llobregat","CountryCode":"ESP","1":"ESP","Population":"247986","2":"247986"},{"Name":"Granada","0":"Granada","CountryCode":"ESP","1":"ESP","Population":"244767","2":"244767"},{"Name":"A Coru\u00f1a (La Coru\u00f1a)","0":"A Coru\u00f1a (La Coru\u00f1a)","CountryCode":"ESP","1":"ESP","Population":"243402","2":"243402"},{"Name":"Vitoria-Gasteiz","0":"Vitoria-Gasteiz","CountryCode":"ESP","1":"ESP","Population":"217154","2":"217154"},{"Name":"Santa Cruz de Tenerife","0":"Santa Cruz de Tenerife","CountryCode":"ESP","1":"ESP","Population":"213050","2":"213050"},{"Name":"Badalona","0":"Badalona","CountryCode":"ESP","1":"ESP","Population":"209635","2":"209635"},{"Name":"Oviedo","0":"Oviedo","CountryCode":"ESP","1":"ESP","Population":"200453","2":"200453"},{"Name":"M\u00f3stoles","0":"M\u00f3stoles","CountryCode":"ESP","1":"ESP","Population":"195351","2":"195351"},{"Name":"Elche [Elx]","0":"Elche [Elx]","CountryCode":"ESP","1":"ESP","Population":"193174","2":"193174"},{"Name":"Sabadell","0":"Sabadell","CountryCode":"ESP","1":"ESP","Population":"184859","2":"184859"},{"Name":"Santander","0":"Santander","CountryCode":"ESP","1":"ESP","Population":"184165","2":"184165"},{"Name":"Jerez de la Frontera","0":"Jerez de la Frontera","CountryCode":"ESP","1":"ESP","Population":"182660","2":"182660"},{"Name":"Pamplona [Iru\u00f1a]","0":"Pamplona [Iru\u00f1a]","CountryCode":"ESP","1":"ESP","Population":"180483","2":"180483"},{"Name":"Donostia-San Sebasti\u00e1n","0":"Donostia-San Sebasti\u00e1n","CountryCode":"ESP","1":"ESP","Population":"179208","2":"179208"},{"Name":"Cartagena","0":"Cartagena","CountryCode":"ESP","1":"ESP","Population":"177709","2":"177709"},{"Name":"Legan\u00e9s","0":"Legan\u00e9s","CountryCode":"ESP","1":"ESP","Population":"173163","2":"173163"},{"Name":"Fuenlabrada","0":"Fuenlabrada","CountryCode":"ESP","1":"ESP","Population":"171173","2":"171173"},{"Name":"Almer\u00eda","0":"Almer\u00eda","CountryCode":"ESP","1":"ESP","Population":"169027","2":"169027"},{"Name":"Terrassa","0":"Terrassa","CountryCode":"ESP","1":"ESP","Population":"168695","2":"168695"},{"Name":"Alcal\u00e1 de Henares","0":"Alcal\u00e1 de Henares","CountryCode":"ESP","1":"ESP","Population":"164463","2":"164463"},{"Name":"Burgos","0":"Burgos","CountryCode":"ESP","1":"ESP","Population":"162802","2":"162802"},{"Name":"Salamanca","0":"Salamanca","CountryCode":"ESP","1":"ESP","Population":"158720","2":"158720"},{"Name":"Albacete","0":"Albacete","CountryCode":"ESP","1":"ESP","Population":"147527","2":"147527"},{"Name":"Getafe","0":"Getafe","CountryCode":"ESP","1":"ESP","Population":"145371","2":"145371"},{"Name":"C\u00e1diz","0":"C\u00e1diz","CountryCode":"ESP","1":"ESP","Population":"142449","2":"142449"},{"Name":"Alcorc\u00f3n","0":"Alcorc\u00f3n","CountryCode":"ESP","1":"ESP","Population":"142048","2":"142048"},{"Name":"Huelva","0":"Huelva","CountryCode":"ESP","1":"ESP","Population":"140583","2":"140583"},{"Name":"Le\u00f3n","0":"Le\u00f3n","CountryCode":"ESP","1":"ESP","Population":"139809","2":"139809"},{"Name":"Castell\u00f3n de la Plana [Castell","0":"Castell\u00f3n de la Plana [Castell","CountryCode":"ESP","1":"ESP","Population":"139712","2":"139712"},{"Name":"Badajoz","0":"Badajoz","CountryCode":"ESP","1":"ESP","Population":"136613","2":"136613"},{"Name":"[San Crist\u00f3bal de] la Laguna","0":"[San Crist\u00f3bal de] la Laguna","CountryCode":"ESP","1":"ESP","Population":"127945","2":"127945"},{"Name":"Logro\u00f1o","0":"Logro\u00f1o","CountryCode":"ESP","1":"ESP","Population":"127093","2":"127093"},{"Name":"Santa Coloma de Gramenet","0":"Santa Coloma de Gramenet","CountryCode":"ESP","1":"ESP","Population":"120802","2":"120802"},{"Name":"Tarragona","0":"Tarragona","CountryCode":"ESP","1":"ESP","Population":"113016","2":"113016"},{"Name":"Lleida (L\u00e9rida)","0":"Lleida (L\u00e9rida)","CountryCode":"ESP","1":"ESP","Population":"112207","2":"112207"},{"Name":"Ja\u00e9n","0":"Ja\u00e9n","CountryCode":"ESP","1":"ESP","Population":"109247","2":"109247"},{"Name":"Ourense (Orense)","0":"Ourense (Orense)","CountryCode":"ESP","1":"ESP","Population":"109120","2":"109120"},{"Name":"Matar\u00f3","0":"Matar\u00f3","CountryCode":"ESP","1":"ESP","Population":"104095","2":"104095"},{"Name":"Algeciras","0":"Algeciras","CountryCode":"ESP","1":"ESP","Population":"103106","2":"103106"},{"Name":"Marbella","0":"Marbella","CountryCode":"ESP","1":"ESP","Population":"101144","2":"101144"},{"Name":"Barakaldo","0":"Barakaldo","CountryCode":"ESP","1":"ESP","Population":"98212","2":"98212"},{"Name":"Dos Hermanas","0":"Dos Hermanas","CountryCode":"ESP","1":"ESP","Population":"94591","2":"94591"},{"Name":"Santiago de Compostela","0":"Santiago de Compostela","CountryCode":"ESP","1":"ESP","Population":"93745","2":"93745"},{"Name":"Torrej\u00f3n de Ardoz","0":"Torrej\u00f3n de Ardoz","CountryCode":"ESP","1":"ESP","Population":"92262","2":"92262"},{"Name":"Cape Town","0":"Cape Town","CountryCode":"ZAF","1":"ZAF","Population":"2352121","2":"2352121"},{"Name":"Soweto","0":"Soweto","CountryCode":"ZAF","1":"ZAF","Population":"904165","2":"904165"},{"Name":"Johannesburg","0":"Johannesburg","CountryCode":"ZAF","1":"ZAF","Population":"756653","2":"756653"},{"Name":"Port Elizabeth","0":"Port Elizabeth","CountryCode":"ZAF","1":"ZAF","Population":"752319","2":"752319"},{"Name":"Pretoria","0":"Pretoria","CountryCode":"ZAF","1":"ZAF","Population":"658630","2":"658630"},{"Name":"Inanda","0":"Inanda","CountryCode":"ZAF","1":"ZAF","Population":"634065","2":"634065"},{"Name":"Durban","0":"Durban","CountryCode":"ZAF","1":"ZAF","Population":"566120","2":"566120"},{"Name":"Vanderbijlpark","0":"Vanderbijlpark","CountryCode":"ZAF","1":"ZAF","Population":"468931","2":"468931"},{"Name":"Kempton Park","0":"Kempton Park","CountryCode":"ZAF","1":"ZAF","Population":"442633","2":"442633"},{"Name":"Alberton","0":"Alberton","CountryCode":"ZAF","1":"ZAF","Population":"410102","2":"410102"},{"Name":"Pinetown","0":"Pinetown","CountryCode":"ZAF","1":"ZAF","Population":"378810","2":"378810"},{"Name":"Pietermaritzburg","0":"Pietermaritzburg","CountryCode":"ZAF","1":"ZAF","Population":"370190","2":"370190"},{"Name":"Benoni","0":"Benoni","CountryCode":"ZAF","1":"ZAF","Population":"365467","2":"365467"},{"Name":"Randburg","0":"Randburg","CountryCode":"ZAF","1":"ZAF","Population":"341288","2":"341288"},{"Name":"Umlazi","0":"Umlazi","CountryCode":"ZAF","1":"ZAF","Population":"339233","2":"339233"},{"Name":"Bloemfontein","0":"Bloemfontein","CountryCode":"ZAF","1":"ZAF","Population":"334341","2":"334341"},{"Name":"Vereeniging","0":"Vereeniging","CountryCode":"ZAF","1":"ZAF","Population":"328535","2":"328535"},{"Name":"Wonderboom","0":"Wonderboom","CountryCode":"ZAF","1":"ZAF","Population":"283289","2":"283289"},{"Name":"Roodepoort","0":"Roodepoort","CountryCode":"ZAF","1":"ZAF","Population":"279340","2":"279340"},{"Name":"Boksburg","0":"Boksburg","CountryCode":"ZAF","1":"ZAF","Population":"262648","2":"262648"},{"Name":"Klerksdorp","0":"Klerksdorp","CountryCode":"ZAF","1":"ZAF","Population":"261911","2":"261911"},{"Name":"Soshanguve","0":"Soshanguve","CountryCode":"ZAF","1":"ZAF","Population":"242727","2":"242727"},{"Name":"Newcastle","0":"Newcastle","CountryCode":"ZAF","1":"ZAF","Population":"222993","2":"222993"},{"Name":"East London","0":"East London","CountryCode":"ZAF","1":"ZAF","Population":"221047","2":"221047"},{"Name":"Welkom","0":"Welkom","CountryCode":"ZAF","1":"ZAF","Population":"203296","2":"203296"},{"Name":"Kimberley","0":"Kimberley","CountryCode":"ZAF","1":"ZAF","Population":"197254","2":"197254"},{"Name":"Uitenhage","0":"Uitenhage","CountryCode":"ZAF","1":"ZAF","Population":"192120","2":"192120"},{"Name":"Chatsworth","0":"Chatsworth","CountryCode":"ZAF","1":"ZAF","Population":"189885","2":"189885"},{"Name":"Mdantsane","0":"Mdantsane","CountryCode":"ZAF","1":"ZAF","Population":"182639","2":"182639"},{"Name":"Krugersdorp","0":"Krugersdorp","CountryCode":"ZAF","1":"ZAF","Population":"181503","2":"181503"},{"Name":"Botshabelo","0":"Botshabelo","CountryCode":"ZAF","1":"ZAF","Population":"177971","2":"177971"},{"Name":"Brakpan","0":"Brakpan","CountryCode":"ZAF","1":"ZAF","Population":"171363","2":"171363"},{"Name":"Witbank","0":"Witbank","CountryCode":"ZAF","1":"ZAF","Population":"167183","2":"167183"},{"Name":"Oberholzer","0":"Oberholzer","CountryCode":"ZAF","1":"ZAF","Population":"164367","2":"164367"},{"Name":"Germiston","0":"Germiston","CountryCode":"ZAF","1":"ZAF","Population":"164252","2":"164252"},{"Name":"Springs","0":"Springs","CountryCode":"ZAF","1":"ZAF","Population":"162072","2":"162072"},{"Name":"Westonaria","0":"Westonaria","CountryCode":"ZAF","1":"ZAF","Population":"159632","2":"159632"},{"Name":"Randfontein","0":"Randfontein","CountryCode":"ZAF","1":"ZAF","Population":"120838","2":"120838"},{"Name":"Paarl","0":"Paarl","CountryCode":"ZAF","1":"ZAF","Population":"105768","2":"105768"},{"Name":"Potchefstroom","0":"Potchefstroom","CountryCode":"ZAF","1":"ZAF","Population":"101817","2":"101817"},{"Name":"Rustenburg","0":"Rustenburg","CountryCode":"ZAF","1":"ZAF","Population":"97008","2":"97008"},{"Name":"Nigel","0":"Nigel","CountryCode":"ZAF","1":"ZAF","Population":"96734","2":"96734"},{"Name":"George","0":"George","CountryCode":"ZAF","1":"ZAF","Population":"93818","2":"93818"},{"Name":"Ladysmith","0":"Ladysmith","CountryCode":"ZAF","1":"ZAF","Population":"89292","2":"89292"},{"Name":"Addis Abeba","0":"Addis Abeba","CountryCode":"ETH","1":"ETH","Population":"2495000","2":"2495000"},{"Name":"Dire Dawa","0":"Dire Dawa","CountryCode":"ETH","1":"ETH","Population":"164851","2":"164851"},{"Name":"Nazret","0":"Nazret","CountryCode":"ETH","1":"ETH","Population":"127842","2":"127842"},{"Name":"Gonder","0":"Gonder","CountryCode":"ETH","1":"ETH","Population":"112249","2":"112249"},{"Name":"Dese","0":"Dese","CountryCode":"ETH","1":"ETH","Population":"97314","2":"97314"},{"Name":"Mekele","0":"Mekele","CountryCode":"ETH","1":"ETH","Population":"96938","2":"96938"},{"Name":"Bahir Dar","0":"Bahir Dar","CountryCode":"ETH","1":"ETH","Population":"96140","2":"96140"},{"Name":"Stanley","0":"Stanley","CountryCode":"FLK","1":"FLK","Population":"1636","2":"1636"},{"Name":"Suva","0":"Suva","CountryCode":"FJI","1":"FJI","Population":"77366","2":"77366"},{"Name":"Quezon","0":"Quezon","CountryCode":"PHL","1":"PHL","Population":"2173831","2":"2173831"},{"Name":"Manila","0":"Manila","CountryCode":"PHL","1":"PHL","Population":"1581082","2":"1581082"},{"Name":"Kalookan","0":"Kalookan","CountryCode":"PHL","1":"PHL","Population":"1177604","2":"1177604"},{"Name":"Davao","0":"Davao","CountryCode":"PHL","1":"PHL","Population":"1147116","2":"1147116"},{"Name":"Cebu","0":"Cebu","CountryCode":"PHL","1":"PHL","Population":"718821","2":"718821"},{"Name":"Zamboanga","0":"Zamboanga","CountryCode":"PHL","1":"PHL","Population":"601794","2":"601794"},{"Name":"Pasig","0":"Pasig","CountryCode":"PHL","1":"PHL","Population":"505058","2":"505058"},{"Name":"Valenzuela","0":"Valenzuela","CountryCode":"PHL","1":"PHL","Population":"485433","2":"485433"},{"Name":"Las Pi\u00f1as","0":"Las Pi\u00f1as","CountryCode":"PHL","1":"PHL","Population":"472780","2":"472780"},{"Name":"Antipolo","0":"Antipolo","CountryCode":"PHL","1":"PHL","Population":"470866","2":"470866"},{"Name":"Taguig","0":"Taguig","CountryCode":"PHL","1":"PHL","Population":"467375","2":"467375"},{"Name":"Cagayan de Oro","0":"Cagayan de Oro","CountryCode":"PHL","1":"PHL","Population":"461877","2":"461877"},{"Name":"Para\u00f1aque","0":"Para\u00f1aque","CountryCode":"PHL","1":"PHL","Population":"449811","2":"449811"},{"Name":"Makati","0":"Makati","CountryCode":"PHL","1":"PHL","Population":"444867","2":"444867"},{"Name":"Bacolod","0":"Bacolod","CountryCode":"PHL","1":"PHL","Population":"429076","2":"429076"},{"Name":"General Santos","0":"General Santos","CountryCode":"PHL","1":"PHL","Population":"411822","2":"411822"},{"Name":"Marikina","0":"Marikina","CountryCode":"PHL","1":"PHL","Population":"391170","2":"391170"},{"Name":"Dasmari\u00f1as","0":"Dasmari\u00f1as","CountryCode":"PHL","1":"PHL","Population":"379520","2":"379520"},{"Name":"Muntinlupa","0":"Muntinlupa","CountryCode":"PHL","1":"PHL","Population":"379310","2":"379310"},{"Name":"Iloilo","0":"Iloilo","CountryCode":"PHL","1":"PHL","Population":"365820","2":"365820"},{"Name":"Pasay","0":"Pasay","CountryCode":"PHL","1":"PHL","Population":"354908","2":"354908"},{"Name":"Malabon","0":"Malabon","CountryCode":"PHL","1":"PHL","Population":"338855","2":"338855"},{"Name":"San Jos\u00e9 del Monte","0":"San Jos\u00e9 del Monte","CountryCode":"PHL","1":"PHL","Population":"315807","2":"315807"},{"Name":"Bacoor","0":"Bacoor","CountryCode":"PHL","1":"PHL","Population":"305699","2":"305699"},{"Name":"Iligan","0":"Iligan","CountryCode":"PHL","1":"PHL","Population":"285061","2":"285061"},{"Name":"Calamba","0":"Calamba","CountryCode":"PHL","1":"PHL","Population":"281146","2":"281146"},{"Name":"Mandaluyong","0":"Mandaluyong","CountryCode":"PHL","1":"PHL","Population":"278474","2":"278474"},{"Name":"Butuan","0":"Butuan","CountryCode":"PHL","1":"PHL","Population":"267279","2":"267279"},{"Name":"Angeles","0":"Angeles","CountryCode":"PHL","1":"PHL","Population":"263971","2":"263971"},{"Name":"Tarlac","0":"Tarlac","CountryCode":"PHL","1":"PHL","Population":"262481","2":"262481"},{"Name":"Mandaue","0":"Mandaue","CountryCode":"PHL","1":"PHL","Population":"259728","2":"259728"},{"Name":"Baguio","0":"Baguio","CountryCode":"PHL","1":"PHL","Population":"252386","2":"252386"},{"Name":"Batangas","0":"Batangas","CountryCode":"PHL","1":"PHL","Population":"247588","2":"247588"},{"Name":"Cainta","0":"Cainta","CountryCode":"PHL","1":"PHL","Population":"242511","2":"242511"},{"Name":"San Pedro","0":"San Pedro","CountryCode":"PHL","1":"PHL","Population":"231403","2":"231403"},{"Name":"Navotas","0":"Navotas","CountryCode":"PHL","1":"PHL","Population":"230403","2":"230403"},{"Name":"Cabanatuan","0":"Cabanatuan","CountryCode":"PHL","1":"PHL","Population":"222859","2":"222859"},{"Name":"San Fernando","0":"San Fernando","CountryCode":"PHL","1":"PHL","Population":"221857","2":"221857"},{"Name":"Lipa","0":"Lipa","CountryCode":"PHL","1":"PHL","Population":"218447","2":"218447"},{"Name":"Lapu-Lapu","0":"Lapu-Lapu","CountryCode":"PHL","1":"PHL","Population":"217019","2":"217019"},{"Name":"San Pablo","0":"San Pablo","CountryCode":"PHL","1":"PHL","Population":"207927","2":"207927"},{"Name":"Bi\u00f1an","0":"Bi\u00f1an","CountryCode":"PHL","1":"PHL","Population":"201186","2":"201186"},{"Name":"Taytay","0":"Taytay","CountryCode":"PHL","1":"PHL","Population":"198183","2":"198183"},{"Name":"Lucena","0":"Lucena","CountryCode":"PHL","1":"PHL","Population":"196075","2":"196075"},{"Name":"Imus","0":"Imus","CountryCode":"PHL","1":"PHL","Population":"195482","2":"195482"},{"Name":"Olongapo","0":"Olongapo","CountryCode":"PHL","1":"PHL","Population":"194260","2":"194260"},{"Name":"Binangonan","0":"Binangonan","CountryCode":"PHL","1":"PHL","Population":"187691","2":"187691"},{"Name":"Santa Rosa","0":"Santa Rosa","CountryCode":"PHL","1":"PHL","Population":"185633","2":"185633"},{"Name":"Tagum","0":"Tagum","CountryCode":"PHL","1":"PHL","Population":"179531","2":"179531"},{"Name":"Tacloban","0":"Tacloban","CountryCode":"PHL","1":"PHL","Population":"178639","2":"178639"},{"Name":"Malolos","0":"Malolos","CountryCode":"PHL","1":"PHL","Population":"175291","2":"175291"},{"Name":"Mabalacat","0":"Mabalacat","CountryCode":"PHL","1":"PHL","Population":"171045","2":"171045"},{"Name":"Cotabato","0":"Cotabato","CountryCode":"PHL","1":"PHL","Population":"163849","2":"163849"},{"Name":"Meycauayan","0":"Meycauayan","CountryCode":"PHL","1":"PHL","Population":"163037","2":"163037"},{"Name":"Puerto Princesa","0":"Puerto Princesa","CountryCode":"PHL","1":"PHL","Population":"161912","2":"161912"},{"Name":"Legazpi","0":"Legazpi","CountryCode":"PHL","1":"PHL","Population":"157010","2":"157010"},{"Name":"Silang","0":"Silang","CountryCode":"PHL","1":"PHL","Population":"156137","2":"156137"},{"Name":"Ormoc","0":"Ormoc","CountryCode":"PHL","1":"PHL","Population":"154297","2":"154297"},{"Name":"San Carlos","0":"San Carlos","CountryCode":"PHL","1":"PHL","Population":"154264","2":"154264"},{"Name":"Kabankalan","0":"Kabankalan","CountryCode":"PHL","1":"PHL","Population":"149769","2":"149769"},{"Name":"Talisay","0":"Talisay","CountryCode":"PHL","1":"PHL","Population":"148110","2":"148110"},{"Name":"Valencia","0":"Valencia","CountryCode":"PHL","1":"PHL","Population":"147924","2":"147924"},{"Name":"Calbayog","0":"Calbayog","CountryCode":"PHL","1":"PHL","Population":"147187","2":"147187"},{"Name":"Santa Maria","0":"Santa Maria","CountryCode":"PHL","1":"PHL","Population":"144282","2":"144282"},{"Name":"Pagadian","0":"Pagadian","CountryCode":"PHL","1":"PHL","Population":"142515","2":"142515"},{"Name":"Cadiz","0":"Cadiz","CountryCode":"PHL","1":"PHL","Population":"141954","2":"141954"},{"Name":"Bago","0":"Bago","CountryCode":"PHL","1":"PHL","Population":"141721","2":"141721"},{"Name":"Toledo","0":"Toledo","CountryCode":"PHL","1":"PHL","Population":"141174","2":"141174"},{"Name":"Naga","0":"Naga","CountryCode":"PHL","1":"PHL","Population":"137810","2":"137810"},{"Name":"San Mateo","0":"San Mateo","CountryCode":"PHL","1":"PHL","Population":"135603","2":"135603"},{"Name":"Panabo","0":"Panabo","CountryCode":"PHL","1":"PHL","Population":"133950","2":"133950"},{"Name":"Koronadal","0":"Koronadal","CountryCode":"PHL","1":"PHL","Population":"133786","2":"133786"},{"Name":"Marawi","0":"Marawi","CountryCode":"PHL","1":"PHL","Population":"131090","2":"131090"},{"Name":"Dagupan","0":"Dagupan","CountryCode":"PHL","1":"PHL","Population":"130328","2":"130328"},{"Name":"Sagay","0":"Sagay","CountryCode":"PHL","1":"PHL","Population":"129765","2":"129765"},{"Name":"Roxas","0":"Roxas","CountryCode":"PHL","1":"PHL","Population":"126352","2":"126352"},{"Name":"Lubao","0":"Lubao","CountryCode":"PHL","1":"PHL","Population":"125699","2":"125699"},{"Name":"Digos","0":"Digos","CountryCode":"PHL","1":"PHL","Population":"125171","2":"125171"},{"Name":"San Miguel","0":"San Miguel","CountryCode":"PHL","1":"PHL","Population":"123824","2":"123824"},{"Name":"Malaybalay","0":"Malaybalay","CountryCode":"PHL","1":"PHL","Population":"123672","2":"123672"},{"Name":"Tuguegarao","0":"Tuguegarao","CountryCode":"PHL","1":"PHL","Population":"120645","2":"120645"},{"Name":"Ilagan","0":"Ilagan","CountryCode":"PHL","1":"PHL","Population":"119990","2":"119990"},{"Name":"Baliuag","0":"Baliuag","CountryCode":"PHL","1":"PHL","Population":"119675","2":"119675"},{"Name":"Surigao","0":"Surigao","CountryCode":"PHL","1":"PHL","Population":"118534","2":"118534"},{"Name":"San Carlos","0":"San Carlos","CountryCode":"PHL","1":"PHL","Population":"118259","2":"118259"},{"Name":"San Juan del Monte","0":"San Juan del Monte","CountryCode":"PHL","1":"PHL","Population":"117680","2":"117680"},{"Name":"Tanauan","0":"Tanauan","CountryCode":"PHL","1":"PHL","Population":"117539","2":"117539"},{"Name":"Concepcion","0":"Concepcion","CountryCode":"PHL","1":"PHL","Population":"115171","2":"115171"},{"Name":"Rodriguez (Montalban)","0":"Rodriguez (Montalban)","CountryCode":"PHL","1":"PHL","Population":"115167","2":"115167"},{"Name":"Sariaya","0":"Sariaya","CountryCode":"PHL","1":"PHL","Population":"114568","2":"114568"},{"Name":"Malasiqui","0":"Malasiqui","CountryCode":"PHL","1":"PHL","Population":"113190","2":"113190"},{"Name":"General Mariano Alvarez","0":"General Mariano Alvarez","CountryCode":"PHL","1":"PHL","Population":"112446","2":"112446"},{"Name":"Urdaneta","0":"Urdaneta","CountryCode":"PHL","1":"PHL","Population":"111582","2":"111582"},{"Name":"Hagonoy","0":"Hagonoy","CountryCode":"PHL","1":"PHL","Population":"111425","2":"111425"},{"Name":"San Jose","0":"San Jose","CountryCode":"PHL","1":"PHL","Population":"111009","2":"111009"},{"Name":"Polomolok","0":"Polomolok","CountryCode":"PHL","1":"PHL","Population":"110709","2":"110709"},{"Name":"Santiago","0":"Santiago","CountryCode":"PHL","1":"PHL","Population":"110531","2":"110531"},{"Name":"Tanza","0":"Tanza","CountryCode":"PHL","1":"PHL","Population":"110517","2":"110517"},{"Name":"Ozamis","0":"Ozamis","CountryCode":"PHL","1":"PHL","Population":"110420","2":"110420"},{"Name":"Mexico","0":"Mexico","CountryCode":"PHL","1":"PHL","Population":"109481","2":"109481"},{"Name":"San Jose","0":"San Jose","CountryCode":"PHL","1":"PHL","Population":"108254","2":"108254"},{"Name":"Silay","0":"Silay","CountryCode":"PHL","1":"PHL","Population":"107722","2":"107722"},{"Name":"General Trias","0":"General Trias","CountryCode":"PHL","1":"PHL","Population":"107691","2":"107691"},{"Name":"Tabaco","0":"Tabaco","CountryCode":"PHL","1":"PHL","Population":"107166","2":"107166"},{"Name":"Cabuyao","0":"Cabuyao","CountryCode":"PHL","1":"PHL","Population":"106630","2":"106630"},{"Name":"Calapan","0":"Calapan","CountryCode":"PHL","1":"PHL","Population":"105910","2":"105910"},{"Name":"Mati","0":"Mati","CountryCode":"PHL","1":"PHL","Population":"105908","2":"105908"},{"Name":"Midsayap","0":"Midsayap","CountryCode":"PHL","1":"PHL","Population":"105760","2":"105760"},{"Name":"Cauayan","0":"Cauayan","CountryCode":"PHL","1":"PHL","Population":"103952","2":"103952"},{"Name":"Gingoog","0":"Gingoog","CountryCode":"PHL","1":"PHL","Population":"102379","2":"102379"},{"Name":"Dumaguete","0":"Dumaguete","CountryCode":"PHL","1":"PHL","Population":"102265","2":"102265"},{"Name":"San Fernando","0":"San Fernando","CountryCode":"PHL","1":"PHL","Population":"102082","2":"102082"},{"Name":"Arayat","0":"Arayat","CountryCode":"PHL","1":"PHL","Population":"101792","2":"101792"},{"Name":"Bayawan (Tulong)","0":"Bayawan (Tulong)","CountryCode":"PHL","1":"PHL","Population":"101391","2":"101391"},{"Name":"Kidapawan","0":"Kidapawan","CountryCode":"PHL","1":"PHL","Population":"101205","2":"101205"},{"Name":"Daraga (Locsin)","0":"Daraga (Locsin)","CountryCode":"PHL","1":"PHL","Population":"101031","2":"101031"},{"Name":"Marilao","0":"Marilao","CountryCode":"PHL","1":"PHL","Population":"101017","2":"101017"},{"Name":"Malita","0":"Malita","CountryCode":"PHL","1":"PHL","Population":"100000","2":"100000"},{"Name":"Dipolog","0":"Dipolog","CountryCode":"PHL","1":"PHL","Population":"99862","2":"99862"},{"Name":"Cavite","0":"Cavite","CountryCode":"PHL","1":"PHL","Population":"99367","2":"99367"},{"Name":"Danao","0":"Danao","CountryCode":"PHL","1":"PHL","Population":"98781","2":"98781"},{"Name":"Bislig","0":"Bislig","CountryCode":"PHL","1":"PHL","Population":"97860","2":"97860"},{"Name":"Talavera","0":"Talavera","CountryCode":"PHL","1":"PHL","Population":"97329","2":"97329"},{"Name":"Guagua","0":"Guagua","CountryCode":"PHL","1":"PHL","Population":"96858","2":"96858"},{"Name":"Bayambang","0":"Bayambang","CountryCode":"PHL","1":"PHL","Population":"96609","2":"96609"},{"Name":"Nasugbu","0":"Nasugbu","CountryCode":"PHL","1":"PHL","Population":"96113","2":"96113"},{"Name":"Baybay","0":"Baybay","CountryCode":"PHL","1":"PHL","Population":"95630","2":"95630"},{"Name":"Capas","0":"Capas","CountryCode":"PHL","1":"PHL","Population":"95219","2":"95219"},{"Name":"Sultan Kudarat","0":"Sultan Kudarat","CountryCode":"PHL","1":"PHL","Population":"94861","2":"94861"},{"Name":"Laoag","0":"Laoag","CountryCode":"PHL","1":"PHL","Population":"94466","2":"94466"},{"Name":"Bayugan","0":"Bayugan","CountryCode":"PHL","1":"PHL","Population":"93623","2":"93623"},{"Name":"Malungon","0":"Malungon","CountryCode":"PHL","1":"PHL","Population":"93232","2":"93232"},{"Name":"Santa Cruz","0":"Santa Cruz","CountryCode":"PHL","1":"PHL","Population":"92694","2":"92694"},{"Name":"Sorsogon","0":"Sorsogon","CountryCode":"PHL","1":"PHL","Population":"92512","2":"92512"},{"Name":"Candelaria","0":"Candelaria","CountryCode":"PHL","1":"PHL","Population":"92429","2":"92429"},{"Name":"Ligao","0":"Ligao","CountryCode":"PHL","1":"PHL","Population":"90603","2":"90603"},{"Name":"T\u00f3rshavn","0":"T\u00f3rshavn","CountryCode":"FRO","1":"FRO","Population":"14542","2":"14542"},{"Name":"Libreville","0":"Libreville","CountryCode":"GAB","1":"GAB","Population":"419000","2":"419000"},{"Name":"Serekunda","0":"Serekunda","CountryCode":"GMB","1":"GMB","Population":"102600","2":"102600"},{"Name":"Banjul","0":"Banjul","CountryCode":"GMB","1":"GMB","Population":"42326","2":"42326"},{"Name":"Tbilisi","0":"Tbilisi","CountryCode":"GEO","1":"GEO","Population":"1235200","2":"1235200"},{"Name":"Kutaisi","0":"Kutaisi","CountryCode":"GEO","1":"GEO","Population":"240900","2":"240900"},{"Name":"Rustavi","0":"Rustavi","CountryCode":"GEO","1":"GEO","Population":"155400","2":"155400"},{"Name":"Batumi","0":"Batumi","CountryCode":"GEO","1":"GEO","Population":"137700","2":"137700"},{"Name":"Sohumi","0":"Sohumi","CountryCode":"GEO","1":"GEO","Population":"111700","2":"111700"},{"Name":"Accra","0":"Accra","CountryCode":"GHA","1":"GHA","Population":"1070000","2":"1070000"},{"Name":"Kumasi","0":"Kumasi","CountryCode":"GHA","1":"GHA","Population":"385192","2":"385192"},{"Name":"Tamale","0":"Tamale","CountryCode":"GHA","1":"GHA","Population":"151069","2":"151069"},{"Name":"Tema","0":"Tema","CountryCode":"GHA","1":"GHA","Population":"109975","2":"109975"},{"Name":"Sekondi-Takoradi","0":"Sekondi-Takoradi","CountryCode":"GHA","1":"GHA","Population":"103653","2":"103653"},{"Name":"Gibraltar","0":"Gibraltar","CountryCode":"GIB","1":"GIB","Population":"27025","2":"27025"},{"Name":"Saint George\u00b4s","0":"Saint George\u00b4s","CountryCode":"GRD","1":"GRD","Population":"4621","2":"4621"},{"Name":"Nuuk","0":"Nuuk","CountryCode":"GRL","1":"GRL","Population":"13445","2":"13445"},{"Name":"Les Abymes","0":"Les Abymes","CountryCode":"GLP","1":"GLP","Population":"62947","2":"62947"},{"Name":"Basse-Terre","0":"Basse-Terre","CountryCode":"GLP","1":"GLP","Population":"12433","2":"12433"},{"Name":"Tamuning","0":"Tamuning","CountryCode":"GUM","1":"GUM","Population":"9500","2":"9500"},{"Name":"Aga\u00f1a","0":"Aga\u00f1a","CountryCode":"GUM","1":"GUM","Population":"1139","2":"1139"},{"Name":"Ciudad de Guatemala","0":"Ciudad de Guatemala","CountryCode":"GTM","1":"GTM","Population":"823301","2":"823301"},{"Name":"Mixco","0":"Mixco","CountryCode":"GTM","1":"GTM","Population":"209791","2":"209791"},{"Name":"Villa Nueva","0":"Villa Nueva","CountryCode":"GTM","1":"GTM","Population":"101295","2":"101295"},{"Name":"Quetzaltenango","0":"Quetzaltenango","CountryCode":"GTM","1":"GTM","Population":"90801","2":"90801"},{"Name":"Conakry","0":"Conakry","CountryCode":"GIN","1":"GIN","Population":"1090610","2":"1090610"},{"Name":"Bissau","0":"Bissau","CountryCode":"GNB","1":"GNB","Population":"241000","2":"241000"},{"Name":"Georgetown","0":"Georgetown","CountryCode":"GUY","1":"GUY","Population":"254000","2":"254000"},{"Name":"Port-au-Prince","0":"Port-au-Prince","CountryCode":"HTI","1":"HTI","Population":"884472","2":"884472"},{"Name":"Carrefour","0":"Carrefour","CountryCode":"HTI","1":"HTI","Population":"290204","2":"290204"},{"Name":"Delmas","0":"Delmas","CountryCode":"HTI","1":"HTI","Population":"240429","2":"240429"},{"Name":"Le-Cap-Ha\u00eftien","0":"Le-Cap-Ha\u00eftien","CountryCode":"HTI","1":"HTI","Population":"102233","2":"102233"},{"Name":"Tegucigalpa","0":"Tegucigalpa","CountryCode":"HND","1":"HND","Population":"813900","2":"813900"},{"Name":"San Pedro Sula","0":"San Pedro Sula","CountryCode":"HND","1":"HND","Population":"383900","2":"383900"},{"Name":"La Ceiba","0":"La Ceiba","CountryCode":"HND","1":"HND","Population":"89200","2":"89200"},{"Name":"Kowloon and New Kowloon","0":"Kowloon and New Kowloon","CountryCode":"HKG","1":"HKG","Population":"1987996","2":"1987996"},{"Name":"Victoria","0":"Victoria","CountryCode":"HKG","1":"HKG","Population":"1312637","2":"1312637"},{"Name":"Longyearbyen","0":"Longyearbyen","CountryCode":"SJM","1":"SJM","Population":"1438","2":"1438"},{"Name":"Jakarta","0":"Jakarta","CountryCode":"IDN","1":"IDN","Population":"9604900","2":"9604900"},{"Name":"Surabaya","0":"Surabaya","CountryCode":"IDN","1":"IDN","Population":"2663820","2":"2663820"},{"Name":"Bandung","0":"Bandung","CountryCode":"IDN","1":"IDN","Population":"2429000","2":"2429000"},{"Name":"Medan","0":"Medan","CountryCode":"IDN","1":"IDN","Population":"1843919","2":"1843919"},{"Name":"Palembang","0":"Palembang","CountryCode":"IDN","1":"IDN","Population":"1222764","2":"1222764"},{"Name":"Tangerang","0":"Tangerang","CountryCode":"IDN","1":"IDN","Population":"1198300","2":"1198300"},{"Name":"Semarang","0":"Semarang","CountryCode":"IDN","1":"IDN","Population":"1104405","2":"1104405"},{"Name":"Ujung Pandang","0":"Ujung Pandang","CountryCode":"IDN","1":"IDN","Population":"1060257","2":"1060257"},{"Name":"Malang","0":"Malang","CountryCode":"IDN","1":"IDN","Population":"716862","2":"716862"},{"Name":"Bandar Lampung","0":"Bandar Lampung","CountryCode":"IDN","1":"IDN","Population":"680332","2":"680332"},{"Name":"Bekasi","0":"Bekasi","CountryCode":"IDN","1":"IDN","Population":"644300","2":"644300"},{"Name":"Padang","0":"Padang","CountryCode":"IDN","1":"IDN","Population":"534474","2":"534474"},{"Name":"Surakarta","0":"Surakarta","CountryCode":"IDN","1":"IDN","Population":"518600","2":"518600"},{"Name":"Banjarmasin","0":"Banjarmasin","CountryCode":"IDN","1":"IDN","Population":"482931","2":"482931"},{"Name":"Pekan Baru","0":"Pekan Baru","CountryCode":"IDN","1":"IDN","Population":"438638","2":"438638"},{"Name":"Denpasar","0":"Denpasar","CountryCode":"IDN","1":"IDN","Population":"435000","2":"435000"},{"Name":"Yogyakarta","0":"Yogyakarta","CountryCode":"IDN","1":"IDN","Population":"418944","2":"418944"},{"Name":"Pontianak","0":"Pontianak","CountryCode":"IDN","1":"IDN","Population":"409632","2":"409632"},{"Name":"Samarinda","0":"Samarinda","CountryCode":"IDN","1":"IDN","Population":"399175","2":"399175"},{"Name":"Jambi","0":"Jambi","CountryCode":"IDN","1":"IDN","Population":"385201","2":"385201"},{"Name":"Depok","0":"Depok","CountryCode":"IDN","1":"IDN","Population":"365200","2":"365200"},{"Name":"Cimahi","0":"Cimahi","CountryCode":"IDN","1":"IDN","Population":"344600","2":"344600"},{"Name":"Balikpapan","0":"Balikpapan","CountryCode":"IDN","1":"IDN","Population":"338752","2":"338752"},{"Name":"Manado","0":"Manado","CountryCode":"IDN","1":"IDN","Population":"332288","2":"332288"},{"Name":"Mataram","0":"Mataram","CountryCode":"IDN","1":"IDN","Population":"306600","2":"306600"},{"Name":"Pekalongan","0":"Pekalongan","CountryCode":"IDN","1":"IDN","Population":"301504","2":"301504"},{"Name":"Tegal","0":"Tegal","CountryCode":"IDN","1":"IDN","Population":"289744","2":"289744"},{"Name":"Bogor","0":"Bogor","CountryCode":"IDN","1":"IDN","Population":"285114","2":"285114"},{"Name":"Ciputat","0":"Ciputat","CountryCode":"IDN","1":"IDN","Population":"270800","2":"270800"},{"Name":"Pondokgede","0":"Pondokgede","CountryCode":"IDN","1":"IDN","Population":"263200","2":"263200"},{"Name":"Cirebon","0":"Cirebon","CountryCode":"IDN","1":"IDN","Population":"254406","2":"254406"},{"Name":"Kediri","0":"Kediri","CountryCode":"IDN","1":"IDN","Population":"253760","2":"253760"},{"Name":"Ambon","0":"Ambon","CountryCode":"IDN","1":"IDN","Population":"249312","2":"249312"},{"Name":"Jember","0":"Jember","CountryCode":"IDN","1":"IDN","Population":"218500","2":"218500"},{"Name":"Cilacap","0":"Cilacap","CountryCode":"IDN","1":"IDN","Population":"206900","2":"206900"},{"Name":"Cimanggis","0":"Cimanggis","CountryCode":"IDN","1":"IDN","Population":"205100","2":"205100"},{"Name":"Pematang Siantar","0":"Pematang Siantar","CountryCode":"IDN","1":"IDN","Population":"203056","2":"203056"},{"Name":"Purwokerto","0":"Purwokerto","CountryCode":"IDN","1":"IDN","Population":"202500","2":"202500"},{"Name":"Ciomas","0":"Ciomas","CountryCode":"IDN","1":"IDN","Population":"187400","2":"187400"},{"Name":"Tasikmalaya","0":"Tasikmalaya","CountryCode":"IDN","1":"IDN","Population":"179800","2":"179800"},{"Name":"Madiun","0":"Madiun","CountryCode":"IDN","1":"IDN","Population":"171532","2":"171532"},{"Name":"Bengkulu","0":"Bengkulu","CountryCode":"IDN","1":"IDN","Population":"146439","2":"146439"},{"Name":"Karawang","0":"Karawang","CountryCode":"IDN","1":"IDN","Population":"145000","2":"145000"},{"Name":"Banda Aceh","0":"Banda Aceh","CountryCode":"IDN","1":"IDN","Population":"143409","2":"143409"},{"Name":"Palu","0":"Palu","CountryCode":"IDN","1":"IDN","Population":"142800","2":"142800"},{"Name":"Pasuruan","0":"Pasuruan","CountryCode":"IDN","1":"IDN","Population":"134019","2":"134019"},{"Name":"Kupang","0":"Kupang","CountryCode":"IDN","1":"IDN","Population":"129300","2":"129300"},{"Name":"Tebing Tinggi","0":"Tebing Tinggi","CountryCode":"IDN","1":"IDN","Population":"129300","2":"129300"},{"Name":"Percut Sei Tuan","0":"Percut Sei Tuan","CountryCode":"IDN","1":"IDN","Population":"129000","2":"129000"},{"Name":"Binjai","0":"Binjai","CountryCode":"IDN","1":"IDN","Population":"127222","2":"127222"},{"Name":"Sukabumi","0":"Sukabumi","CountryCode":"IDN","1":"IDN","Population":"125766","2":"125766"},{"Name":"Waru","0":"Waru","CountryCode":"IDN","1":"IDN","Population":"124300","2":"124300"},{"Name":"Pangkal Pinang","0":"Pangkal Pinang","CountryCode":"IDN","1":"IDN","Population":"124000","2":"124000"},{"Name":"Magelang","0":"Magelang","CountryCode":"IDN","1":"IDN","Population":"123800","2":"123800"},{"Name":"Blitar","0":"Blitar","CountryCode":"IDN","1":"IDN","Population":"122600","2":"122600"},{"Name":"Serang","0":"Serang","CountryCode":"IDN","1":"IDN","Population":"122400","2":"122400"},{"Name":"Probolinggo","0":"Probolinggo","CountryCode":"IDN","1":"IDN","Population":"120770","2":"120770"},{"Name":"Cilegon","0":"Cilegon","CountryCode":"IDN","1":"IDN","Population":"117000","2":"117000"},{"Name":"Cianjur","0":"Cianjur","CountryCode":"IDN","1":"IDN","Population":"114300","2":"114300"},{"Name":"Ciparay","0":"Ciparay","CountryCode":"IDN","1":"IDN","Population":"111500","2":"111500"},{"Name":"Lhokseumawe","0":"Lhokseumawe","CountryCode":"IDN","1":"IDN","Population":"109600","2":"109600"},{"Name":"Taman","0":"Taman","CountryCode":"IDN","1":"IDN","Population":"107000","2":"107000"},{"Name":"Depok","0":"Depok","CountryCode":"IDN","1":"IDN","Population":"106800","2":"106800"},{"Name":"Citeureup","0":"Citeureup","CountryCode":"IDN","1":"IDN","Population":"105100","2":"105100"},{"Name":"Pemalang","0":"Pemalang","CountryCode":"IDN","1":"IDN","Population":"103500","2":"103500"},{"Name":"Klaten","0":"Klaten","CountryCode":"IDN","1":"IDN","Population":"103300","2":"103300"},{"Name":"Salatiga","0":"Salatiga","CountryCode":"IDN","1":"IDN","Population":"103000","2":"103000"},{"Name":"Cibinong","0":"Cibinong","CountryCode":"IDN","1":"IDN","Population":"101300","2":"101300"},{"Name":"Palangka Raya","0":"Palangka Raya","CountryCode":"IDN","1":"IDN","Population":"99693","2":"99693"},{"Name":"Mojokerto","0":"Mojokerto","CountryCode":"IDN","1":"IDN","Population":"96626","2":"96626"},{"Name":"Purwakarta","0":"Purwakarta","CountryCode":"IDN","1":"IDN","Population":"95900","2":"95900"},{"Name":"Garut","0":"Garut","CountryCode":"IDN","1":"IDN","Population":"95800","2":"95800"},{"Name":"Kudus","0":"Kudus","CountryCode":"IDN","1":"IDN","Population":"95300","2":"95300"},{"Name":"Kendari","0":"Kendari","CountryCode":"IDN","1":"IDN","Population":"94800","2":"94800"},{"Name":"Jaya Pura","0":"Jaya Pura","CountryCode":"IDN","1":"IDN","Population":"94700","2":"94700"},{"Name":"Gorontalo","0":"Gorontalo","CountryCode":"IDN","1":"IDN","Population":"94058","2":"94058"},{"Name":"Majalaya","0":"Majalaya","CountryCode":"IDN","1":"IDN","Population":"93200","2":"93200"},{"Name":"Pondok Aren","0":"Pondok Aren","CountryCode":"IDN","1":"IDN","Population":"92700","2":"92700"},{"Name":"Jombang","0":"Jombang","CountryCode":"IDN","1":"IDN","Population":"92600","2":"92600"},{"Name":"Sunggal","0":"Sunggal","CountryCode":"IDN","1":"IDN","Population":"92300","2":"92300"},{"Name":"Batam","0":"Batam","CountryCode":"IDN","1":"IDN","Population":"91871","2":"91871"},{"Name":"Padang Sidempuan","0":"Padang Sidempuan","CountryCode":"IDN","1":"IDN","Population":"91200","2":"91200"},{"Name":"Sawangan","0":"Sawangan","CountryCode":"IDN","1":"IDN","Population":"91100","2":"91100"},{"Name":"Banyuwangi","0":"Banyuwangi","CountryCode":"IDN","1":"IDN","Population":"89900","2":"89900"},{"Name":"Tanjung Pinang","0":"Tanjung Pinang","CountryCode":"IDN","1":"IDN","Population":"89900","2":"89900"},{"Name":"Mumbai (Bombay)","0":"Mumbai (Bombay)","CountryCode":"IND","1":"IND","Population":"10500000","2":"10500000"},{"Name":"Delhi","0":"Delhi","CountryCode":"IND","1":"IND","Population":"7206704","2":"7206704"},{"Name":"Calcutta [Kolkata]","0":"Calcutta [Kolkata]","CountryCode":"IND","1":"IND","Population":"4399819","2":"4399819"},{"Name":"Chennai (Madras)","0":"Chennai (Madras)","CountryCode":"IND","1":"IND","Population":"3841396","2":"3841396"},{"Name":"Hyderabad","0":"Hyderabad","CountryCode":"IND","1":"IND","Population":"2964638","2":"2964638"},{"Name":"Ahmedabad","0":"Ahmedabad","CountryCode":"IND","1":"IND","Population":"2876710","2":"2876710"},{"Name":"Bangalore","0":"Bangalore","CountryCode":"IND","1":"IND","Population":"2660088","2":"2660088"},{"Name":"Kanpur","0":"Kanpur","CountryCode":"IND","1":"IND","Population":"1874409","2":"1874409"},{"Name":"Nagpur","0":"Nagpur","CountryCode":"IND","1":"IND","Population":"1624752","2":"1624752"},{"Name":"Lucknow","0":"Lucknow","CountryCode":"IND","1":"IND","Population":"1619115","2":"1619115"},{"Name":"Pune","0":"Pune","CountryCode":"IND","1":"IND","Population":"1566651","2":"1566651"},{"Name":"Surat","0":"Surat","CountryCode":"IND","1":"IND","Population":"1498817","2":"1498817"},{"Name":"Jaipur","0":"Jaipur","CountryCode":"IND","1":"IND","Population":"1458483","2":"1458483"},{"Name":"Indore","0":"Indore","CountryCode":"IND","1":"IND","Population":"1091674","2":"1091674"},{"Name":"Bhopal","0":"Bhopal","CountryCode":"IND","1":"IND","Population":"1062771","2":"1062771"},{"Name":"Ludhiana","0":"Ludhiana","CountryCode":"IND","1":"IND","Population":"1042740","2":"1042740"},{"Name":"Vadodara (Baroda)","0":"Vadodara (Baroda)","CountryCode":"IND","1":"IND","Population":"1031346","2":"1031346"},{"Name":"Kalyan","0":"Kalyan","CountryCode":"IND","1":"IND","Population":"1014557","2":"1014557"},{"Name":"Madurai","0":"Madurai","CountryCode":"IND","1":"IND","Population":"977856","2":"977856"},{"Name":"Haora (Howrah)","0":"Haora (Howrah)","CountryCode":"IND","1":"IND","Population":"950435","2":"950435"},{"Name":"Varanasi (Benares)","0":"Varanasi (Benares)","CountryCode":"IND","1":"IND","Population":"929270","2":"929270"},{"Name":"Patna","0":"Patna","CountryCode":"IND","1":"IND","Population":"917243","2":"917243"},{"Name":"Srinagar","0":"Srinagar","CountryCode":"IND","1":"IND","Population":"892506","2":"892506"},{"Name":"Agra","0":"Agra","CountryCode":"IND","1":"IND","Population":"891790","2":"891790"},{"Name":"Coimbatore","0":"Coimbatore","CountryCode":"IND","1":"IND","Population":"816321","2":"816321"},{"Name":"Thane (Thana)","0":"Thane (Thana)","CountryCode":"IND","1":"IND","Population":"803389","2":"803389"},{"Name":"Allahabad","0":"Allahabad","CountryCode":"IND","1":"IND","Population":"792858","2":"792858"},{"Name":"Meerut","0":"Meerut","CountryCode":"IND","1":"IND","Population":"753778","2":"753778"},{"Name":"Vishakhapatnam","0":"Vishakhapatnam","CountryCode":"IND","1":"IND","Population":"752037","2":"752037"},{"Name":"Jabalpur","0":"Jabalpur","CountryCode":"IND","1":"IND","Population":"741927","2":"741927"},{"Name":"Amritsar","0":"Amritsar","CountryCode":"IND","1":"IND","Population":"708835","2":"708835"},{"Name":"Faridabad","0":"Faridabad","CountryCode":"IND","1":"IND","Population":"703592","2":"703592"},{"Name":"Vijayawada","0":"Vijayawada","CountryCode":"IND","1":"IND","Population":"701827","2":"701827"},{"Name":"Gwalior","0":"Gwalior","CountryCode":"IND","1":"IND","Population":"690765","2":"690765"},{"Name":"Jodhpur","0":"Jodhpur","CountryCode":"IND","1":"IND","Population":"666279","2":"666279"},{"Name":"Nashik (Nasik)","0":"Nashik (Nasik)","CountryCode":"IND","1":"IND","Population":"656925","2":"656925"},{"Name":"Hubli-Dharwad","0":"Hubli-Dharwad","CountryCode":"IND","1":"IND","Population":"648298","2":"648298"},{"Name":"Solapur (Sholapur)","0":"Solapur (Sholapur)","CountryCode":"IND","1":"IND","Population":"604215","2":"604215"},{"Name":"Ranchi","0":"Ranchi","CountryCode":"IND","1":"IND","Population":"599306","2":"599306"},{"Name":"Bareilly","0":"Bareilly","CountryCode":"IND","1":"IND","Population":"587211","2":"587211"},{"Name":"Guwahati (Gauhati)","0":"Guwahati (Gauhati)","CountryCode":"IND","1":"IND","Population":"584342","2":"584342"},{"Name":"Shambajinagar (Aurangabad)","0":"Shambajinagar (Aurangabad)","CountryCode":"IND","1":"IND","Population":"573272","2":"573272"},{"Name":"Cochin (Kochi)","0":"Cochin (Kochi)","CountryCode":"IND","1":"IND","Population":"564589","2":"564589"},{"Name":"Rajkot","0":"Rajkot","CountryCode":"IND","1":"IND","Population":"559407","2":"559407"},{"Name":"Kota","0":"Kota","CountryCode":"IND","1":"IND","Population":"537371","2":"537371"},{"Name":"Thiruvananthapuram (Trivandrum","0":"Thiruvananthapuram (Trivandrum","CountryCode":"IND","1":"IND","Population":"524006","2":"524006"},{"Name":"Pimpri-Chinchwad","0":"Pimpri-Chinchwad","CountryCode":"IND","1":"IND","Population":"517083","2":"517083"},{"Name":"Jalandhar (Jullundur)","0":"Jalandhar (Jullundur)","CountryCode":"IND","1":"IND","Population":"509510","2":"509510"},{"Name":"Gorakhpur","0":"Gorakhpur","CountryCode":"IND","1":"IND","Population":"505566","2":"505566"},{"Name":"Chandigarh","0":"Chandigarh","CountryCode":"IND","1":"IND","Population":"504094","2":"504094"},{"Name":"Mysore","0":"Mysore","CountryCode":"IND","1":"IND","Population":"480692","2":"480692"},{"Name":"Aligarh","0":"Aligarh","CountryCode":"IND","1":"IND","Population":"480520","2":"480520"},{"Name":"Guntur","0":"Guntur","CountryCode":"IND","1":"IND","Population":"471051","2":"471051"},{"Name":"Jamshedpur","0":"Jamshedpur","CountryCode":"IND","1":"IND","Population":"460577","2":"460577"},{"Name":"Ghaziabad","0":"Ghaziabad","CountryCode":"IND","1":"IND","Population":"454156","2":"454156"},{"Name":"Warangal","0":"Warangal","CountryCode":"IND","1":"IND","Population":"447657","2":"447657"},{"Name":"Raipur","0":"Raipur","CountryCode":"IND","1":"IND","Population":"438639","2":"438639"},{"Name":"Moradabad","0":"Moradabad","CountryCode":"IND","1":"IND","Population":"429214","2":"429214"},{"Name":"Durgapur","0":"Durgapur","CountryCode":"IND","1":"IND","Population":"425836","2":"425836"},{"Name":"Amravati","0":"Amravati","CountryCode":"IND","1":"IND","Population":"421576","2":"421576"},{"Name":"Calicut (Kozhikode)","0":"Calicut (Kozhikode)","CountryCode":"IND","1":"IND","Population":"419831","2":"419831"},{"Name":"Bikaner","0":"Bikaner","CountryCode":"IND","1":"IND","Population":"416289","2":"416289"},{"Name":"Bhubaneswar","0":"Bhubaneswar","CountryCode":"IND","1":"IND","Population":"411542","2":"411542"},{"Name":"Kolhapur","0":"Kolhapur","CountryCode":"IND","1":"IND","Population":"406370","2":"406370"},{"Name":"Kataka (Cuttack)","0":"Kataka (Cuttack)","CountryCode":"IND","1":"IND","Population":"403418","2":"403418"},{"Name":"Ajmer","0":"Ajmer","CountryCode":"IND","1":"IND","Population":"402700","2":"402700"},{"Name":"Bhavnagar","0":"Bhavnagar","CountryCode":"IND","1":"IND","Population":"402338","2":"402338"},{"Name":"Tiruchirapalli","0":"Tiruchirapalli","CountryCode":"IND","1":"IND","Population":"387223","2":"387223"},{"Name":"Bhilai","0":"Bhilai","CountryCode":"IND","1":"IND","Population":"386159","2":"386159"},{"Name":"Bhiwandi","0":"Bhiwandi","CountryCode":"IND","1":"IND","Population":"379070","2":"379070"},{"Name":"Saharanpur","0":"Saharanpur","CountryCode":"IND","1":"IND","Population":"374945","2":"374945"},{"Name":"Ulhasnagar","0":"Ulhasnagar","CountryCode":"IND","1":"IND","Population":"369077","2":"369077"},{"Name":"Salem","0":"Salem","CountryCode":"IND","1":"IND","Population":"366712","2":"366712"},{"Name":"Ujjain","0":"Ujjain","CountryCode":"IND","1":"IND","Population":"362266","2":"362266"},{"Name":"Malegaon","0":"Malegaon","CountryCode":"IND","1":"IND","Population":"342595","2":"342595"},{"Name":"Jamnagar","0":"Jamnagar","CountryCode":"IND","1":"IND","Population":"341637","2":"341637"},{"Name":"Bokaro Steel City","0":"Bokaro Steel City","CountryCode":"IND","1":"IND","Population":"333683","2":"333683"},{"Name":"Akola","0":"Akola","CountryCode":"IND","1":"IND","Population":"328034","2":"328034"},{"Name":"Belgaum","0":"Belgaum","CountryCode":"IND","1":"IND","Population":"326399","2":"326399"},{"Name":"Rajahmundry","0":"Rajahmundry","CountryCode":"IND","1":"IND","Population":"324851","2":"324851"},{"Name":"Nellore","0":"Nellore","CountryCode":"IND","1":"IND","Population":"316606","2":"316606"},{"Name":"Udaipur","0":"Udaipur","CountryCode":"IND","1":"IND","Population":"308571","2":"308571"},{"Name":"New Bombay","0":"New Bombay","CountryCode":"IND","1":"IND","Population":"307297","2":"307297"},{"Name":"Bhatpara","0":"Bhatpara","CountryCode":"IND","1":"IND","Population":"304952","2":"304952"},{"Name":"Gulbarga","0":"Gulbarga","CountryCode":"IND","1":"IND","Population":"304099","2":"304099"},{"Name":"New Delhi","0":"New Delhi","CountryCode":"IND","1":"IND","Population":"301297","2":"301297"},{"Name":"Jhansi","0":"Jhansi","CountryCode":"IND","1":"IND","Population":"300850","2":"300850"},{"Name":"Gaya","0":"Gaya","CountryCode":"IND","1":"IND","Population":"291675","2":"291675"},{"Name":"Kakinada","0":"Kakinada","CountryCode":"IND","1":"IND","Population":"279980","2":"279980"},{"Name":"Dhule (Dhulia)","0":"Dhule (Dhulia)","CountryCode":"IND","1":"IND","Population":"278317","2":"278317"},{"Name":"Panihati","0":"Panihati","CountryCode":"IND","1":"IND","Population":"275990","2":"275990"},{"Name":"Nanded (Nander)","0":"Nanded (Nander)","CountryCode":"IND","1":"IND","Population":"275083","2":"275083"},{"Name":"Mangalore","0":"Mangalore","CountryCode":"IND","1":"IND","Population":"273304","2":"273304"},{"Name":"Dehra Dun","0":"Dehra Dun","CountryCode":"IND","1":"IND","Population":"270159","2":"270159"},{"Name":"Kamarhati","0":"Kamarhati","CountryCode":"IND","1":"IND","Population":"266889","2":"266889"},{"Name":"Davangere","0":"Davangere","CountryCode":"IND","1":"IND","Population":"266082","2":"266082"},{"Name":"Asansol","0":"Asansol","CountryCode":"IND","1":"IND","Population":"262188","2":"262188"},{"Name":"Bhagalpur","0":"Bhagalpur","CountryCode":"IND","1":"IND","Population":"253225","2":"253225"},{"Name":"Bellary","0":"Bellary","CountryCode":"IND","1":"IND","Population":"245391","2":"245391"},{"Name":"Barddhaman (Burdwan)","0":"Barddhaman (Burdwan)","CountryCode":"IND","1":"IND","Population":"245079","2":"245079"},{"Name":"Rampur","0":"Rampur","CountryCode":"IND","1":"IND","Population":"243742","2":"243742"},{"Name":"Jalgaon","0":"Jalgaon","CountryCode":"IND","1":"IND","Population":"242193","2":"242193"},{"Name":"Muzaffarpur","0":"Muzaffarpur","CountryCode":"IND","1":"IND","Population":"241107","2":"241107"},{"Name":"Nizamabad","0":"Nizamabad","CountryCode":"IND","1":"IND","Population":"241034","2":"241034"},{"Name":"Muzaffarnagar","0":"Muzaffarnagar","CountryCode":"IND","1":"IND","Population":"240609","2":"240609"},{"Name":"Patiala","0":"Patiala","CountryCode":"IND","1":"IND","Population":"238368","2":"238368"},{"Name":"Shahjahanpur","0":"Shahjahanpur","CountryCode":"IND","1":"IND","Population":"237713","2":"237713"},{"Name":"Kurnool","0":"Kurnool","CountryCode":"IND","1":"IND","Population":"236800","2":"236800"},{"Name":"Tiruppur (Tirupper)","0":"Tiruppur (Tirupper)","CountryCode":"IND","1":"IND","Population":"235661","2":"235661"},{"Name":"Rohtak","0":"Rohtak","CountryCode":"IND","1":"IND","Population":"233400","2":"233400"},{"Name":"South Dum Dum","0":"South Dum Dum","CountryCode":"IND","1":"IND","Population":"232811","2":"232811"},{"Name":"Mathura","0":"Mathura","CountryCode":"IND","1":"IND","Population":"226691","2":"226691"},{"Name":"Chandrapur","0":"Chandrapur","CountryCode":"IND","1":"IND","Population":"226105","2":"226105"},{"Name":"Barahanagar (Baranagar)","0":"Barahanagar (Baranagar)","CountryCode":"IND","1":"IND","Population":"224821","2":"224821"},{"Name":"Darbhanga","0":"Darbhanga","CountryCode":"IND","1":"IND","Population":"218391","2":"218391"},{"Name":"Siliguri (Shiliguri)","0":"Siliguri (Shiliguri)","CountryCode":"IND","1":"IND","Population":"216950","2":"216950"},{"Name":"Raurkela","0":"Raurkela","CountryCode":"IND","1":"IND","Population":"215489","2":"215489"},{"Name":"Ambattur","0":"Ambattur","CountryCode":"IND","1":"IND","Population":"215424","2":"215424"},{"Name":"Panipat","0":"Panipat","CountryCode":"IND","1":"IND","Population":"215218","2":"215218"},{"Name":"Firozabad","0":"Firozabad","CountryCode":"IND","1":"IND","Population":"215128","2":"215128"},{"Name":"Ichalkaranji","0":"Ichalkaranji","CountryCode":"IND","1":"IND","Population":"214950","2":"214950"},{"Name":"Jammu","0":"Jammu","CountryCode":"IND","1":"IND","Population":"214737","2":"214737"},{"Name":"Ramagundam","0":"Ramagundam","CountryCode":"IND","1":"IND","Population":"214384","2":"214384"},{"Name":"Eluru","0":"Eluru","CountryCode":"IND","1":"IND","Population":"212866","2":"212866"},{"Name":"Brahmapur","0":"Brahmapur","CountryCode":"IND","1":"IND","Population":"210418","2":"210418"},{"Name":"Alwar","0":"Alwar","CountryCode":"IND","1":"IND","Population":"205086","2":"205086"},{"Name":"Pondicherry","0":"Pondicherry","CountryCode":"IND","1":"IND","Population":"203065","2":"203065"},{"Name":"Thanjavur","0":"Thanjavur","CountryCode":"IND","1":"IND","Population":"202013","2":"202013"},{"Name":"Bihar Sharif","0":"Bihar Sharif","CountryCode":"IND","1":"IND","Population":"201323","2":"201323"},{"Name":"Tuticorin","0":"Tuticorin","CountryCode":"IND","1":"IND","Population":"199854","2":"199854"},{"Name":"Imphal","0":"Imphal","CountryCode":"IND","1":"IND","Population":"198535","2":"198535"},{"Name":"Latur","0":"Latur","CountryCode":"IND","1":"IND","Population":"197408","2":"197408"},{"Name":"Sagar","0":"Sagar","CountryCode":"IND","1":"IND","Population":"195346","2":"195346"},{"Name":"Farrukhabad-cum-Fatehgarh","0":"Farrukhabad-cum-Fatehgarh","CountryCode":"IND","1":"IND","Population":"194567","2":"194567"},{"Name":"Sangli","0":"Sangli","CountryCode":"IND","1":"IND","Population":"193197","2":"193197"},{"Name":"Parbhani","0":"Parbhani","CountryCode":"IND","1":"IND","Population":"190255","2":"190255"},{"Name":"Nagar Coil","0":"Nagar Coil","CountryCode":"IND","1":"IND","Population":"190084","2":"190084"},{"Name":"Bijapur","0":"Bijapur","CountryCode":"IND","1":"IND","Population":"186939","2":"186939"},{"Name":"Kukatpalle","0":"Kukatpalle","CountryCode":"IND","1":"IND","Population":"185378","2":"185378"},{"Name":"Bally","0":"Bally","CountryCode":"IND","1":"IND","Population":"184474","2":"184474"},{"Name":"Bhilwara","0":"Bhilwara","CountryCode":"IND","1":"IND","Population":"183965","2":"183965"},{"Name":"Ratlam","0":"Ratlam","CountryCode":"IND","1":"IND","Population":"183375","2":"183375"},{"Name":"Avadi","0":"Avadi","CountryCode":"IND","1":"IND","Population":"183215","2":"183215"},{"Name":"Dindigul","0":"Dindigul","CountryCode":"IND","1":"IND","Population":"182477","2":"182477"},{"Name":"Ahmadnagar","0":"Ahmadnagar","CountryCode":"IND","1":"IND","Population":"181339","2":"181339"},{"Name":"Bilaspur","0":"Bilaspur","CountryCode":"IND","1":"IND","Population":"179833","2":"179833"},{"Name":"Shimoga","0":"Shimoga","CountryCode":"IND","1":"IND","Population":"179258","2":"179258"},{"Name":"Kharagpur","0":"Kharagpur","CountryCode":"IND","1":"IND","Population":"177989","2":"177989"},{"Name":"Mira Bhayandar","0":"Mira Bhayandar","CountryCode":"IND","1":"IND","Population":"175372","2":"175372"},{"Name":"Vellore","0":"Vellore","CountryCode":"IND","1":"IND","Population":"175061","2":"175061"},{"Name":"Jalna","0":"Jalna","CountryCode":"IND","1":"IND","Population":"174985","2":"174985"},{"Name":"Burnpur","0":"Burnpur","CountryCode":"IND","1":"IND","Population":"174933","2":"174933"},{"Name":"Anantapur","0":"Anantapur","CountryCode":"IND","1":"IND","Population":"174924","2":"174924"},{"Name":"Allappuzha (Alleppey)","0":"Allappuzha (Alleppey)","CountryCode":"IND","1":"IND","Population":"174666","2":"174666"},{"Name":"Tirupati","0":"Tirupati","CountryCode":"IND","1":"IND","Population":"174369","2":"174369"},{"Name":"Karnal","0":"Karnal","CountryCode":"IND","1":"IND","Population":"173751","2":"173751"},{"Name":"Burhanpur","0":"Burhanpur","CountryCode":"IND","1":"IND","Population":"172710","2":"172710"},{"Name":"Hisar (Hissar)","0":"Hisar (Hissar)","CountryCode":"IND","1":"IND","Population":"172677","2":"172677"},{"Name":"Tiruvottiyur","0":"Tiruvottiyur","CountryCode":"IND","1":"IND","Population":"172562","2":"172562"},{"Name":"Mirzapur-cum-Vindhyachal","0":"Mirzapur-cum-Vindhyachal","CountryCode":"IND","1":"IND","Population":"169336","2":"169336"},{"Name":"Secunderabad","0":"Secunderabad","CountryCode":"IND","1":"IND","Population":"167461","2":"167461"},{"Name":"Nadiad","0":"Nadiad","CountryCode":"IND","1":"IND","Population":"167051","2":"167051"},{"Name":"Dewas","0":"Dewas","CountryCode":"IND","1":"IND","Population":"164364","2":"164364"},{"Name":"Murwara (Katni)","0":"Murwara (Katni)","CountryCode":"IND","1":"IND","Population":"163431","2":"163431"},{"Name":"Ganganagar","0":"Ganganagar","CountryCode":"IND","1":"IND","Population":"161482","2":"161482"},{"Name":"Vizianagaram","0":"Vizianagaram","CountryCode":"IND","1":"IND","Population":"160359","2":"160359"},{"Name":"Erode","0":"Erode","CountryCode":"IND","1":"IND","Population":"159232","2":"159232"},{"Name":"Machilipatnam (Masulipatam)","0":"Machilipatnam (Masulipatam)","CountryCode":"IND","1":"IND","Population":"159110","2":"159110"},{"Name":"Bhatinda (Bathinda)","0":"Bhatinda (Bathinda)","CountryCode":"IND","1":"IND","Population":"159042","2":"159042"},{"Name":"Raichur","0":"Raichur","CountryCode":"IND","1":"IND","Population":"157551","2":"157551"},{"Name":"Agartala","0":"Agartala","CountryCode":"IND","1":"IND","Population":"157358","2":"157358"},{"Name":"Arrah (Ara)","0":"Arrah (Ara)","CountryCode":"IND","1":"IND","Population":"157082","2":"157082"},{"Name":"Satna","0":"Satna","CountryCode":"IND","1":"IND","Population":"156630","2":"156630"},{"Name":"Lalbahadur Nagar","0":"Lalbahadur Nagar","CountryCode":"IND","1":"IND","Population":"155500","2":"155500"},{"Name":"Aizawl","0":"Aizawl","CountryCode":"IND","1":"IND","Population":"155240","2":"155240"},{"Name":"Uluberia","0":"Uluberia","CountryCode":"IND","1":"IND","Population":"155172","2":"155172"},{"Name":"Katihar","0":"Katihar","CountryCode":"IND","1":"IND","Population":"154367","2":"154367"},{"Name":"Cuddalore","0":"Cuddalore","CountryCode":"IND","1":"IND","Population":"153086","2":"153086"},{"Name":"Hugli-Chinsurah","0":"Hugli-Chinsurah","CountryCode":"IND","1":"IND","Population":"151806","2":"151806"},{"Name":"Dhanbad","0":"Dhanbad","CountryCode":"IND","1":"IND","Population":"151789","2":"151789"},{"Name":"Raiganj","0":"Raiganj","CountryCode":"IND","1":"IND","Population":"151045","2":"151045"},{"Name":"Sambhal","0":"Sambhal","CountryCode":"IND","1":"IND","Population":"150869","2":"150869"},{"Name":"Durg","0":"Durg","CountryCode":"IND","1":"IND","Population":"150645","2":"150645"},{"Name":"Munger (Monghyr)","0":"Munger (Monghyr)","CountryCode":"IND","1":"IND","Population":"150112","2":"150112"},{"Name":"Kanchipuram","0":"Kanchipuram","CountryCode":"IND","1":"IND","Population":"150100","2":"150100"},{"Name":"North Dum Dum","0":"North Dum Dum","CountryCode":"IND","1":"IND","Population":"149965","2":"149965"},{"Name":"Karimnagar","0":"Karimnagar","CountryCode":"IND","1":"IND","Population":"148583","2":"148583"},{"Name":"Bharatpur","0":"Bharatpur","CountryCode":"IND","1":"IND","Population":"148519","2":"148519"},{"Name":"Sikar","0":"Sikar","CountryCode":"IND","1":"IND","Population":"148272","2":"148272"},{"Name":"Hardwar (Haridwar)","0":"Hardwar (Haridwar)","CountryCode":"IND","1":"IND","Population":"147305","2":"147305"},{"Name":"Dabgram","0":"Dabgram","CountryCode":"IND","1":"IND","Population":"147217","2":"147217"},{"Name":"Morena","0":"Morena","CountryCode":"IND","1":"IND","Population":"147124","2":"147124"},{"Name":"Noida","0":"Noida","CountryCode":"IND","1":"IND","Population":"146514","2":"146514"},{"Name":"Hapur","0":"Hapur","CountryCode":"IND","1":"IND","Population":"146262","2":"146262"},{"Name":"Bhusawal","0":"Bhusawal","CountryCode":"IND","1":"IND","Population":"145143","2":"145143"},{"Name":"Khandwa","0":"Khandwa","CountryCode":"IND","1":"IND","Population":"145133","2":"145133"},{"Name":"Yamuna Nagar","0":"Yamuna Nagar","CountryCode":"IND","1":"IND","Population":"144346","2":"144346"},{"Name":"Sonipat (Sonepat)","0":"Sonipat (Sonepat)","CountryCode":"IND","1":"IND","Population":"143922","2":"143922"},{"Name":"Tenali","0":"Tenali","CountryCode":"IND","1":"IND","Population":"143726","2":"143726"},{"Name":"Raurkela Civil Township","0":"Raurkela Civil Township","CountryCode":"IND","1":"IND","Population":"140408","2":"140408"},{"Name":"Kollam (Quilon)","0":"Kollam (Quilon)","CountryCode":"IND","1":"IND","Population":"139852","2":"139852"},{"Name":"Kumbakonam","0":"Kumbakonam","CountryCode":"IND","1":"IND","Population":"139483","2":"139483"},{"Name":"Ingraj Bazar (English Bazar)","0":"Ingraj Bazar (English Bazar)","CountryCode":"IND","1":"IND","Population":"139204","2":"139204"},{"Name":"Timkur","0":"Timkur","CountryCode":"IND","1":"IND","Population":"138903","2":"138903"},{"Name":"Amroha","0":"Amroha","CountryCode":"IND","1":"IND","Population":"137061","2":"137061"},{"Name":"Serampore","0":"Serampore","CountryCode":"IND","1":"IND","Population":"137028","2":"137028"},{"Name":"Chapra","0":"Chapra","CountryCode":"IND","1":"IND","Population":"136877","2":"136877"},{"Name":"Pali","0":"Pali","CountryCode":"IND","1":"IND","Population":"136842","2":"136842"},{"Name":"Maunath Bhanjan","0":"Maunath Bhanjan","CountryCode":"IND","1":"IND","Population":"136697","2":"136697"},{"Name":"Adoni","0":"Adoni","CountryCode":"IND","1":"IND","Population":"136182","2":"136182"},{"Name":"Jaunpur","0":"Jaunpur","CountryCode":"IND","1":"IND","Population":"136062","2":"136062"},{"Name":"Tirunelveli","0":"Tirunelveli","CountryCode":"IND","1":"IND","Population":"135825","2":"135825"},{"Name":"Bahraich","0":"Bahraich","CountryCode":"IND","1":"IND","Population":"135400","2":"135400"},{"Name":"Gadag Betigeri","0":"Gadag Betigeri","CountryCode":"IND","1":"IND","Population":"134051","2":"134051"},{"Name":"Proddatur","0":"Proddatur","CountryCode":"IND","1":"IND","Population":"133914","2":"133914"},{"Name":"Chittoor","0":"Chittoor","CountryCode":"IND","1":"IND","Population":"133462","2":"133462"},{"Name":"Barrackpur","0":"Barrackpur","CountryCode":"IND","1":"IND","Population":"133265","2":"133265"},{"Name":"Bharuch (Broach)","0":"Bharuch (Broach)","CountryCode":"IND","1":"IND","Population":"133102","2":"133102"},{"Name":"Naihati","0":"Naihati","CountryCode":"IND","1":"IND","Population":"132701","2":"132701"},{"Name":"Shillong","0":"Shillong","CountryCode":"IND","1":"IND","Population":"131719","2":"131719"},{"Name":"Sambalpur","0":"Sambalpur","CountryCode":"IND","1":"IND","Population":"131138","2":"131138"},{"Name":"Junagadh","0":"Junagadh","CountryCode":"IND","1":"IND","Population":"130484","2":"130484"},{"Name":"Rae Bareli","0":"Rae Bareli","CountryCode":"IND","1":"IND","Population":"129904","2":"129904"},{"Name":"Rewa","0":"Rewa","CountryCode":"IND","1":"IND","Population":"128981","2":"128981"},{"Name":"Gurgaon","0":"Gurgaon","CountryCode":"IND","1":"IND","Population":"128608","2":"128608"},{"Name":"Khammam","0":"Khammam","CountryCode":"IND","1":"IND","Population":"127992","2":"127992"},{"Name":"Bulandshahr","0":"Bulandshahr","CountryCode":"IND","1":"IND","Population":"127201","2":"127201"},{"Name":"Navsari","0":"Navsari","CountryCode":"IND","1":"IND","Population":"126089","2":"126089"},{"Name":"Malkajgiri","0":"Malkajgiri","CountryCode":"IND","1":"IND","Population":"126066","2":"126066"},{"Name":"Midnapore (Medinipur)","0":"Midnapore (Medinipur)","CountryCode":"IND","1":"IND","Population":"125498","2":"125498"},{"Name":"Miraj","0":"Miraj","CountryCode":"IND","1":"IND","Population":"125407","2":"125407"},{"Name":"Raj Nandgaon","0":"Raj Nandgaon","CountryCode":"IND","1":"IND","Population":"125371","2":"125371"},{"Name":"Alandur","0":"Alandur","CountryCode":"IND","1":"IND","Population":"125244","2":"125244"},{"Name":"Puri","0":"Puri","CountryCode":"IND","1":"IND","Population":"125199","2":"125199"},{"Name":"Navadwip","0":"Navadwip","CountryCode":"IND","1":"IND","Population":"125037","2":"125037"},{"Name":"Sirsa","0":"Sirsa","CountryCode":"IND","1":"IND","Population":"125000","2":"125000"},{"Name":"Korba","0":"Korba","CountryCode":"IND","1":"IND","Population":"124501","2":"124501"},{"Name":"Faizabad","0":"Faizabad","CountryCode":"IND","1":"IND","Population":"124437","2":"124437"},{"Name":"Etawah","0":"Etawah","CountryCode":"IND","1":"IND","Population":"124072","2":"124072"},{"Name":"Pathankot","0":"Pathankot","CountryCode":"IND","1":"IND","Population":"123930","2":"123930"},{"Name":"Gandhinagar","0":"Gandhinagar","CountryCode":"IND","1":"IND","Population":"123359","2":"123359"},{"Name":"Palghat (Palakkad)","0":"Palghat (Palakkad)","CountryCode":"IND","1":"IND","Population":"123289","2":"123289"},{"Name":"Veraval","0":"Veraval","CountryCode":"IND","1":"IND","Population":"123000","2":"123000"},{"Name":"Hoshiarpur","0":"Hoshiarpur","CountryCode":"IND","1":"IND","Population":"122705","2":"122705"},{"Name":"Ambala","0":"Ambala","CountryCode":"IND","1":"IND","Population":"122596","2":"122596"},{"Name":"Sitapur","0":"Sitapur","CountryCode":"IND","1":"IND","Population":"121842","2":"121842"},{"Name":"Bhiwani","0":"Bhiwani","CountryCode":"IND","1":"IND","Population":"121629","2":"121629"},{"Name":"Cuddapah","0":"Cuddapah","CountryCode":"IND","1":"IND","Population":"121463","2":"121463"},{"Name":"Bhimavaram","0":"Bhimavaram","CountryCode":"IND","1":"IND","Population":"121314","2":"121314"},{"Name":"Krishnanagar","0":"Krishnanagar","CountryCode":"IND","1":"IND","Population":"121110","2":"121110"},{"Name":"Chandannagar","0":"Chandannagar","CountryCode":"IND","1":"IND","Population":"120378","2":"120378"},{"Name":"Mandya","0":"Mandya","CountryCode":"IND","1":"IND","Population":"120265","2":"120265"},{"Name":"Dibrugarh","0":"Dibrugarh","CountryCode":"IND","1":"IND","Population":"120127","2":"120127"},{"Name":"Nandyal","0":"Nandyal","CountryCode":"IND","1":"IND","Population":"119813","2":"119813"},{"Name":"Balurghat","0":"Balurghat","CountryCode":"IND","1":"IND","Population":"119796","2":"119796"},{"Name":"Neyveli","0":"Neyveli","CountryCode":"IND","1":"IND","Population":"118080","2":"118080"},{"Name":"Fatehpur","0":"Fatehpur","CountryCode":"IND","1":"IND","Population":"117675","2":"117675"},{"Name":"Mahbubnagar","0":"Mahbubnagar","CountryCode":"IND","1":"IND","Population":"116833","2":"116833"},{"Name":"Budaun","0":"Budaun","CountryCode":"IND","1":"IND","Population":"116695","2":"116695"},{"Name":"Porbandar","0":"Porbandar","CountryCode":"IND","1":"IND","Population":"116671","2":"116671"},{"Name":"Silchar","0":"Silchar","CountryCode":"IND","1":"IND","Population":"115483","2":"115483"},{"Name":"Berhampore (Baharampur)","0":"Berhampore (Baharampur)","CountryCode":"IND","1":"IND","Population":"115144","2":"115144"},{"Name":"Purnea (Purnia)","0":"Purnea (Purnia)","CountryCode":"IND","1":"IND","Population":"114912","2":"114912"},{"Name":"Bankura","0":"Bankura","CountryCode":"IND","1":"IND","Population":"114876","2":"114876"},{"Name":"Rajapalaiyam","0":"Rajapalaiyam","CountryCode":"IND","1":"IND","Population":"114202","2":"114202"},{"Name":"Titagarh","0":"Titagarh","CountryCode":"IND","1":"IND","Population":"114085","2":"114085"},{"Name":"Halisahar","0":"Halisahar","CountryCode":"IND","1":"IND","Population":"114028","2":"114028"},{"Name":"Hathras","0":"Hathras","CountryCode":"IND","1":"IND","Population":"113285","2":"113285"},{"Name":"Bhir (Bid)","0":"Bhir (Bid)","CountryCode":"IND","1":"IND","Population":"112434","2":"112434"},{"Name":"Pallavaram","0":"Pallavaram","CountryCode":"IND","1":"IND","Population":"111866","2":"111866"},{"Name":"Anand","0":"Anand","CountryCode":"IND","1":"IND","Population":"110266","2":"110266"},{"Name":"Mango","0":"Mango","CountryCode":"IND","1":"IND","Population":"110024","2":"110024"},{"Name":"Santipur","0":"Santipur","CountryCode":"IND","1":"IND","Population":"109956","2":"109956"},{"Name":"Bhind","0":"Bhind","CountryCode":"IND","1":"IND","Population":"109755","2":"109755"},{"Name":"Gondiya","0":"Gondiya","CountryCode":"IND","1":"IND","Population":"109470","2":"109470"},{"Name":"Tiruvannamalai","0":"Tiruvannamalai","CountryCode":"IND","1":"IND","Population":"109196","2":"109196"},{"Name":"Yeotmal (Yavatmal)","0":"Yeotmal (Yavatmal)","CountryCode":"IND","1":"IND","Population":"108578","2":"108578"},{"Name":"Kulti-Barakar","0":"Kulti-Barakar","CountryCode":"IND","1":"IND","Population":"108518","2":"108518"},{"Name":"Moga","0":"Moga","CountryCode":"IND","1":"IND","Population":"108304","2":"108304"},{"Name":"Shivapuri","0":"Shivapuri","CountryCode":"IND","1":"IND","Population":"108277","2":"108277"},{"Name":"Bidar","0":"Bidar","CountryCode":"IND","1":"IND","Population":"108016","2":"108016"},{"Name":"Guntakal","0":"Guntakal","CountryCode":"IND","1":"IND","Population":"107592","2":"107592"},{"Name":"Unnao","0":"Unnao","CountryCode":"IND","1":"IND","Population":"107425","2":"107425"},{"Name":"Barasat","0":"Barasat","CountryCode":"IND","1":"IND","Population":"107365","2":"107365"},{"Name":"Tambaram","0":"Tambaram","CountryCode":"IND","1":"IND","Population":"107187","2":"107187"},{"Name":"Abohar","0":"Abohar","CountryCode":"IND","1":"IND","Population":"107163","2":"107163"},{"Name":"Pilibhit","0":"Pilibhit","CountryCode":"IND","1":"IND","Population":"106605","2":"106605"},{"Name":"Valparai","0":"Valparai","CountryCode":"IND","1":"IND","Population":"106523","2":"106523"},{"Name":"Gonda","0":"Gonda","CountryCode":"IND","1":"IND","Population":"106078","2":"106078"},{"Name":"Surendranagar","0":"Surendranagar","CountryCode":"IND","1":"IND","Population":"105973","2":"105973"},{"Name":"Qutubullapur","0":"Qutubullapur","CountryCode":"IND","1":"IND","Population":"105380","2":"105380"},{"Name":"Beawar","0":"Beawar","CountryCode":"IND","1":"IND","Population":"105363","2":"105363"},{"Name":"Hindupur","0":"Hindupur","CountryCode":"IND","1":"IND","Population":"104651","2":"104651"},{"Name":"Gandhidham","0":"Gandhidham","CountryCode":"IND","1":"IND","Population":"104585","2":"104585"},{"Name":"Haldwani-cum-Kathgodam","0":"Haldwani-cum-Kathgodam","CountryCode":"IND","1":"IND","Population":"104195","2":"104195"},{"Name":"Tellicherry (Thalassery)","0":"Tellicherry (Thalassery)","CountryCode":"IND","1":"IND","Population":"103579","2":"103579"},{"Name":"Wardha","0":"Wardha","CountryCode":"IND","1":"IND","Population":"102985","2":"102985"},{"Name":"Rishra","0":"Rishra","CountryCode":"IND","1":"IND","Population":"102649","2":"102649"},{"Name":"Bhuj","0":"Bhuj","CountryCode":"IND","1":"IND","Population":"102176","2":"102176"},{"Name":"Modinagar","0":"Modinagar","CountryCode":"IND","1":"IND","Population":"101660","2":"101660"},{"Name":"Gudivada","0":"Gudivada","CountryCode":"IND","1":"IND","Population":"101656","2":"101656"},{"Name":"Basirhat","0":"Basirhat","CountryCode":"IND","1":"IND","Population":"101409","2":"101409"},{"Name":"Uttarpara-Kotrung","0":"Uttarpara-Kotrung","CountryCode":"IND","1":"IND","Population":"100867","2":"100867"},{"Name":"Ongole","0":"Ongole","CountryCode":"IND","1":"IND","Population":"100836","2":"100836"},{"Name":"North Barrackpur","0":"North Barrackpur","CountryCode":"IND","1":"IND","Population":"100513","2":"100513"},{"Name":"Guna","0":"Guna","CountryCode":"IND","1":"IND","Population":"100490","2":"100490"},{"Name":"Haldia","0":"Haldia","CountryCode":"IND","1":"IND","Population":"100347","2":"100347"},{"Name":"Habra","0":"Habra","CountryCode":"IND","1":"IND","Population":"100223","2":"100223"},{"Name":"Kanchrapara","0":"Kanchrapara","CountryCode":"IND","1":"IND","Population":"100194","2":"100194"},{"Name":"Tonk","0":"Tonk","CountryCode":"IND","1":"IND","Population":"100079","2":"100079"},{"Name":"Champdani","0":"Champdani","CountryCode":"IND","1":"IND","Population":"98818","2":"98818"},{"Name":"Orai","0":"Orai","CountryCode":"IND","1":"IND","Population":"98640","2":"98640"},{"Name":"Pudukkottai","0":"Pudukkottai","CountryCode":"IND","1":"IND","Population":"98619","2":"98619"},{"Name":"Sasaram","0":"Sasaram","CountryCode":"IND","1":"IND","Population":"98220","2":"98220"},{"Name":"Hazaribag","0":"Hazaribag","CountryCode":"IND","1":"IND","Population":"97712","2":"97712"},{"Name":"Palayankottai","0":"Palayankottai","CountryCode":"IND","1":"IND","Population":"97662","2":"97662"},{"Name":"Banda","0":"Banda","CountryCode":"IND","1":"IND","Population":"97227","2":"97227"},{"Name":"Godhra","0":"Godhra","CountryCode":"IND","1":"IND","Population":"96813","2":"96813"},{"Name":"Hospet","0":"Hospet","CountryCode":"IND","1":"IND","Population":"96322","2":"96322"},{"Name":"Ashoknagar-Kalyangarh","0":"Ashoknagar-Kalyangarh","CountryCode":"IND","1":"IND","Population":"96315","2":"96315"},{"Name":"Achalpur","0":"Achalpur","CountryCode":"IND","1":"IND","Population":"96216","2":"96216"},{"Name":"Patan","0":"Patan","CountryCode":"IND","1":"IND","Population":"96109","2":"96109"},{"Name":"Mandasor","0":"Mandasor","CountryCode":"IND","1":"IND","Population":"95758","2":"95758"},{"Name":"Damoh","0":"Damoh","CountryCode":"IND","1":"IND","Population":"95661","2":"95661"},{"Name":"Satara","0":"Satara","CountryCode":"IND","1":"IND","Population":"95133","2":"95133"},{"Name":"Meerut Cantonment","0":"Meerut Cantonment","CountryCode":"IND","1":"IND","Population":"94876","2":"94876"},{"Name":"Dehri","0":"Dehri","CountryCode":"IND","1":"IND","Population":"94526","2":"94526"},{"Name":"Delhi Cantonment","0":"Delhi Cantonment","CountryCode":"IND","1":"IND","Population":"94326","2":"94326"},{"Name":"Chhindwara","0":"Chhindwara","CountryCode":"IND","1":"IND","Population":"93731","2":"93731"},{"Name":"Bansberia","0":"Bansberia","CountryCode":"IND","1":"IND","Population":"93447","2":"93447"},{"Name":"Nagaon","0":"Nagaon","CountryCode":"IND","1":"IND","Population":"93350","2":"93350"},{"Name":"Kanpur Cantonment","0":"Kanpur Cantonment","CountryCode":"IND","1":"IND","Population":"93109","2":"93109"},{"Name":"Vidisha","0":"Vidisha","CountryCode":"IND","1":"IND","Population":"92917","2":"92917"},{"Name":"Bettiah","0":"Bettiah","CountryCode":"IND","1":"IND","Population":"92583","2":"92583"},{"Name":"Purulia","0":"Purulia","CountryCode":"IND","1":"IND","Population":"92574","2":"92574"},{"Name":"Hassan","0":"Hassan","CountryCode":"IND","1":"IND","Population":"90803","2":"90803"},{"Name":"Ambala Sadar","0":"Ambala Sadar","CountryCode":"IND","1":"IND","Population":"90712","2":"90712"},{"Name":"Baidyabati","0":"Baidyabati","CountryCode":"IND","1":"IND","Population":"90601","2":"90601"},{"Name":"Morvi","0":"Morvi","CountryCode":"IND","1":"IND","Population":"90357","2":"90357"},{"Name":"Raigarh","0":"Raigarh","CountryCode":"IND","1":"IND","Population":"89166","2":"89166"},{"Name":"Vejalpur","0":"Vejalpur","CountryCode":"IND","1":"IND","Population":"89053","2":"89053"},{"Name":"Baghdad","0":"Baghdad","CountryCode":"IRQ","1":"IRQ","Population":"4336000","2":"4336000"},{"Name":"Mosul","0":"Mosul","CountryCode":"IRQ","1":"IRQ","Population":"879000","2":"879000"},{"Name":"Irbil","0":"Irbil","CountryCode":"IRQ","1":"IRQ","Population":"485968","2":"485968"},{"Name":"Kirkuk","0":"Kirkuk","CountryCode":"IRQ","1":"IRQ","Population":"418624","2":"418624"},{"Name":"Basra","0":"Basra","CountryCode":"IRQ","1":"IRQ","Population":"406296","2":"406296"},{"Name":"al-Sulaymaniya","0":"al-Sulaymaniya","CountryCode":"IRQ","1":"IRQ","Population":"364096","2":"364096"},{"Name":"al-Najaf","0":"al-Najaf","CountryCode":"IRQ","1":"IRQ","Population":"309010","2":"309010"},{"Name":"Karbala","0":"Karbala","CountryCode":"IRQ","1":"IRQ","Population":"296705","2":"296705"},{"Name":"al-Hilla","0":"al-Hilla","CountryCode":"IRQ","1":"IRQ","Population":"268834","2":"268834"},{"Name":"al-Nasiriya","0":"al-Nasiriya","CountryCode":"IRQ","1":"IRQ","Population":"265937","2":"265937"},{"Name":"al-Amara","0":"al-Amara","CountryCode":"IRQ","1":"IRQ","Population":"208797","2":"208797"},{"Name":"al-Diwaniya","0":"al-Diwaniya","CountryCode":"IRQ","1":"IRQ","Population":"196519","2":"196519"},{"Name":"al-Ramadi","0":"al-Ramadi","CountryCode":"IRQ","1":"IRQ","Population":"192556","2":"192556"},{"Name":"al-Kut","0":"al-Kut","CountryCode":"IRQ","1":"IRQ","Population":"183183","2":"183183"},{"Name":"Baquba","0":"Baquba","CountryCode":"IRQ","1":"IRQ","Population":"114516","2":"114516"},{"Name":"Teheran","0":"Teheran","CountryCode":"IRN","1":"IRN","Population":"6758845","2":"6758845"},{"Name":"Mashhad","0":"Mashhad","CountryCode":"IRN","1":"IRN","Population":"1887405","2":"1887405"},{"Name":"Esfahan","0":"Esfahan","CountryCode":"IRN","1":"IRN","Population":"1266072","2":"1266072"},{"Name":"Tabriz","0":"Tabriz","CountryCode":"IRN","1":"IRN","Population":"1191043","2":"1191043"},{"Name":"Shiraz","0":"Shiraz","CountryCode":"IRN","1":"IRN","Population":"1053025","2":"1053025"},{"Name":"Karaj","0":"Karaj","CountryCode":"IRN","1":"IRN","Population":"940968","2":"940968"},{"Name":"Ahvaz","0":"Ahvaz","CountryCode":"IRN","1":"IRN","Population":"804980","2":"804980"},{"Name":"Qom","0":"Qom","CountryCode":"IRN","1":"IRN","Population":"777677","2":"777677"},{"Name":"Kermanshah","0":"Kermanshah","CountryCode":"IRN","1":"IRN","Population":"692986","2":"692986"},{"Name":"Urmia","0":"Urmia","CountryCode":"IRN","1":"IRN","Population":"435200","2":"435200"},{"Name":"Zahedan","0":"Zahedan","CountryCode":"IRN","1":"IRN","Population":"419518","2":"419518"},{"Name":"Rasht","0":"Rasht","CountryCode":"IRN","1":"IRN","Population":"417748","2":"417748"},{"Name":"Hamadan","0":"Hamadan","CountryCode":"IRN","1":"IRN","Population":"401281","2":"401281"},{"Name":"Kerman","0":"Kerman","CountryCode":"IRN","1":"IRN","Population":"384991","2":"384991"},{"Name":"Arak","0":"Arak","CountryCode":"IRN","1":"IRN","Population":"380755","2":"380755"},{"Name":"Ardebil","0":"Ardebil","CountryCode":"IRN","1":"IRN","Population":"340386","2":"340386"},{"Name":"Yazd","0":"Yazd","CountryCode":"IRN","1":"IRN","Population":"326776","2":"326776"},{"Name":"Qazvin","0":"Qazvin","CountryCode":"IRN","1":"IRN","Population":"291117","2":"291117"},{"Name":"Zanjan","0":"Zanjan","CountryCode":"IRN","1":"IRN","Population":"286295","2":"286295"},{"Name":"Sanandaj","0":"Sanandaj","CountryCode":"IRN","1":"IRN","Population":"277808","2":"277808"},{"Name":"Bandar-e-Abbas","0":"Bandar-e-Abbas","CountryCode":"IRN","1":"IRN","Population":"273578","2":"273578"},{"Name":"Khorramabad","0":"Khorramabad","CountryCode":"IRN","1":"IRN","Population":"272815","2":"272815"},{"Name":"Eslamshahr","0":"Eslamshahr","CountryCode":"IRN","1":"IRN","Population":"265450","2":"265450"},{"Name":"Borujerd","0":"Borujerd","CountryCode":"IRN","1":"IRN","Population":"217804","2":"217804"},{"Name":"Abadan","0":"Abadan","CountryCode":"IRN","1":"IRN","Population":"206073","2":"206073"},{"Name":"Dezful","0":"Dezful","CountryCode":"IRN","1":"IRN","Population":"202639","2":"202639"},{"Name":"Kashan","0":"Kashan","CountryCode":"IRN","1":"IRN","Population":"201372","2":"201372"},{"Name":"Sari","0":"Sari","CountryCode":"IRN","1":"IRN","Population":"195882","2":"195882"},{"Name":"Gorgan","0":"Gorgan","CountryCode":"IRN","1":"IRN","Population":"188710","2":"188710"},{"Name":"Najafabad","0":"Najafabad","CountryCode":"IRN","1":"IRN","Population":"178498","2":"178498"},{"Name":"Sabzevar","0":"Sabzevar","CountryCode":"IRN","1":"IRN","Population":"170738","2":"170738"},{"Name":"Khomeynishahr","0":"Khomeynishahr","CountryCode":"IRN","1":"IRN","Population":"165888","2":"165888"},{"Name":"Amol","0":"Amol","CountryCode":"IRN","1":"IRN","Population":"159092","2":"159092"},{"Name":"Neyshabur","0":"Neyshabur","CountryCode":"IRN","1":"IRN","Population":"158847","2":"158847"},{"Name":"Babol","0":"Babol","CountryCode":"IRN","1":"IRN","Population":"158346","2":"158346"},{"Name":"Khoy","0":"Khoy","CountryCode":"IRN","1":"IRN","Population":"148944","2":"148944"},{"Name":"Malayer","0":"Malayer","CountryCode":"IRN","1":"IRN","Population":"144373","2":"144373"},{"Name":"Bushehr","0":"Bushehr","CountryCode":"IRN","1":"IRN","Population":"143641","2":"143641"},{"Name":"Qaemshahr","0":"Qaemshahr","CountryCode":"IRN","1":"IRN","Population":"143286","2":"143286"},{"Name":"Qarchak","0":"Qarchak","CountryCode":"IRN","1":"IRN","Population":"142690","2":"142690"},{"Name":"Qods","0":"Qods","CountryCode":"IRN","1":"IRN","Population":"138278","2":"138278"},{"Name":"Sirjan","0":"Sirjan","CountryCode":"IRN","1":"IRN","Population":"135024","2":"135024"},{"Name":"Bojnurd","0":"Bojnurd","CountryCode":"IRN","1":"IRN","Population":"134835","2":"134835"},{"Name":"Maragheh","0":"Maragheh","CountryCode":"IRN","1":"IRN","Population":"132318","2":"132318"},{"Name":"Birjand","0":"Birjand","CountryCode":"IRN","1":"IRN","Population":"127608","2":"127608"},{"Name":"Ilam","0":"Ilam","CountryCode":"IRN","1":"IRN","Population":"126346","2":"126346"},{"Name":"Bukan","0":"Bukan","CountryCode":"IRN","1":"IRN","Population":"120020","2":"120020"},{"Name":"Masjed-e-Soleyman","0":"Masjed-e-Soleyman","CountryCode":"IRN","1":"IRN","Population":"116883","2":"116883"},{"Name":"Saqqez","0":"Saqqez","CountryCode":"IRN","1":"IRN","Population":"115394","2":"115394"},{"Name":"Gonbad-e Qabus","0":"Gonbad-e Qabus","CountryCode":"IRN","1":"IRN","Population":"111253","2":"111253"},{"Name":"Saveh","0":"Saveh","CountryCode":"IRN","1":"IRN","Population":"111245","2":"111245"},{"Name":"Mahabad","0":"Mahabad","CountryCode":"IRN","1":"IRN","Population":"107799","2":"107799"},{"Name":"Varamin","0":"Varamin","CountryCode":"IRN","1":"IRN","Population":"107233","2":"107233"},{"Name":"Andimeshk","0":"Andimeshk","CountryCode":"IRN","1":"IRN","Population":"106923","2":"106923"},{"Name":"Khorramshahr","0":"Khorramshahr","CountryCode":"IRN","1":"IRN","Population":"105636","2":"105636"},{"Name":"Shahrud","0":"Shahrud","CountryCode":"IRN","1":"IRN","Population":"104765","2":"104765"},{"Name":"Marv Dasht","0":"Marv Dasht","CountryCode":"IRN","1":"IRN","Population":"103579","2":"103579"},{"Name":"Zabol","0":"Zabol","CountryCode":"IRN","1":"IRN","Population":"100887","2":"100887"},{"Name":"Shahr-e Kord","0":"Shahr-e Kord","CountryCode":"IRN","1":"IRN","Population":"100477","2":"100477"},{"Name":"Bandar-e Anzali","0":"Bandar-e Anzali","CountryCode":"IRN","1":"IRN","Population":"98500","2":"98500"},{"Name":"Rafsanjan","0":"Rafsanjan","CountryCode":"IRN","1":"IRN","Population":"98300","2":"98300"},{"Name":"Marand","0":"Marand","CountryCode":"IRN","1":"IRN","Population":"96400","2":"96400"},{"Name":"Torbat-e Heydariyeh","0":"Torbat-e Heydariyeh","CountryCode":"IRN","1":"IRN","Population":"94600","2":"94600"},{"Name":"Jahrom","0":"Jahrom","CountryCode":"IRN","1":"IRN","Population":"94200","2":"94200"},{"Name":"Semnan","0":"Semnan","CountryCode":"IRN","1":"IRN","Population":"91045","2":"91045"},{"Name":"Miandoab","0":"Miandoab","CountryCode":"IRN","1":"IRN","Population":"90100","2":"90100"},{"Name":"Qomsheh","0":"Qomsheh","CountryCode":"IRN","1":"IRN","Population":"89800","2":"89800"},{"Name":"Dublin","0":"Dublin","CountryCode":"IRL","1":"IRL","Population":"481854","2":"481854"},{"Name":"Cork","0":"Cork","CountryCode":"IRL","1":"IRL","Population":"127187","2":"127187"},{"Name":"Reykjav\u00edk","0":"Reykjav\u00edk","CountryCode":"ISL","1":"ISL","Population":"109184","2":"109184"},{"Name":"Jerusalem","0":"Jerusalem","CountryCode":"ISR","1":"ISR","Population":"633700","2":"633700"},{"Name":"Tel Aviv-Jaffa","0":"Tel Aviv-Jaffa","CountryCode":"ISR","1":"ISR","Population":"348100","2":"348100"},{"Name":"Haifa","0":"Haifa","CountryCode":"ISR","1":"ISR","Population":"265700","2":"265700"},{"Name":"Rishon Le Ziyyon","0":"Rishon Le Ziyyon","CountryCode":"ISR","1":"ISR","Population":"188200","2":"188200"},{"Name":"Beerseba","0":"Beerseba","CountryCode":"ISR","1":"ISR","Population":"163700","2":"163700"},{"Name":"Holon","0":"Holon","CountryCode":"ISR","1":"ISR","Population":"163100","2":"163100"},{"Name":"Petah Tiqwa","0":"Petah Tiqwa","CountryCode":"ISR","1":"ISR","Population":"159400","2":"159400"},{"Name":"Ashdod","0":"Ashdod","CountryCode":"ISR","1":"ISR","Population":"155800","2":"155800"},{"Name":"Netanya","0":"Netanya","CountryCode":"ISR","1":"ISR","Population":"154900","2":"154900"},{"Name":"Bat Yam","0":"Bat Yam","CountryCode":"ISR","1":"ISR","Population":"137000","2":"137000"},{"Name":"Bene Beraq","0":"Bene Beraq","CountryCode":"ISR","1":"ISR","Population":"133900","2":"133900"},{"Name":"Ramat Gan","0":"Ramat Gan","CountryCode":"ISR","1":"ISR","Population":"126900","2":"126900"},{"Name":"Ashqelon","0":"Ashqelon","CountryCode":"ISR","1":"ISR","Population":"92300","2":"92300"},{"Name":"Rehovot","0":"Rehovot","CountryCode":"ISR","1":"ISR","Population":"90300","2":"90300"},{"Name":"Roma","0":"Roma","CountryCode":"ITA","1":"ITA","Population":"2643581","2":"2643581"},{"Name":"Milano","0":"Milano","CountryCode":"ITA","1":"ITA","Population":"1300977","2":"1300977"},{"Name":"Napoli","0":"Napoli","CountryCode":"ITA","1":"ITA","Population":"1002619","2":"1002619"},{"Name":"Torino","0":"Torino","CountryCode":"ITA","1":"ITA","Population":"903705","2":"903705"},{"Name":"Palermo","0":"Palermo","CountryCode":"ITA","1":"ITA","Population":"683794","2":"683794"},{"Name":"Genova","0":"Genova","CountryCode":"ITA","1":"ITA","Population":"636104","2":"636104"},{"Name":"Bologna","0":"Bologna","CountryCode":"ITA","1":"ITA","Population":"381161","2":"381161"},{"Name":"Firenze","0":"Firenze","CountryCode":"ITA","1":"ITA","Population":"376662","2":"376662"},{"Name":"Catania","0":"Catania","CountryCode":"ITA","1":"ITA","Population":"337862","2":"337862"},{"Name":"Bari","0":"Bari","CountryCode":"ITA","1":"ITA","Population":"331848","2":"331848"},{"Name":"Venezia","0":"Venezia","CountryCode":"ITA","1":"ITA","Population":"277305","2":"277305"},{"Name":"Messina","0":"Messina","CountryCode":"ITA","1":"ITA","Population":"259156","2":"259156"},{"Name":"Verona","0":"Verona","CountryCode":"ITA","1":"ITA","Population":"255268","2":"255268"},{"Name":"Trieste","0":"Trieste","CountryCode":"ITA","1":"ITA","Population":"216459","2":"216459"},{"Name":"Padova","0":"Padova","CountryCode":"ITA","1":"ITA","Population":"211391","2":"211391"},{"Name":"Taranto","0":"Taranto","CountryCode":"ITA","1":"ITA","Population":"208214","2":"208214"},{"Name":"Brescia","0":"Brescia","CountryCode":"ITA","1":"ITA","Population":"191317","2":"191317"},{"Name":"Reggio di Calabria","0":"Reggio di Calabria","CountryCode":"ITA","1":"ITA","Population":"179617","2":"179617"},{"Name":"Modena","0":"Modena","CountryCode":"ITA","1":"ITA","Population":"176022","2":"176022"},{"Name":"Prato","0":"Prato","CountryCode":"ITA","1":"ITA","Population":"172473","2":"172473"},{"Name":"Parma","0":"Parma","CountryCode":"ITA","1":"ITA","Population":"168717","2":"168717"},{"Name":"Cagliari","0":"Cagliari","CountryCode":"ITA","1":"ITA","Population":"165926","2":"165926"},{"Name":"Livorno","0":"Livorno","CountryCode":"ITA","1":"ITA","Population":"161673","2":"161673"},{"Name":"Perugia","0":"Perugia","CountryCode":"ITA","1":"ITA","Population":"156673","2":"156673"},{"Name":"Foggia","0":"Foggia","CountryCode":"ITA","1":"ITA","Population":"154891","2":"154891"},{"Name":"Reggio nell\u00b4 Emilia","0":"Reggio nell\u00b4 Emilia","CountryCode":"ITA","1":"ITA","Population":"143664","2":"143664"},{"Name":"Salerno","0":"Salerno","CountryCode":"ITA","1":"ITA","Population":"142055","2":"142055"},{"Name":"Ravenna","0":"Ravenna","CountryCode":"ITA","1":"ITA","Population":"138418","2":"138418"},{"Name":"Ferrara","0":"Ferrara","CountryCode":"ITA","1":"ITA","Population":"132127","2":"132127"},{"Name":"Rimini","0":"Rimini","CountryCode":"ITA","1":"ITA","Population":"131062","2":"131062"},{"Name":"Syrakusa","0":"Syrakusa","CountryCode":"ITA","1":"ITA","Population":"126282","2":"126282"},{"Name":"Sassari","0":"Sassari","CountryCode":"ITA","1":"ITA","Population":"120803","2":"120803"},{"Name":"Monza","0":"Monza","CountryCode":"ITA","1":"ITA","Population":"119516","2":"119516"},{"Name":"Bergamo","0":"Bergamo","CountryCode":"ITA","1":"ITA","Population":"117837","2":"117837"},{"Name":"Pescara","0":"Pescara","CountryCode":"ITA","1":"ITA","Population":"115698","2":"115698"},{"Name":"Latina","0":"Latina","CountryCode":"ITA","1":"ITA","Population":"114099","2":"114099"},{"Name":"Vicenza","0":"Vicenza","CountryCode":"ITA","1":"ITA","Population":"109738","2":"109738"},{"Name":"Terni","0":"Terni","CountryCode":"ITA","1":"ITA","Population":"107770","2":"107770"},{"Name":"Forl\u00ec","0":"Forl\u00ec","CountryCode":"ITA","1":"ITA","Population":"107475","2":"107475"},{"Name":"Trento","0":"Trento","CountryCode":"ITA","1":"ITA","Population":"104906","2":"104906"},{"Name":"Novara","0":"Novara","CountryCode":"ITA","1":"ITA","Population":"102037","2":"102037"},{"Name":"Piacenza","0":"Piacenza","CountryCode":"ITA","1":"ITA","Population":"98384","2":"98384"},{"Name":"Ancona","0":"Ancona","CountryCode":"ITA","1":"ITA","Population":"98329","2":"98329"},{"Name":"Lecce","0":"Lecce","CountryCode":"ITA","1":"ITA","Population":"98208","2":"98208"},{"Name":"Bolzano","0":"Bolzano","CountryCode":"ITA","1":"ITA","Population":"97232","2":"97232"},{"Name":"Catanzaro","0":"Catanzaro","CountryCode":"ITA","1":"ITA","Population":"96700","2":"96700"},{"Name":"La Spezia","0":"La Spezia","CountryCode":"ITA","1":"ITA","Population":"95504","2":"95504"},{"Name":"Udine","0":"Udine","CountryCode":"ITA","1":"ITA","Population":"94932","2":"94932"},{"Name":"Torre del Greco","0":"Torre del Greco","CountryCode":"ITA","1":"ITA","Population":"94505","2":"94505"},{"Name":"Andria","0":"Andria","CountryCode":"ITA","1":"ITA","Population":"94443","2":"94443"},{"Name":"Brindisi","0":"Brindisi","CountryCode":"ITA","1":"ITA","Population":"93454","2":"93454"},{"Name":"Giugliano in Campania","0":"Giugliano in Campania","CountryCode":"ITA","1":"ITA","Population":"93286","2":"93286"},{"Name":"Pisa","0":"Pisa","CountryCode":"ITA","1":"ITA","Population":"92379","2":"92379"},{"Name":"Barletta","0":"Barletta","CountryCode":"ITA","1":"ITA","Population":"91904","2":"91904"},{"Name":"Arezzo","0":"Arezzo","CountryCode":"ITA","1":"ITA","Population":"91729","2":"91729"},{"Name":"Alessandria","0":"Alessandria","CountryCode":"ITA","1":"ITA","Population":"90289","2":"90289"},{"Name":"Cesena","0":"Cesena","CountryCode":"ITA","1":"ITA","Population":"89852","2":"89852"},{"Name":"Pesaro","0":"Pesaro","CountryCode":"ITA","1":"ITA","Population":"88987","2":"88987"},{"Name":"Dili","0":"Dili","CountryCode":"TMP","1":"TMP","Population":"47900","2":"47900"},{"Name":"Wien","0":"Wien","CountryCode":"AUT","1":"AUT","Population":"1608144","2":"1608144"},{"Name":"Graz","0":"Graz","CountryCode":"AUT","1":"AUT","Population":"240967","2":"240967"},{"Name":"Linz","0":"Linz","CountryCode":"AUT","1":"AUT","Population":"188022","2":"188022"},{"Name":"Salzburg","0":"Salzburg","CountryCode":"AUT","1":"AUT","Population":"144247","2":"144247"},{"Name":"Innsbruck","0":"Innsbruck","CountryCode":"AUT","1":"AUT","Population":"111752","2":"111752"},{"Name":"Klagenfurt","0":"Klagenfurt","CountryCode":"AUT","1":"AUT","Population":"91141","2":"91141"},{"Name":"Spanish Town","0":"Spanish Town","CountryCode":"JAM","1":"JAM","Population":"110379","2":"110379"},{"Name":"Kingston","0":"Kingston","CountryCode":"JAM","1":"JAM","Population":"103962","2":"103962"},{"Name":"Portmore","0":"Portmore","CountryCode":"JAM","1":"JAM","Population":"99799","2":"99799"},{"Name":"Tokyo","0":"Tokyo","CountryCode":"JPN","1":"JPN","Population":"7980230","2":"7980230"},{"Name":"Jokohama [Yokohama]","0":"Jokohama [Yokohama]","CountryCode":"JPN","1":"JPN","Population":"3339594","2":"3339594"},{"Name":"Osaka","0":"Osaka","CountryCode":"JPN","1":"JPN","Population":"2595674","2":"2595674"},{"Name":"Nagoya","0":"Nagoya","CountryCode":"JPN","1":"JPN","Population":"2154376","2":"2154376"},{"Name":"Sapporo","0":"Sapporo","CountryCode":"JPN","1":"JPN","Population":"1790886","2":"1790886"},{"Name":"Kioto","0":"Kioto","CountryCode":"JPN","1":"JPN","Population":"1461974","2":"1461974"},{"Name":"Kobe","0":"Kobe","CountryCode":"JPN","1":"JPN","Population":"1425139","2":"1425139"},{"Name":"Fukuoka","0":"Fukuoka","CountryCode":"JPN","1":"JPN","Population":"1308379","2":"1308379"},{"Name":"Kawasaki","0":"Kawasaki","CountryCode":"JPN","1":"JPN","Population":"1217359","2":"1217359"},{"Name":"Hiroshima","0":"Hiroshima","CountryCode":"JPN","1":"JPN","Population":"1119117","2":"1119117"},{"Name":"Kitakyushu","0":"Kitakyushu","CountryCode":"JPN","1":"JPN","Population":"1016264","2":"1016264"},{"Name":"Sendai","0":"Sendai","CountryCode":"JPN","1":"JPN","Population":"989975","2":"989975"},{"Name":"Chiba","0":"Chiba","CountryCode":"JPN","1":"JPN","Population":"863930","2":"863930"},{"Name":"Sakai","0":"Sakai","CountryCode":"JPN","1":"JPN","Population":"797735","2":"797735"},{"Name":"Kumamoto","0":"Kumamoto","CountryCode":"JPN","1":"JPN","Population":"656734","2":"656734"},{"Name":"Okayama","0":"Okayama","CountryCode":"JPN","1":"JPN","Population":"624269","2":"624269"},{"Name":"Sagamihara","0":"Sagamihara","CountryCode":"JPN","1":"JPN","Population":"586300","2":"586300"},{"Name":"Hamamatsu","0":"Hamamatsu","CountryCode":"JPN","1":"JPN","Population":"568796","2":"568796"},{"Name":"Kagoshima","0":"Kagoshima","CountryCode":"JPN","1":"JPN","Population":"549977","2":"549977"},{"Name":"Funabashi","0":"Funabashi","CountryCode":"JPN","1":"JPN","Population":"545299","2":"545299"},{"Name":"Higashiosaka","0":"Higashiosaka","CountryCode":"JPN","1":"JPN","Population":"517785","2":"517785"},{"Name":"Hachioji","0":"Hachioji","CountryCode":"JPN","1":"JPN","Population":"513451","2":"513451"},{"Name":"Niigata","0":"Niigata","CountryCode":"JPN","1":"JPN","Population":"497464","2":"497464"},{"Name":"Amagasaki","0":"Amagasaki","CountryCode":"JPN","1":"JPN","Population":"481434","2":"481434"},{"Name":"Himeji","0":"Himeji","CountryCode":"JPN","1":"JPN","Population":"475167","2":"475167"},{"Name":"Shizuoka","0":"Shizuoka","CountryCode":"JPN","1":"JPN","Population":"473854","2":"473854"},{"Name":"Urawa","0":"Urawa","CountryCode":"JPN","1":"JPN","Population":"469675","2":"469675"},{"Name":"Matsuyama","0":"Matsuyama","CountryCode":"JPN","1":"JPN","Population":"466133","2":"466133"},{"Name":"Matsudo","0":"Matsudo","CountryCode":"JPN","1":"JPN","Population":"461126","2":"461126"},{"Name":"Kanazawa","0":"Kanazawa","CountryCode":"JPN","1":"JPN","Population":"455386","2":"455386"},{"Name":"Kawaguchi","0":"Kawaguchi","CountryCode":"JPN","1":"JPN","Population":"452155","2":"452155"},{"Name":"Ichikawa","0":"Ichikawa","CountryCode":"JPN","1":"JPN","Population":"441893","2":"441893"},{"Name":"Omiya","0":"Omiya","CountryCode":"JPN","1":"JPN","Population":"441649","2":"441649"},{"Name":"Utsunomiya","0":"Utsunomiya","CountryCode":"JPN","1":"JPN","Population":"440353","2":"440353"},{"Name":"Oita","0":"Oita","CountryCode":"JPN","1":"JPN","Population":"433401","2":"433401"},{"Name":"Nagasaki","0":"Nagasaki","CountryCode":"JPN","1":"JPN","Population":"432759","2":"432759"},{"Name":"Yokosuka","0":"Yokosuka","CountryCode":"JPN","1":"JPN","Population":"430200","2":"430200"},{"Name":"Kurashiki","0":"Kurashiki","CountryCode":"JPN","1":"JPN","Population":"425103","2":"425103"},{"Name":"Gifu","0":"Gifu","CountryCode":"JPN","1":"JPN","Population":"408007","2":"408007"},{"Name":"Hirakata","0":"Hirakata","CountryCode":"JPN","1":"JPN","Population":"403151","2":"403151"},{"Name":"Nishinomiya","0":"Nishinomiya","CountryCode":"JPN","1":"JPN","Population":"397618","2":"397618"},{"Name":"Toyonaka","0":"Toyonaka","CountryCode":"JPN","1":"JPN","Population":"396689","2":"396689"},{"Name":"Wakayama","0":"Wakayama","CountryCode":"JPN","1":"JPN","Population":"391233","2":"391233"},{"Name":"Fukuyama","0":"Fukuyama","CountryCode":"JPN","1":"JPN","Population":"376921","2":"376921"},{"Name":"Fujisawa","0":"Fujisawa","CountryCode":"JPN","1":"JPN","Population":"372840","2":"372840"},{"Name":"Asahikawa","0":"Asahikawa","CountryCode":"JPN","1":"JPN","Population":"364813","2":"364813"},{"Name":"Machida","0":"Machida","CountryCode":"JPN","1":"JPN","Population":"364197","2":"364197"},{"Name":"Nara","0":"Nara","CountryCode":"JPN","1":"JPN","Population":"362812","2":"362812"},{"Name":"Takatsuki","0":"Takatsuki","CountryCode":"JPN","1":"JPN","Population":"361747","2":"361747"},{"Name":"Iwaki","0":"Iwaki","CountryCode":"JPN","1":"JPN","Population":"361737","2":"361737"},{"Name":"Nagano","0":"Nagano","CountryCode":"JPN","1":"JPN","Population":"361391","2":"361391"},{"Name":"Toyohashi","0":"Toyohashi","CountryCode":"JPN","1":"JPN","Population":"360066","2":"360066"},{"Name":"Toyota","0":"Toyota","CountryCode":"JPN","1":"JPN","Population":"346090","2":"346090"},{"Name":"Suita","0":"Suita","CountryCode":"JPN","1":"JPN","Population":"345750","2":"345750"},{"Name":"Takamatsu","0":"Takamatsu","CountryCode":"JPN","1":"JPN","Population":"332471","2":"332471"},{"Name":"Koriyama","0":"Koriyama","CountryCode":"JPN","1":"JPN","Population":"330335","2":"330335"},{"Name":"Okazaki","0":"Okazaki","CountryCode":"JPN","1":"JPN","Population":"328711","2":"328711"},{"Name":"Kawagoe","0":"Kawagoe","CountryCode":"JPN","1":"JPN","Population":"327211","2":"327211"},{"Name":"Tokorozawa","0":"Tokorozawa","CountryCode":"JPN","1":"JPN","Population":"325809","2":"325809"},{"Name":"Toyama","0":"Toyama","CountryCode":"JPN","1":"JPN","Population":"325790","2":"325790"},{"Name":"Kochi","0":"Kochi","CountryCode":"JPN","1":"JPN","Population":"324710","2":"324710"},{"Name":"Kashiwa","0":"Kashiwa","CountryCode":"JPN","1":"JPN","Population":"320296","2":"320296"},{"Name":"Akita","0":"Akita","CountryCode":"JPN","1":"JPN","Population":"314440","2":"314440"},{"Name":"Miyazaki","0":"Miyazaki","CountryCode":"JPN","1":"JPN","Population":"303784","2":"303784"},{"Name":"Koshigaya","0":"Koshigaya","CountryCode":"JPN","1":"JPN","Population":"301446","2":"301446"},{"Name":"Naha","0":"Naha","CountryCode":"JPN","1":"JPN","Population":"299851","2":"299851"},{"Name":"Aomori","0":"Aomori","CountryCode":"JPN","1":"JPN","Population":"295969","2":"295969"},{"Name":"Hakodate","0":"Hakodate","CountryCode":"JPN","1":"JPN","Population":"294788","2":"294788"},{"Name":"Akashi","0":"Akashi","CountryCode":"JPN","1":"JPN","Population":"292253","2":"292253"},{"Name":"Yokkaichi","0":"Yokkaichi","CountryCode":"JPN","1":"JPN","Population":"288173","2":"288173"},{"Name":"Fukushima","0":"Fukushima","CountryCode":"JPN","1":"JPN","Population":"287525","2":"287525"},{"Name":"Morioka","0":"Morioka","CountryCode":"JPN","1":"JPN","Population":"287353","2":"287353"},{"Name":"Maebashi","0":"Maebashi","CountryCode":"JPN","1":"JPN","Population":"284473","2":"284473"},{"Name":"Kasugai","0":"Kasugai","CountryCode":"JPN","1":"JPN","Population":"282348","2":"282348"},{"Name":"Otsu","0":"Otsu","CountryCode":"JPN","1":"JPN","Population":"282070","2":"282070"},{"Name":"Ichihara","0":"Ichihara","CountryCode":"JPN","1":"JPN","Population":"279280","2":"279280"},{"Name":"Yao","0":"Yao","CountryCode":"JPN","1":"JPN","Population":"276421","2":"276421"},{"Name":"Ichinomiya","0":"Ichinomiya","CountryCode":"JPN","1":"JPN","Population":"270828","2":"270828"},{"Name":"Tokushima","0":"Tokushima","CountryCode":"JPN","1":"JPN","Population":"269649","2":"269649"},{"Name":"Kakogawa","0":"Kakogawa","CountryCode":"JPN","1":"JPN","Population":"266281","2":"266281"},{"Name":"Ibaraki","0":"Ibaraki","CountryCode":"JPN","1":"JPN","Population":"261020","2":"261020"},{"Name":"Neyagawa","0":"Neyagawa","CountryCode":"JPN","1":"JPN","Population":"257315","2":"257315"},{"Name":"Shimonoseki","0":"Shimonoseki","CountryCode":"JPN","1":"JPN","Population":"257263","2":"257263"},{"Name":"Yamagata","0":"Yamagata","CountryCode":"JPN","1":"JPN","Population":"255617","2":"255617"},{"Name":"Fukui","0":"Fukui","CountryCode":"JPN","1":"JPN","Population":"254818","2":"254818"},{"Name":"Hiratsuka","0":"Hiratsuka","CountryCode":"JPN","1":"JPN","Population":"254207","2":"254207"},{"Name":"Mito","0":"Mito","CountryCode":"JPN","1":"JPN","Population":"246559","2":"246559"},{"Name":"Sasebo","0":"Sasebo","CountryCode":"JPN","1":"JPN","Population":"244240","2":"244240"},{"Name":"Hachinohe","0":"Hachinohe","CountryCode":"JPN","1":"JPN","Population":"242979","2":"242979"},{"Name":"Takasaki","0":"Takasaki","CountryCode":"JPN","1":"JPN","Population":"239124","2":"239124"},{"Name":"Shimizu","0":"Shimizu","CountryCode":"JPN","1":"JPN","Population":"239123","2":"239123"},{"Name":"Kurume","0":"Kurume","CountryCode":"JPN","1":"JPN","Population":"235611","2":"235611"},{"Name":"Fuji","0":"Fuji","CountryCode":"JPN","1":"JPN","Population":"231527","2":"231527"},{"Name":"Soka","0":"Soka","CountryCode":"JPN","1":"JPN","Population":"222768","2":"222768"},{"Name":"Fuchu","0":"Fuchu","CountryCode":"JPN","1":"JPN","Population":"220576","2":"220576"},{"Name":"Chigasaki","0":"Chigasaki","CountryCode":"JPN","1":"JPN","Population":"216015","2":"216015"},{"Name":"Atsugi","0":"Atsugi","CountryCode":"JPN","1":"JPN","Population":"212407","2":"212407"},{"Name":"Numazu","0":"Numazu","CountryCode":"JPN","1":"JPN","Population":"211382","2":"211382"},{"Name":"Ageo","0":"Ageo","CountryCode":"JPN","1":"JPN","Population":"209442","2":"209442"},{"Name":"Yamato","0":"Yamato","CountryCode":"JPN","1":"JPN","Population":"208234","2":"208234"},{"Name":"Matsumoto","0":"Matsumoto","CountryCode":"JPN","1":"JPN","Population":"206801","2":"206801"},{"Name":"Kure","0":"Kure","CountryCode":"JPN","1":"JPN","Population":"206504","2":"206504"},{"Name":"Takarazuka","0":"Takarazuka","CountryCode":"JPN","1":"JPN","Population":"205993","2":"205993"},{"Name":"Kasukabe","0":"Kasukabe","CountryCode":"JPN","1":"JPN","Population":"201838","2":"201838"},{"Name":"Chofu","0":"Chofu","CountryCode":"JPN","1":"JPN","Population":"201585","2":"201585"},{"Name":"Odawara","0":"Odawara","CountryCode":"JPN","1":"JPN","Population":"200171","2":"200171"},{"Name":"Kofu","0":"Kofu","CountryCode":"JPN","1":"JPN","Population":"199753","2":"199753"},{"Name":"Kushiro","0":"Kushiro","CountryCode":"JPN","1":"JPN","Population":"197608","2":"197608"},{"Name":"Kishiwada","0":"Kishiwada","CountryCode":"JPN","1":"JPN","Population":"197276","2":"197276"},{"Name":"Hitachi","0":"Hitachi","CountryCode":"JPN","1":"JPN","Population":"196622","2":"196622"},{"Name":"Nagaoka","0":"Nagaoka","CountryCode":"JPN","1":"JPN","Population":"192407","2":"192407"},{"Name":"Itami","0":"Itami","CountryCode":"JPN","1":"JPN","Population":"190886","2":"190886"},{"Name":"Uji","0":"Uji","CountryCode":"JPN","1":"JPN","Population":"188735","2":"188735"},{"Name":"Suzuka","0":"Suzuka","CountryCode":"JPN","1":"JPN","Population":"184061","2":"184061"},{"Name":"Hirosaki","0":"Hirosaki","CountryCode":"JPN","1":"JPN","Population":"177522","2":"177522"},{"Name":"Ube","0":"Ube","CountryCode":"JPN","1":"JPN","Population":"175206","2":"175206"},{"Name":"Kodaira","0":"Kodaira","CountryCode":"JPN","1":"JPN","Population":"174984","2":"174984"},{"Name":"Takaoka","0":"Takaoka","CountryCode":"JPN","1":"JPN","Population":"174380","2":"174380"},{"Name":"Obihiro","0":"Obihiro","CountryCode":"JPN","1":"JPN","Population":"173685","2":"173685"},{"Name":"Tomakomai","0":"Tomakomai","CountryCode":"JPN","1":"JPN","Population":"171958","2":"171958"},{"Name":"Saga","0":"Saga","CountryCode":"JPN","1":"JPN","Population":"170034","2":"170034"},{"Name":"Sakura","0":"Sakura","CountryCode":"JPN","1":"JPN","Population":"168072","2":"168072"},{"Name":"Kamakura","0":"Kamakura","CountryCode":"JPN","1":"JPN","Population":"167661","2":"167661"},{"Name":"Mitaka","0":"Mitaka","CountryCode":"JPN","1":"JPN","Population":"167268","2":"167268"},{"Name":"Izumi","0":"Izumi","CountryCode":"JPN","1":"JPN","Population":"166979","2":"166979"},{"Name":"Hino","0":"Hino","CountryCode":"JPN","1":"JPN","Population":"166770","2":"166770"},{"Name":"Hadano","0":"Hadano","CountryCode":"JPN","1":"JPN","Population":"166512","2":"166512"},{"Name":"Ashikaga","0":"Ashikaga","CountryCode":"JPN","1":"JPN","Population":"165243","2":"165243"},{"Name":"Tsu","0":"Tsu","CountryCode":"JPN","1":"JPN","Population":"164543","2":"164543"},{"Name":"Sayama","0":"Sayama","CountryCode":"JPN","1":"JPN","Population":"162472","2":"162472"},{"Name":"Yachiyo","0":"Yachiyo","CountryCode":"JPN","1":"JPN","Population":"161222","2":"161222"},{"Name":"Tsukuba","0":"Tsukuba","CountryCode":"JPN","1":"JPN","Population":"160768","2":"160768"},{"Name":"Tachikawa","0":"Tachikawa","CountryCode":"JPN","1":"JPN","Population":"159430","2":"159430"},{"Name":"Kumagaya","0":"Kumagaya","CountryCode":"JPN","1":"JPN","Population":"157171","2":"157171"},{"Name":"Moriguchi","0":"Moriguchi","CountryCode":"JPN","1":"JPN","Population":"155941","2":"155941"},{"Name":"Otaru","0":"Otaru","CountryCode":"JPN","1":"JPN","Population":"155784","2":"155784"},{"Name":"Anjo","0":"Anjo","CountryCode":"JPN","1":"JPN","Population":"153823","2":"153823"},{"Name":"Narashino","0":"Narashino","CountryCode":"JPN","1":"JPN","Population":"152849","2":"152849"},{"Name":"Oyama","0":"Oyama","CountryCode":"JPN","1":"JPN","Population":"152820","2":"152820"},{"Name":"Ogaki","0":"Ogaki","CountryCode":"JPN","1":"JPN","Population":"151758","2":"151758"},{"Name":"Matsue","0":"Matsue","CountryCode":"JPN","1":"JPN","Population":"149821","2":"149821"},{"Name":"Kawanishi","0":"Kawanishi","CountryCode":"JPN","1":"JPN","Population":"149794","2":"149794"},{"Name":"Hitachinaka","0":"Hitachinaka","CountryCode":"JPN","1":"JPN","Population":"148006","2":"148006"},{"Name":"Niiza","0":"Niiza","CountryCode":"JPN","1":"JPN","Population":"147744","2":"147744"},{"Name":"Nagareyama","0":"Nagareyama","CountryCode":"JPN","1":"JPN","Population":"147738","2":"147738"},{"Name":"Tottori","0":"Tottori","CountryCode":"JPN","1":"JPN","Population":"147523","2":"147523"},{"Name":"Tama","0":"Tama","CountryCode":"JPN","1":"JPN","Population":"146712","2":"146712"},{"Name":"Iruma","0":"Iruma","CountryCode":"JPN","1":"JPN","Population":"145922","2":"145922"},{"Name":"Ota","0":"Ota","CountryCode":"JPN","1":"JPN","Population":"145317","2":"145317"},{"Name":"Omuta","0":"Omuta","CountryCode":"JPN","1":"JPN","Population":"142889","2":"142889"},{"Name":"Komaki","0":"Komaki","CountryCode":"JPN","1":"JPN","Population":"139827","2":"139827"},{"Name":"Ome","0":"Ome","CountryCode":"JPN","1":"JPN","Population":"139216","2":"139216"},{"Name":"Kadoma","0":"Kadoma","CountryCode":"JPN","1":"JPN","Population":"138953","2":"138953"},{"Name":"Yamaguchi","0":"Yamaguchi","CountryCode":"JPN","1":"JPN","Population":"138210","2":"138210"},{"Name":"Higashimurayama","0":"Higashimurayama","CountryCode":"JPN","1":"JPN","Population":"136970","2":"136970"},{"Name":"Yonago","0":"Yonago","CountryCode":"JPN","1":"JPN","Population":"136461","2":"136461"},{"Name":"Matsubara","0":"Matsubara","CountryCode":"JPN","1":"JPN","Population":"135010","2":"135010"},{"Name":"Musashino","0":"Musashino","CountryCode":"JPN","1":"JPN","Population":"134426","2":"134426"},{"Name":"Tsuchiura","0":"Tsuchiura","CountryCode":"JPN","1":"JPN","Population":"134072","2":"134072"},{"Name":"Joetsu","0":"Joetsu","CountryCode":"JPN","1":"JPN","Population":"133505","2":"133505"},{"Name":"Miyakonojo","0":"Miyakonojo","CountryCode":"JPN","1":"JPN","Population":"133183","2":"133183"},{"Name":"Misato","0":"Misato","CountryCode":"JPN","1":"JPN","Population":"132957","2":"132957"},{"Name":"Kakamigahara","0":"Kakamigahara","CountryCode":"JPN","1":"JPN","Population":"131831","2":"131831"},{"Name":"Daito","0":"Daito","CountryCode":"JPN","1":"JPN","Population":"130594","2":"130594"},{"Name":"Seto","0":"Seto","CountryCode":"JPN","1":"JPN","Population":"130470","2":"130470"},{"Name":"Kariya","0":"Kariya","CountryCode":"JPN","1":"JPN","Population":"127969","2":"127969"},{"Name":"Urayasu","0":"Urayasu","CountryCode":"JPN","1":"JPN","Population":"127550","2":"127550"},{"Name":"Beppu","0":"Beppu","CountryCode":"JPN","1":"JPN","Population":"127486","2":"127486"},{"Name":"Niihama","0":"Niihama","CountryCode":"JPN","1":"JPN","Population":"127207","2":"127207"},{"Name":"Minoo","0":"Minoo","CountryCode":"JPN","1":"JPN","Population":"127026","2":"127026"},{"Name":"Fujieda","0":"Fujieda","CountryCode":"JPN","1":"JPN","Population":"126897","2":"126897"},{"Name":"Abiko","0":"Abiko","CountryCode":"JPN","1":"JPN","Population":"126670","2":"126670"},{"Name":"Nobeoka","0":"Nobeoka","CountryCode":"JPN","1":"JPN","Population":"125547","2":"125547"},{"Name":"Tondabayashi","0":"Tondabayashi","CountryCode":"JPN","1":"JPN","Population":"125094","2":"125094"},{"Name":"Ueda","0":"Ueda","CountryCode":"JPN","1":"JPN","Population":"124217","2":"124217"},{"Name":"Kashihara","0":"Kashihara","CountryCode":"JPN","1":"JPN","Population":"124013","2":"124013"},{"Name":"Matsusaka","0":"Matsusaka","CountryCode":"JPN","1":"JPN","Population":"123582","2":"123582"},{"Name":"Isesaki","0":"Isesaki","CountryCode":"JPN","1":"JPN","Population":"123285","2":"123285"},{"Name":"Zama","0":"Zama","CountryCode":"JPN","1":"JPN","Population":"122046","2":"122046"},{"Name":"Kisarazu","0":"Kisarazu","CountryCode":"JPN","1":"JPN","Population":"121967","2":"121967"},{"Name":"Noda","0":"Noda","CountryCode":"JPN","1":"JPN","Population":"121030","2":"121030"},{"Name":"Ishinomaki","0":"Ishinomaki","CountryCode":"JPN","1":"JPN","Population":"120963","2":"120963"},{"Name":"Fujinomiya","0":"Fujinomiya","CountryCode":"JPN","1":"JPN","Population":"119714","2":"119714"},{"Name":"Kawachinagano","0":"Kawachinagano","CountryCode":"JPN","1":"JPN","Population":"119666","2":"119666"},{"Name":"Imabari","0":"Imabari","CountryCode":"JPN","1":"JPN","Population":"119357","2":"119357"},{"Name":"Aizuwakamatsu","0":"Aizuwakamatsu","CountryCode":"JPN","1":"JPN","Population":"119287","2":"119287"},{"Name":"Higashihiroshima","0":"Higashihiroshima","CountryCode":"JPN","1":"JPN","Population":"119166","2":"119166"},{"Name":"Habikino","0":"Habikino","CountryCode":"JPN","1":"JPN","Population":"118968","2":"118968"},{"Name":"Ebetsu","0":"Ebetsu","CountryCode":"JPN","1":"JPN","Population":"118805","2":"118805"},{"Name":"Hofu","0":"Hofu","CountryCode":"JPN","1":"JPN","Population":"118751","2":"118751"},{"Name":"Kiryu","0":"Kiryu","CountryCode":"JPN","1":"JPN","Population":"118326","2":"118326"},{"Name":"Okinawa","0":"Okinawa","CountryCode":"JPN","1":"JPN","Population":"117748","2":"117748"},{"Name":"Yaizu","0":"Yaizu","CountryCode":"JPN","1":"JPN","Population":"117258","2":"117258"},{"Name":"Toyokawa","0":"Toyokawa","CountryCode":"JPN","1":"JPN","Population":"115781","2":"115781"},{"Name":"Ebina","0":"Ebina","CountryCode":"JPN","1":"JPN","Population":"115571","2":"115571"},{"Name":"Asaka","0":"Asaka","CountryCode":"JPN","1":"JPN","Population":"114815","2":"114815"},{"Name":"Higashikurume","0":"Higashikurume","CountryCode":"JPN","1":"JPN","Population":"111666","2":"111666"},{"Name":"Ikoma","0":"Ikoma","CountryCode":"JPN","1":"JPN","Population":"111645","2":"111645"},{"Name":"Kitami","0":"Kitami","CountryCode":"JPN","1":"JPN","Population":"111295","2":"111295"},{"Name":"Koganei","0":"Koganei","CountryCode":"JPN","1":"JPN","Population":"110969","2":"110969"},{"Name":"Iwatsuki","0":"Iwatsuki","CountryCode":"JPN","1":"JPN","Population":"110034","2":"110034"},{"Name":"Mishima","0":"Mishima","CountryCode":"JPN","1":"JPN","Population":"109699","2":"109699"},{"Name":"Handa","0":"Handa","CountryCode":"JPN","1":"JPN","Population":"108600","2":"108600"},{"Name":"Muroran","0":"Muroran","CountryCode":"JPN","1":"JPN","Population":"108275","2":"108275"},{"Name":"Komatsu","0":"Komatsu","CountryCode":"JPN","1":"JPN","Population":"107937","2":"107937"},{"Name":"Yatsushiro","0":"Yatsushiro","CountryCode":"JPN","1":"JPN","Population":"107661","2":"107661"},{"Name":"Iida","0":"Iida","CountryCode":"JPN","1":"JPN","Population":"107583","2":"107583"},{"Name":"Tokuyama","0":"Tokuyama","CountryCode":"JPN","1":"JPN","Population":"107078","2":"107078"},{"Name":"Kokubunji","0":"Kokubunji","CountryCode":"JPN","1":"JPN","Population":"106996","2":"106996"},{"Name":"Akishima","0":"Akishima","CountryCode":"JPN","1":"JPN","Population":"106914","2":"106914"},{"Name":"Iwakuni","0":"Iwakuni","CountryCode":"JPN","1":"JPN","Population":"106647","2":"106647"},{"Name":"Kusatsu","0":"Kusatsu","CountryCode":"JPN","1":"JPN","Population":"106232","2":"106232"},{"Name":"Kuwana","0":"Kuwana","CountryCode":"JPN","1":"JPN","Population":"106121","2":"106121"},{"Name":"Sanda","0":"Sanda","CountryCode":"JPN","1":"JPN","Population":"105643","2":"105643"},{"Name":"Hikone","0":"Hikone","CountryCode":"JPN","1":"JPN","Population":"105508","2":"105508"},{"Name":"Toda","0":"Toda","CountryCode":"JPN","1":"JPN","Population":"103969","2":"103969"},{"Name":"Tajimi","0":"Tajimi","CountryCode":"JPN","1":"JPN","Population":"103171","2":"103171"},{"Name":"Ikeda","0":"Ikeda","CountryCode":"JPN","1":"JPN","Population":"102710","2":"102710"},{"Name":"Fukaya","0":"Fukaya","CountryCode":"JPN","1":"JPN","Population":"102156","2":"102156"},{"Name":"Ise","0":"Ise","CountryCode":"JPN","1":"JPN","Population":"101732","2":"101732"},{"Name":"Sakata","0":"Sakata","CountryCode":"JPN","1":"JPN","Population":"101651","2":"101651"},{"Name":"Kasuga","0":"Kasuga","CountryCode":"JPN","1":"JPN","Population":"101344","2":"101344"},{"Name":"Kamagaya","0":"Kamagaya","CountryCode":"JPN","1":"JPN","Population":"100821","2":"100821"},{"Name":"Tsuruoka","0":"Tsuruoka","CountryCode":"JPN","1":"JPN","Population":"100713","2":"100713"},{"Name":"Hoya","0":"Hoya","CountryCode":"JPN","1":"JPN","Population":"100313","2":"100313"},{"Name":"Nishio","0":"Nishio","CountryCode":"JPN","1":"JPN","Population":"100032","2":"100032"},{"Name":"Tokai","0":"Tokai","CountryCode":"JPN","1":"JPN","Population":"99738","2":"99738"},{"Name":"Inazawa","0":"Inazawa","CountryCode":"JPN","1":"JPN","Population":"98746","2":"98746"},{"Name":"Sakado","0":"Sakado","CountryCode":"JPN","1":"JPN","Population":"98221","2":"98221"},{"Name":"Isehara","0":"Isehara","CountryCode":"JPN","1":"JPN","Population":"98123","2":"98123"},{"Name":"Takasago","0":"Takasago","CountryCode":"JPN","1":"JPN","Population":"97632","2":"97632"},{"Name":"Fujimi","0":"Fujimi","CountryCode":"JPN","1":"JPN","Population":"96972","2":"96972"},{"Name":"Urasoe","0":"Urasoe","CountryCode":"JPN","1":"JPN","Population":"96002","2":"96002"},{"Name":"Yonezawa","0":"Yonezawa","CountryCode":"JPN","1":"JPN","Population":"95592","2":"95592"},{"Name":"Konan","0":"Konan","CountryCode":"JPN","1":"JPN","Population":"95521","2":"95521"},{"Name":"Yamatokoriyama","0":"Yamatokoriyama","CountryCode":"JPN","1":"JPN","Population":"95165","2":"95165"},{"Name":"Maizuru","0":"Maizuru","CountryCode":"JPN","1":"JPN","Population":"94784","2":"94784"},{"Name":"Onomichi","0":"Onomichi","CountryCode":"JPN","1":"JPN","Population":"93756","2":"93756"},{"Name":"Higashimatsuyama","0":"Higashimatsuyama","CountryCode":"JPN","1":"JPN","Population":"93342","2":"93342"},{"Name":"Kimitsu","0":"Kimitsu","CountryCode":"JPN","1":"JPN","Population":"93216","2":"93216"},{"Name":"Isahaya","0":"Isahaya","CountryCode":"JPN","1":"JPN","Population":"93058","2":"93058"},{"Name":"Kanuma","0":"Kanuma","CountryCode":"JPN","1":"JPN","Population":"93053","2":"93053"},{"Name":"Izumisano","0":"Izumisano","CountryCode":"JPN","1":"JPN","Population":"92583","2":"92583"},{"Name":"Kameoka","0":"Kameoka","CountryCode":"JPN","1":"JPN","Population":"92398","2":"92398"},{"Name":"Mobara","0":"Mobara","CountryCode":"JPN","1":"JPN","Population":"91664","2":"91664"},{"Name":"Narita","0":"Narita","CountryCode":"JPN","1":"JPN","Population":"91470","2":"91470"},{"Name":"Kashiwazaki","0":"Kashiwazaki","CountryCode":"JPN","1":"JPN","Population":"91229","2":"91229"},{"Name":"Tsuyama","0":"Tsuyama","CountryCode":"JPN","1":"JPN","Population":"91170","2":"91170"},{"Name":"Sanaa","0":"Sanaa","CountryCode":"YEM","1":"YEM","Population":"503600","2":"503600"},{"Name":"Aden","0":"Aden","CountryCode":"YEM","1":"YEM","Population":"398300","2":"398300"},{"Name":"Taizz","0":"Taizz","CountryCode":"YEM","1":"YEM","Population":"317600","2":"317600"},{"Name":"Hodeida","0":"Hodeida","CountryCode":"YEM","1":"YEM","Population":"298500","2":"298500"},{"Name":"al-Mukalla","0":"al-Mukalla","CountryCode":"YEM","1":"YEM","Population":"122400","2":"122400"},{"Name":"Ibb","0":"Ibb","CountryCode":"YEM","1":"YEM","Population":"103300","2":"103300"},{"Name":"Amman","0":"Amman","CountryCode":"JOR","1":"JOR","Population":"1000000","2":"1000000"},{"Name":"al-Zarqa","0":"al-Zarqa","CountryCode":"JOR","1":"JOR","Population":"389815","2":"389815"},{"Name":"Irbid","0":"Irbid","CountryCode":"JOR","1":"JOR","Population":"231511","2":"231511"},{"Name":"al-Rusayfa","0":"al-Rusayfa","CountryCode":"JOR","1":"JOR","Population":"137247","2":"137247"},{"Name":"Wadi al-Sir","0":"Wadi al-Sir","CountryCode":"JOR","1":"JOR","Population":"89104","2":"89104"},{"Name":"Flying Fish Cove","0":"Flying Fish Cove","CountryCode":"CXR","1":"CXR","Population":"700","2":"700"},{"Name":"Beograd","0":"Beograd","CountryCode":"YUG","1":"YUG","Population":"1204000","2":"1204000"},{"Name":"Novi Sad","0":"Novi Sad","CountryCode":"YUG","1":"YUG","Population":"179626","2":"179626"},{"Name":"Ni\u0161","0":"Ni\u0161","CountryCode":"YUG","1":"YUG","Population":"175391","2":"175391"},{"Name":"Pri\u0161tina","0":"Pri\u0161tina","CountryCode":"YUG","1":"YUG","Population":"155496","2":"155496"},{"Name":"Kragujevac","0":"Kragujevac","CountryCode":"YUG","1":"YUG","Population":"147305","2":"147305"},{"Name":"Podgorica","0":"Podgorica","CountryCode":"YUG","1":"YUG","Population":"135000","2":"135000"},{"Name":"Subotica","0":"Subotica","CountryCode":"YUG","1":"YUG","Population":"100386","2":"100386"},{"Name":"Prizren","0":"Prizren","CountryCode":"YUG","1":"YUG","Population":"92303","2":"92303"},{"Name":"Phnom Penh","0":"Phnom Penh","CountryCode":"KHM","1":"KHM","Population":"570155","2":"570155"},{"Name":"Battambang","0":"Battambang","CountryCode":"KHM","1":"KHM","Population":"129800","2":"129800"},{"Name":"Siem Reap","0":"Siem Reap","CountryCode":"KHM","1":"KHM","Population":"105100","2":"105100"},{"Name":"Douala","0":"Douala","CountryCode":"CMR","1":"CMR","Population":"1448300","2":"1448300"},{"Name":"Yaound\u00e9","0":"Yaound\u00e9","CountryCode":"CMR","1":"CMR","Population":"1372800","2":"1372800"},{"Name":"Garoua","0":"Garoua","CountryCode":"CMR","1":"CMR","Population":"177000","2":"177000"},{"Name":"Maroua","0":"Maroua","CountryCode":"CMR","1":"CMR","Population":"143000","2":"143000"},{"Name":"Bamenda","0":"Bamenda","CountryCode":"CMR","1":"CMR","Population":"138000","2":"138000"},{"Name":"Bafoussam","0":"Bafoussam","CountryCode":"CMR","1":"CMR","Population":"131000","2":"131000"},{"Name":"Nkongsamba","0":"Nkongsamba","CountryCode":"CMR","1":"CMR","Population":"112454","2":"112454"},{"Name":"Montr\u00e9al","0":"Montr\u00e9al","CountryCode":"CAN","1":"CAN","Population":"1016376","2":"1016376"},{"Name":"Calgary","0":"Calgary","CountryCode":"CAN","1":"CAN","Population":"768082","2":"768082"},{"Name":"Toronto","0":"Toronto","CountryCode":"CAN","1":"CAN","Population":"688275","2":"688275"},{"Name":"North York","0":"North York","CountryCode":"CAN","1":"CAN","Population":"622632","2":"622632"},{"Name":"Winnipeg","0":"Winnipeg","CountryCode":"CAN","1":"CAN","Population":"618477","2":"618477"},{"Name":"Edmonton","0":"Edmonton","CountryCode":"CAN","1":"CAN","Population":"616306","2":"616306"},{"Name":"Mississauga","0":"Mississauga","CountryCode":"CAN","1":"CAN","Population":"608072","2":"608072"},{"Name":"Scarborough","0":"Scarborough","CountryCode":"CAN","1":"CAN","Population":"594501","2":"594501"},{"Name":"Vancouver","0":"Vancouver","CountryCode":"CAN","1":"CAN","Population":"514008","2":"514008"},{"Name":"Etobicoke","0":"Etobicoke","CountryCode":"CAN","1":"CAN","Population":"348845","2":"348845"},{"Name":"London","0":"London","CountryCode":"CAN","1":"CAN","Population":"339917","2":"339917"},{"Name":"Hamilton","0":"Hamilton","CountryCode":"CAN","1":"CAN","Population":"335614","2":"335614"},{"Name":"Ottawa","0":"Ottawa","CountryCode":"CAN","1":"CAN","Population":"335277","2":"335277"},{"Name":"Laval","0":"Laval","CountryCode":"CAN","1":"CAN","Population":"330393","2":"330393"},{"Name":"Surrey","0":"Surrey","CountryCode":"CAN","1":"CAN","Population":"304477","2":"304477"},{"Name":"Brampton","0":"Brampton","CountryCode":"CAN","1":"CAN","Population":"296711","2":"296711"},{"Name":"Windsor","0":"Windsor","CountryCode":"CAN","1":"CAN","Population":"207588","2":"207588"},{"Name":"Saskatoon","0":"Saskatoon","CountryCode":"CAN","1":"CAN","Population":"193647","2":"193647"},{"Name":"Kitchener","0":"Kitchener","CountryCode":"CAN","1":"CAN","Population":"189959","2":"189959"},{"Name":"Markham","0":"Markham","CountryCode":"CAN","1":"CAN","Population":"189098","2":"189098"},{"Name":"Regina","0":"Regina","CountryCode":"CAN","1":"CAN","Population":"180400","2":"180400"},{"Name":"Burnaby","0":"Burnaby","CountryCode":"CAN","1":"CAN","Population":"179209","2":"179209"},{"Name":"Qu\u00e9bec","0":"Qu\u00e9bec","CountryCode":"CAN","1":"CAN","Population":"167264","2":"167264"},{"Name":"York","0":"York","CountryCode":"CAN","1":"CAN","Population":"154980","2":"154980"},{"Name":"Richmond","0":"Richmond","CountryCode":"CAN","1":"CAN","Population":"148867","2":"148867"},{"Name":"Vaughan","0":"Vaughan","CountryCode":"CAN","1":"CAN","Population":"147889","2":"147889"},{"Name":"Burlington","0":"Burlington","CountryCode":"CAN","1":"CAN","Population":"145150","2":"145150"},{"Name":"Oshawa","0":"Oshawa","CountryCode":"CAN","1":"CAN","Population":"140173","2":"140173"},{"Name":"Oakville","0":"Oakville","CountryCode":"CAN","1":"CAN","Population":"139192","2":"139192"},{"Name":"Saint Catharines","0":"Saint Catharines","CountryCode":"CAN","1":"CAN","Population":"136216","2":"136216"},{"Name":"Longueuil","0":"Longueuil","CountryCode":"CAN","1":"CAN","Population":"127977","2":"127977"},{"Name":"Richmond Hill","0":"Richmond Hill","CountryCode":"CAN","1":"CAN","Population":"116428","2":"116428"},{"Name":"Thunder Bay","0":"Thunder Bay","CountryCode":"CAN","1":"CAN","Population":"115913","2":"115913"},{"Name":"Nepean","0":"Nepean","CountryCode":"CAN","1":"CAN","Population":"115100","2":"115100"},{"Name":"Cape Breton","0":"Cape Breton","CountryCode":"CAN","1":"CAN","Population":"114733","2":"114733"},{"Name":"East York","0":"East York","CountryCode":"CAN","1":"CAN","Population":"114034","2":"114034"},{"Name":"Halifax","0":"Halifax","CountryCode":"CAN","1":"CAN","Population":"113910","2":"113910"},{"Name":"Cambridge","0":"Cambridge","CountryCode":"CAN","1":"CAN","Population":"109186","2":"109186"},{"Name":"Gloucester","0":"Gloucester","CountryCode":"CAN","1":"CAN","Population":"107314","2":"107314"},{"Name":"Abbotsford","0":"Abbotsford","CountryCode":"CAN","1":"CAN","Population":"105403","2":"105403"},{"Name":"Guelph","0":"Guelph","CountryCode":"CAN","1":"CAN","Population":"103593","2":"103593"},{"Name":"Saint John\u00b4s","0":"Saint John\u00b4s","CountryCode":"CAN","1":"CAN","Population":"101936","2":"101936"},{"Name":"Coquitlam","0":"Coquitlam","CountryCode":"CAN","1":"CAN","Population":"101820","2":"101820"},{"Name":"Saanich","0":"Saanich","CountryCode":"CAN","1":"CAN","Population":"101388","2":"101388"},{"Name":"Gatineau","0":"Gatineau","CountryCode":"CAN","1":"CAN","Population":"100702","2":"100702"},{"Name":"Delta","0":"Delta","CountryCode":"CAN","1":"CAN","Population":"95411","2":"95411"},{"Name":"Sudbury","0":"Sudbury","CountryCode":"CAN","1":"CAN","Population":"92686","2":"92686"},{"Name":"Kelowna","0":"Kelowna","CountryCode":"CAN","1":"CAN","Population":"89442","2":"89442"},{"Name":"Barrie","0":"Barrie","CountryCode":"CAN","1":"CAN","Population":"89269","2":"89269"},{"Name":"Praia","0":"Praia","CountryCode":"CPV","1":"CPV","Population":"94800","2":"94800"},{"Name":"Almaty","0":"Almaty","CountryCode":"KAZ","1":"KAZ","Population":"1129400","2":"1129400"},{"Name":"Qaraghandy","0":"Qaraghandy","CountryCode":"KAZ","1":"KAZ","Population":"436900","2":"436900"},{"Name":"Shymkent","0":"Shymkent","CountryCode":"KAZ","1":"KAZ","Population":"360100","2":"360100"},{"Name":"Taraz","0":"Taraz","CountryCode":"KAZ","1":"KAZ","Population":"330100","2":"330100"},{"Name":"Astana","0":"Astana","CountryCode":"KAZ","1":"KAZ","Population":"311200","2":"311200"},{"Name":"\u00d6skemen","0":"\u00d6skemen","CountryCode":"KAZ","1":"KAZ","Population":"311000","2":"311000"},{"Name":"Pavlodar","0":"Pavlodar","CountryCode":"KAZ","1":"KAZ","Population":"300500","2":"300500"},{"Name":"Semey","0":"Semey","CountryCode":"KAZ","1":"KAZ","Population":"269600","2":"269600"},{"Name":"Aqt\u00f6be","0":"Aqt\u00f6be","CountryCode":"KAZ","1":"KAZ","Population":"253100","2":"253100"},{"Name":"Qostanay","0":"Qostanay","CountryCode":"KAZ","1":"KAZ","Population":"221400","2":"221400"},{"Name":"Petropavl","0":"Petropavl","CountryCode":"KAZ","1":"KAZ","Population":"203500","2":"203500"},{"Name":"Oral","0":"Oral","CountryCode":"KAZ","1":"KAZ","Population":"195500","2":"195500"},{"Name":"Temirtau","0":"Temirtau","CountryCode":"KAZ","1":"KAZ","Population":"170500","2":"170500"},{"Name":"Qyzylorda","0":"Qyzylorda","CountryCode":"KAZ","1":"KAZ","Population":"157400","2":"157400"},{"Name":"Aqtau","0":"Aqtau","CountryCode":"KAZ","1":"KAZ","Population":"143400","2":"143400"},{"Name":"Atyrau","0":"Atyrau","CountryCode":"KAZ","1":"KAZ","Population":"142500","2":"142500"},{"Name":"Ekibastuz","0":"Ekibastuz","CountryCode":"KAZ","1":"KAZ","Population":"127200","2":"127200"},{"Name":"K\u00f6kshetau","0":"K\u00f6kshetau","CountryCode":"KAZ","1":"KAZ","Population":"123400","2":"123400"},{"Name":"Rudnyy","0":"Rudnyy","CountryCode":"KAZ","1":"KAZ","Population":"109500","2":"109500"},{"Name":"Taldyqorghan","0":"Taldyqorghan","CountryCode":"KAZ","1":"KAZ","Population":"98000","2":"98000"},{"Name":"Zhezqazghan","0":"Zhezqazghan","CountryCode":"KAZ","1":"KAZ","Population":"90000","2":"90000"},{"Name":"Nairobi","0":"Nairobi","CountryCode":"KEN","1":"KEN","Population":"2290000","2":"2290000"},{"Name":"Mombasa","0":"Mombasa","CountryCode":"KEN","1":"KEN","Population":"461753","2":"461753"},{"Name":"Kisumu","0":"Kisumu","CountryCode":"KEN","1":"KEN","Population":"192733","2":"192733"},{"Name":"Nakuru","0":"Nakuru","CountryCode":"KEN","1":"KEN","Population":"163927","2":"163927"},{"Name":"Machakos","0":"Machakos","CountryCode":"KEN","1":"KEN","Population":"116293","2":"116293"},{"Name":"Eldoret","0":"Eldoret","CountryCode":"KEN","1":"KEN","Population":"111882","2":"111882"},{"Name":"Meru","0":"Meru","CountryCode":"KEN","1":"KEN","Population":"94947","2":"94947"},{"Name":"Nyeri","0":"Nyeri","CountryCode":"KEN","1":"KEN","Population":"91258","2":"91258"},{"Name":"Bangui","0":"Bangui","CountryCode":"CAF","1":"CAF","Population":"524000","2":"524000"},{"Name":"Shanghai","0":"Shanghai","CountryCode":"CHN","1":"CHN","Population":"9696300","2":"9696300"},{"Name":"Peking","0":"Peking","CountryCode":"CHN","1":"CHN","Population":"7472000","2":"7472000"},{"Name":"Chongqing","0":"Chongqing","CountryCode":"CHN","1":"CHN","Population":"6351600","2":"6351600"},{"Name":"Tianjin","0":"Tianjin","CountryCode":"CHN","1":"CHN","Population":"5286800","2":"5286800"},{"Name":"Wuhan","0":"Wuhan","CountryCode":"CHN","1":"CHN","Population":"4344600","2":"4344600"},{"Name":"Harbin","0":"Harbin","CountryCode":"CHN","1":"CHN","Population":"4289800","2":"4289800"},{"Name":"Shenyang","0":"Shenyang","CountryCode":"CHN","1":"CHN","Population":"4265200","2":"4265200"},{"Name":"Kanton [Guangzhou]","0":"Kanton [Guangzhou]","CountryCode":"CHN","1":"CHN","Population":"4256300","2":"4256300"},{"Name":"Chengdu","0":"Chengdu","CountryCode":"CHN","1":"CHN","Population":"3361500","2":"3361500"},{"Name":"Nanking [Nanjing]","0":"Nanking [Nanjing]","CountryCode":"CHN","1":"CHN","Population":"2870300","2":"2870300"},{"Name":"Changchun","0":"Changchun","CountryCode":"CHN","1":"CHN","Population":"2812000","2":"2812000"},{"Name":"Xi\u00b4an","0":"Xi\u00b4an","CountryCode":"CHN","1":"CHN","Population":"2761400","2":"2761400"},{"Name":"Dalian","0":"Dalian","CountryCode":"CHN","1":"CHN","Population":"2697000","2":"2697000"},{"Name":"Qingdao","0":"Qingdao","CountryCode":"CHN","1":"CHN","Population":"2596000","2":"2596000"},{"Name":"Jinan","0":"Jinan","CountryCode":"CHN","1":"CHN","Population":"2278100","2":"2278100"},{"Name":"Hangzhou","0":"Hangzhou","CountryCode":"CHN","1":"CHN","Population":"2190500","2":"2190500"},{"Name":"Zhengzhou","0":"Zhengzhou","CountryCode":"CHN","1":"CHN","Population":"2107200","2":"2107200"},{"Name":"Shijiazhuang","0":"Shijiazhuang","CountryCode":"CHN","1":"CHN","Population":"2041500","2":"2041500"},{"Name":"Taiyuan","0":"Taiyuan","CountryCode":"CHN","1":"CHN","Population":"1968400","2":"1968400"},{"Name":"Kunming","0":"Kunming","CountryCode":"CHN","1":"CHN","Population":"1829500","2":"1829500"},{"Name":"Changsha","0":"Changsha","CountryCode":"CHN","1":"CHN","Population":"1809800","2":"1809800"},{"Name":"Nanchang","0":"Nanchang","CountryCode":"CHN","1":"CHN","Population":"1691600","2":"1691600"},{"Name":"Fuzhou","0":"Fuzhou","CountryCode":"CHN","1":"CHN","Population":"1593800","2":"1593800"},{"Name":"Lanzhou","0":"Lanzhou","CountryCode":"CHN","1":"CHN","Population":"1565800","2":"1565800"},{"Name":"Guiyang","0":"Guiyang","CountryCode":"CHN","1":"CHN","Population":"1465200","2":"1465200"},{"Name":"Ningbo","0":"Ningbo","CountryCode":"CHN","1":"CHN","Population":"1371200","2":"1371200"},{"Name":"Hefei","0":"Hefei","CountryCode":"CHN","1":"CHN","Population":"1369100","2":"1369100"},{"Name":"Urumt\u0161i [\u00dcr\u00fcmqi]","0":"Urumt\u0161i [\u00dcr\u00fcmqi]","CountryCode":"CHN","1":"CHN","Population":"1310100","2":"1310100"},{"Name":"Anshan","0":"Anshan","CountryCode":"CHN","1":"CHN","Population":"1200000","2":"1200000"},{"Name":"Fushun","0":"Fushun","CountryCode":"CHN","1":"CHN","Population":"1200000","2":"1200000"},{"Name":"Nanning","0":"Nanning","CountryCode":"CHN","1":"CHN","Population":"1161800","2":"1161800"},{"Name":"Zibo","0":"Zibo","CountryCode":"CHN","1":"CHN","Population":"1140000","2":"1140000"},{"Name":"Qiqihar","0":"Qiqihar","CountryCode":"CHN","1":"CHN","Population":"1070000","2":"1070000"},{"Name":"Jilin","0":"Jilin","CountryCode":"CHN","1":"CHN","Population":"1040000","2":"1040000"},{"Name":"Tangshan","0":"Tangshan","CountryCode":"CHN","1":"CHN","Population":"1040000","2":"1040000"},{"Name":"Baotou","0":"Baotou","CountryCode":"CHN","1":"CHN","Population":"980000","2":"980000"},{"Name":"Shenzhen","0":"Shenzhen","CountryCode":"CHN","1":"CHN","Population":"950500","2":"950500"},{"Name":"Hohhot","0":"Hohhot","CountryCode":"CHN","1":"CHN","Population":"916700","2":"916700"},{"Name":"Handan","0":"Handan","CountryCode":"CHN","1":"CHN","Population":"840000","2":"840000"},{"Name":"Wuxi","0":"Wuxi","CountryCode":"CHN","1":"CHN","Population":"830000","2":"830000"},{"Name":"Xuzhou","0":"Xuzhou","CountryCode":"CHN","1":"CHN","Population":"810000","2":"810000"},{"Name":"Datong","0":"Datong","CountryCode":"CHN","1":"CHN","Population":"800000","2":"800000"},{"Name":"Yichun","0":"Yichun","CountryCode":"CHN","1":"CHN","Population":"800000","2":"800000"},{"Name":"Benxi","0":"Benxi","CountryCode":"CHN","1":"CHN","Population":"770000","2":"770000"},{"Name":"Luoyang","0":"Luoyang","CountryCode":"CHN","1":"CHN","Population":"760000","2":"760000"},{"Name":"Suzhou","0":"Suzhou","CountryCode":"CHN","1":"CHN","Population":"710000","2":"710000"},{"Name":"Xining","0":"Xining","CountryCode":"CHN","1":"CHN","Population":"700200","2":"700200"},{"Name":"Huainan","0":"Huainan","CountryCode":"CHN","1":"CHN","Population":"700000","2":"700000"},{"Name":"Jixi","0":"Jixi","CountryCode":"CHN","1":"CHN","Population":"683885","2":"683885"},{"Name":"Daqing","0":"Daqing","CountryCode":"CHN","1":"CHN","Population":"660000","2":"660000"},{"Name":"Fuxin","0":"Fuxin","CountryCode":"CHN","1":"CHN","Population":"640000","2":"640000"},{"Name":"Amoy [Xiamen]","0":"Amoy [Xiamen]","CountryCode":"CHN","1":"CHN","Population":"627500","2":"627500"},{"Name":"Liuzhou","0":"Liuzhou","CountryCode":"CHN","1":"CHN","Population":"610000","2":"610000"},{"Name":"Shantou","0":"Shantou","CountryCode":"CHN","1":"CHN","Population":"580000","2":"580000"},{"Name":"Jinzhou","0":"Jinzhou","CountryCode":"CHN","1":"CHN","Population":"570000","2":"570000"},{"Name":"Mudanjiang","0":"Mudanjiang","CountryCode":"CHN","1":"CHN","Population":"570000","2":"570000"},{"Name":"Yinchuan","0":"Yinchuan","CountryCode":"CHN","1":"CHN","Population":"544500","2":"544500"},{"Name":"Changzhou","0":"Changzhou","CountryCode":"CHN","1":"CHN","Population":"530000","2":"530000"},{"Name":"Zhangjiakou","0":"Zhangjiakou","CountryCode":"CHN","1":"CHN","Population":"530000","2":"530000"},{"Name":"Dandong","0":"Dandong","CountryCode":"CHN","1":"CHN","Population":"520000","2":"520000"},{"Name":"Hegang","0":"Hegang","CountryCode":"CHN","1":"CHN","Population":"520000","2":"520000"},{"Name":"Kaifeng","0":"Kaifeng","CountryCode":"CHN","1":"CHN","Population":"510000","2":"510000"},{"Name":"Jiamusi","0":"Jiamusi","CountryCode":"CHN","1":"CHN","Population":"493409","2":"493409"},{"Name":"Liaoyang","0":"Liaoyang","CountryCode":"CHN","1":"CHN","Population":"492559","2":"492559"},{"Name":"Hengyang","0":"Hengyang","CountryCode":"CHN","1":"CHN","Population":"487148","2":"487148"},{"Name":"Baoding","0":"Baoding","CountryCode":"CHN","1":"CHN","Population":"483155","2":"483155"},{"Name":"Hunjiang","0":"Hunjiang","CountryCode":"CHN","1":"CHN","Population":"482043","2":"482043"},{"Name":"Xinxiang","0":"Xinxiang","CountryCode":"CHN","1":"CHN","Population":"473762","2":"473762"},{"Name":"Huangshi","0":"Huangshi","CountryCode":"CHN","1":"CHN","Population":"457601","2":"457601"},{"Name":"Haikou","0":"Haikou","CountryCode":"CHN","1":"CHN","Population":"454300","2":"454300"},{"Name":"Yantai","0":"Yantai","CountryCode":"CHN","1":"CHN","Population":"452127","2":"452127"},{"Name":"Bengbu","0":"Bengbu","CountryCode":"CHN","1":"CHN","Population":"449245","2":"449245"},{"Name":"Xiangtan","0":"Xiangtan","CountryCode":"CHN","1":"CHN","Population":"441968","2":"441968"},{"Name":"Weifang","0":"Weifang","CountryCode":"CHN","1":"CHN","Population":"428522","2":"428522"},{"Name":"Wuhu","0":"Wuhu","CountryCode":"CHN","1":"CHN","Population":"425740","2":"425740"},{"Name":"Pingxiang","0":"Pingxiang","CountryCode":"CHN","1":"CHN","Population":"425579","2":"425579"},{"Name":"Yingkou","0":"Yingkou","CountryCode":"CHN","1":"CHN","Population":"421589","2":"421589"},{"Name":"Anyang","0":"Anyang","CountryCode":"CHN","1":"CHN","Population":"420332","2":"420332"},{"Name":"Panzhihua","0":"Panzhihua","CountryCode":"CHN","1":"CHN","Population":"415466","2":"415466"},{"Name":"Pingdingshan","0":"Pingdingshan","CountryCode":"CHN","1":"CHN","Population":"410775","2":"410775"},{"Name":"Xiangfan","0":"Xiangfan","CountryCode":"CHN","1":"CHN","Population":"410407","2":"410407"},{"Name":"Zhuzhou","0":"Zhuzhou","CountryCode":"CHN","1":"CHN","Population":"409924","2":"409924"},{"Name":"Jiaozuo","0":"Jiaozuo","CountryCode":"CHN","1":"CHN","Population":"409100","2":"409100"},{"Name":"Wenzhou","0":"Wenzhou","CountryCode":"CHN","1":"CHN","Population":"401871","2":"401871"},{"Name":"Zhangjiang","0":"Zhangjiang","CountryCode":"CHN","1":"CHN","Population":"400997","2":"400997"},{"Name":"Zigong","0":"Zigong","CountryCode":"CHN","1":"CHN","Population":"393184","2":"393184"},{"Name":"Shuangyashan","0":"Shuangyashan","CountryCode":"CHN","1":"CHN","Population":"386081","2":"386081"},{"Name":"Zaozhuang","0":"Zaozhuang","CountryCode":"CHN","1":"CHN","Population":"380846","2":"380846"},{"Name":"Yakeshi","0":"Yakeshi","CountryCode":"CHN","1":"CHN","Population":"377869","2":"377869"},{"Name":"Yichang","0":"Yichang","CountryCode":"CHN","1":"CHN","Population":"371601","2":"371601"},{"Name":"Zhenjiang","0":"Zhenjiang","CountryCode":"CHN","1":"CHN","Population":"368316","2":"368316"},{"Name":"Huaibei","0":"Huaibei","CountryCode":"CHN","1":"CHN","Population":"366549","2":"366549"},{"Name":"Qinhuangdao","0":"Qinhuangdao","CountryCode":"CHN","1":"CHN","Population":"364972","2":"364972"},{"Name":"Guilin","0":"Guilin","CountryCode":"CHN","1":"CHN","Population":"364130","2":"364130"},{"Name":"Liupanshui","0":"Liupanshui","CountryCode":"CHN","1":"CHN","Population":"363954","2":"363954"},{"Name":"Panjin","0":"Panjin","CountryCode":"CHN","1":"CHN","Population":"362773","2":"362773"},{"Name":"Yangquan","0":"Yangquan","CountryCode":"CHN","1":"CHN","Population":"362268","2":"362268"},{"Name":"Jinxi","0":"Jinxi","CountryCode":"CHN","1":"CHN","Population":"357052","2":"357052"},{"Name":"Liaoyuan","0":"Liaoyuan","CountryCode":"CHN","1":"CHN","Population":"354141","2":"354141"},{"Name":"Lianyungang","0":"Lianyungang","CountryCode":"CHN","1":"CHN","Population":"354139","2":"354139"},{"Name":"Xianyang","0":"Xianyang","CountryCode":"CHN","1":"CHN","Population":"352125","2":"352125"},{"Name":"Tai\u00b4an","0":"Tai\u00b4an","CountryCode":"CHN","1":"CHN","Population":"350696","2":"350696"},{"Name":"Chifeng","0":"Chifeng","CountryCode":"CHN","1":"CHN","Population":"350077","2":"350077"},{"Name":"Shaoguan","0":"Shaoguan","CountryCode":"CHN","1":"CHN","Population":"350043","2":"350043"},{"Name":"Nantong","0":"Nantong","CountryCode":"CHN","1":"CHN","Population":"343341","2":"343341"},{"Name":"Leshan","0":"Leshan","CountryCode":"CHN","1":"CHN","Population":"341128","2":"341128"},{"Name":"Baoji","0":"Baoji","CountryCode":"CHN","1":"CHN","Population":"337765","2":"337765"},{"Name":"Linyi","0":"Linyi","CountryCode":"CHN","1":"CHN","Population":"324720","2":"324720"},{"Name":"Tonghua","0":"Tonghua","CountryCode":"CHN","1":"CHN","Population":"324600","2":"324600"},{"Name":"Siping","0":"Siping","CountryCode":"CHN","1":"CHN","Population":"317223","2":"317223"},{"Name":"Changzhi","0":"Changzhi","CountryCode":"CHN","1":"CHN","Population":"317144","2":"317144"},{"Name":"Tengzhou","0":"Tengzhou","CountryCode":"CHN","1":"CHN","Population":"315083","2":"315083"},{"Name":"Chaozhou","0":"Chaozhou","CountryCode":"CHN","1":"CHN","Population":"313469","2":"313469"},{"Name":"Yangzhou","0":"Yangzhou","CountryCode":"CHN","1":"CHN","Population":"312892","2":"312892"},{"Name":"Dongwan","0":"Dongwan","CountryCode":"CHN","1":"CHN","Population":"308669","2":"308669"},{"Name":"Ma\u00b4anshan","0":"Ma\u00b4anshan","CountryCode":"CHN","1":"CHN","Population":"305421","2":"305421"},{"Name":"Foshan","0":"Foshan","CountryCode":"CHN","1":"CHN","Population":"303160","2":"303160"},{"Name":"Yueyang","0":"Yueyang","CountryCode":"CHN","1":"CHN","Population":"302800","2":"302800"},{"Name":"Xingtai","0":"Xingtai","CountryCode":"CHN","1":"CHN","Population":"302789","2":"302789"},{"Name":"Changde","0":"Changde","CountryCode":"CHN","1":"CHN","Population":"301276","2":"301276"},{"Name":"Shihezi","0":"Shihezi","CountryCode":"CHN","1":"CHN","Population":"299676","2":"299676"},{"Name":"Yancheng","0":"Yancheng","CountryCode":"CHN","1":"CHN","Population":"296831","2":"296831"},{"Name":"Jiujiang","0":"Jiujiang","CountryCode":"CHN","1":"CHN","Population":"291187","2":"291187"},{"Name":"Dongying","0":"Dongying","CountryCode":"CHN","1":"CHN","Population":"281728","2":"281728"},{"Name":"Shashi","0":"Shashi","CountryCode":"CHN","1":"CHN","Population":"281352","2":"281352"},{"Name":"Xintai","0":"Xintai","CountryCode":"CHN","1":"CHN","Population":"281248","2":"281248"},{"Name":"Jingdezhen","0":"Jingdezhen","CountryCode":"CHN","1":"CHN","Population":"281183","2":"281183"},{"Name":"Tongchuan","0":"Tongchuan","CountryCode":"CHN","1":"CHN","Population":"280657","2":"280657"},{"Name":"Zhongshan","0":"Zhongshan","CountryCode":"CHN","1":"CHN","Population":"278829","2":"278829"},{"Name":"Shiyan","0":"Shiyan","CountryCode":"CHN","1":"CHN","Population":"273786","2":"273786"},{"Name":"Tieli","0":"Tieli","CountryCode":"CHN","1":"CHN","Population":"265683","2":"265683"},{"Name":"Jining","0":"Jining","CountryCode":"CHN","1":"CHN","Population":"265248","2":"265248"},{"Name":"Wuhai","0":"Wuhai","CountryCode":"CHN","1":"CHN","Population":"264081","2":"264081"},{"Name":"Mianyang","0":"Mianyang","CountryCode":"CHN","1":"CHN","Population":"262947","2":"262947"},{"Name":"Luzhou","0":"Luzhou","CountryCode":"CHN","1":"CHN","Population":"262892","2":"262892"},{"Name":"Zunyi","0":"Zunyi","CountryCode":"CHN","1":"CHN","Population":"261862","2":"261862"},{"Name":"Shizuishan","0":"Shizuishan","CountryCode":"CHN","1":"CHN","Population":"257862","2":"257862"},{"Name":"Neijiang","0":"Neijiang","CountryCode":"CHN","1":"CHN","Population":"256012","2":"256012"},{"Name":"Tongliao","0":"Tongliao","CountryCode":"CHN","1":"CHN","Population":"255129","2":"255129"},{"Name":"Tieling","0":"Tieling","CountryCode":"CHN","1":"CHN","Population":"254842","2":"254842"},{"Name":"Wafangdian","0":"Wafangdian","CountryCode":"CHN","1":"CHN","Population":"251733","2":"251733"},{"Name":"Anqing","0":"Anqing","CountryCode":"CHN","1":"CHN","Population":"250718","2":"250718"},{"Name":"Shaoyang","0":"Shaoyang","CountryCode":"CHN","1":"CHN","Population":"247227","2":"247227"},{"Name":"Laiwu","0":"Laiwu","CountryCode":"CHN","1":"CHN","Population":"246833","2":"246833"},{"Name":"Chengde","0":"Chengde","CountryCode":"CHN","1":"CHN","Population":"246799","2":"246799"},{"Name":"Tianshui","0":"Tianshui","CountryCode":"CHN","1":"CHN","Population":"244974","2":"244974"},{"Name":"Nanyang","0":"Nanyang","CountryCode":"CHN","1":"CHN","Population":"243303","2":"243303"},{"Name":"Cangzhou","0":"Cangzhou","CountryCode":"CHN","1":"CHN","Population":"242708","2":"242708"},{"Name":"Yibin","0":"Yibin","CountryCode":"CHN","1":"CHN","Population":"241019","2":"241019"},{"Name":"Huaiyin","0":"Huaiyin","CountryCode":"CHN","1":"CHN","Population":"239675","2":"239675"},{"Name":"Dunhua","0":"Dunhua","CountryCode":"CHN","1":"CHN","Population":"235100","2":"235100"},{"Name":"Yanji","0":"Yanji","CountryCode":"CHN","1":"CHN","Population":"230892","2":"230892"},{"Name":"Jiangmen","0":"Jiangmen","CountryCode":"CHN","1":"CHN","Population":"230587","2":"230587"},{"Name":"Tongling","0":"Tongling","CountryCode":"CHN","1":"CHN","Population":"228017","2":"228017"},{"Name":"Suihua","0":"Suihua","CountryCode":"CHN","1":"CHN","Population":"227881","2":"227881"},{"Name":"Gongziling","0":"Gongziling","CountryCode":"CHN","1":"CHN","Population":"226569","2":"226569"},{"Name":"Xiantao","0":"Xiantao","CountryCode":"CHN","1":"CHN","Population":"222884","2":"222884"},{"Name":"Chaoyang","0":"Chaoyang","CountryCode":"CHN","1":"CHN","Population":"222394","2":"222394"},{"Name":"Ganzhou","0":"Ganzhou","CountryCode":"CHN","1":"CHN","Population":"220129","2":"220129"},{"Name":"Huzhou","0":"Huzhou","CountryCode":"CHN","1":"CHN","Population":"218071","2":"218071"},{"Name":"Baicheng","0":"Baicheng","CountryCode":"CHN","1":"CHN","Population":"217987","2":"217987"},{"Name":"Shangzi","0":"Shangzi","CountryCode":"CHN","1":"CHN","Population":"215373","2":"215373"},{"Name":"Yangjiang","0":"Yangjiang","CountryCode":"CHN","1":"CHN","Population":"215196","2":"215196"},{"Name":"Qitaihe","0":"Qitaihe","CountryCode":"CHN","1":"CHN","Population":"214957","2":"214957"},{"Name":"Gejiu","0":"Gejiu","CountryCode":"CHN","1":"CHN","Population":"214294","2":"214294"},{"Name":"Jiangyin","0":"Jiangyin","CountryCode":"CHN","1":"CHN","Population":"213659","2":"213659"},{"Name":"Hebi","0":"Hebi","CountryCode":"CHN","1":"CHN","Population":"212976","2":"212976"},{"Name":"Jiaxing","0":"Jiaxing","CountryCode":"CHN","1":"CHN","Population":"211526","2":"211526"},{"Name":"Wuzhou","0":"Wuzhou","CountryCode":"CHN","1":"CHN","Population":"210452","2":"210452"},{"Name":"Meihekou","0":"Meihekou","CountryCode":"CHN","1":"CHN","Population":"209038","2":"209038"},{"Name":"Xuchang","0":"Xuchang","CountryCode":"CHN","1":"CHN","Population":"208815","2":"208815"},{"Name":"Liaocheng","0":"Liaocheng","CountryCode":"CHN","1":"CHN","Population":"207844","2":"207844"},{"Name":"Haicheng","0":"Haicheng","CountryCode":"CHN","1":"CHN","Population":"205560","2":"205560"},{"Name":"Qianjiang","0":"Qianjiang","CountryCode":"CHN","1":"CHN","Population":"205504","2":"205504"},{"Name":"Baiyin","0":"Baiyin","CountryCode":"CHN","1":"CHN","Population":"204970","2":"204970"},{"Name":"Bei\u00b4an","0":"Bei\u00b4an","CountryCode":"CHN","1":"CHN","Population":"204899","2":"204899"},{"Name":"Yixing","0":"Yixing","CountryCode":"CHN","1":"CHN","Population":"200824","2":"200824"},{"Name":"Laizhou","0":"Laizhou","CountryCode":"CHN","1":"CHN","Population":"198664","2":"198664"},{"Name":"Qaramay","0":"Qaramay","CountryCode":"CHN","1":"CHN","Population":"197602","2":"197602"},{"Name":"Acheng","0":"Acheng","CountryCode":"CHN","1":"CHN","Population":"197595","2":"197595"},{"Name":"Dezhou","0":"Dezhou","CountryCode":"CHN","1":"CHN","Population":"195485","2":"195485"},{"Name":"Nanping","0":"Nanping","CountryCode":"CHN","1":"CHN","Population":"195064","2":"195064"},{"Name":"Zhaoqing","0":"Zhaoqing","CountryCode":"CHN","1":"CHN","Population":"194784","2":"194784"},{"Name":"Beipiao","0":"Beipiao","CountryCode":"CHN","1":"CHN","Population":"194301","2":"194301"},{"Name":"Fengcheng","0":"Fengcheng","CountryCode":"CHN","1":"CHN","Population":"193784","2":"193784"},{"Name":"Fuyu","0":"Fuyu","CountryCode":"CHN","1":"CHN","Population":"192981","2":"192981"},{"Name":"Xinyang","0":"Xinyang","CountryCode":"CHN","1":"CHN","Population":"192509","2":"192509"},{"Name":"Dongtai","0":"Dongtai","CountryCode":"CHN","1":"CHN","Population":"192247","2":"192247"},{"Name":"Yuci","0":"Yuci","CountryCode":"CHN","1":"CHN","Population":"191356","2":"191356"},{"Name":"Honghu","0":"Honghu","CountryCode":"CHN","1":"CHN","Population":"190772","2":"190772"},{"Name":"Ezhou","0":"Ezhou","CountryCode":"CHN","1":"CHN","Population":"190123","2":"190123"},{"Name":"Heze","0":"Heze","CountryCode":"CHN","1":"CHN","Population":"189293","2":"189293"},{"Name":"Daxian","0":"Daxian","CountryCode":"CHN","1":"CHN","Population":"188101","2":"188101"},{"Name":"Linfen","0":"Linfen","CountryCode":"CHN","1":"CHN","Population":"187309","2":"187309"},{"Name":"Tianmen","0":"Tianmen","CountryCode":"CHN","1":"CHN","Population":"186332","2":"186332"},{"Name":"Yiyang","0":"Yiyang","CountryCode":"CHN","1":"CHN","Population":"185818","2":"185818"},{"Name":"Quanzhou","0":"Quanzhou","CountryCode":"CHN","1":"CHN","Population":"185154","2":"185154"},{"Name":"Rizhao","0":"Rizhao","CountryCode":"CHN","1":"CHN","Population":"185048","2":"185048"},{"Name":"Deyang","0":"Deyang","CountryCode":"CHN","1":"CHN","Population":"182488","2":"182488"},{"Name":"Guangyuan","0":"Guangyuan","CountryCode":"CHN","1":"CHN","Population":"182241","2":"182241"},{"Name":"Changshu","0":"Changshu","CountryCode":"CHN","1":"CHN","Population":"181805","2":"181805"},{"Name":"Zhangzhou","0":"Zhangzhou","CountryCode":"CHN","1":"CHN","Population":"181424","2":"181424"},{"Name":"Hailar","0":"Hailar","CountryCode":"CHN","1":"CHN","Population":"180650","2":"180650"},{"Name":"Nanchong","0":"Nanchong","CountryCode":"CHN","1":"CHN","Population":"180273","2":"180273"},{"Name":"Jiutai","0":"Jiutai","CountryCode":"CHN","1":"CHN","Population":"180130","2":"180130"},{"Name":"Zhaodong","0":"Zhaodong","CountryCode":"CHN","1":"CHN","Population":"179976","2":"179976"},{"Name":"Shaoxing","0":"Shaoxing","CountryCode":"CHN","1":"CHN","Population":"179818","2":"179818"},{"Name":"Fuyang","0":"Fuyang","CountryCode":"CHN","1":"CHN","Population":"179572","2":"179572"},{"Name":"Maoming","0":"Maoming","CountryCode":"CHN","1":"CHN","Population":"178683","2":"178683"},{"Name":"Qujing","0":"Qujing","CountryCode":"CHN","1":"CHN","Population":"178669","2":"178669"},{"Name":"Ghulja","0":"Ghulja","CountryCode":"CHN","1":"CHN","Population":"177193","2":"177193"},{"Name":"Jiaohe","0":"Jiaohe","CountryCode":"CHN","1":"CHN","Population":"176367","2":"176367"},{"Name":"Puyang","0":"Puyang","CountryCode":"CHN","1":"CHN","Population":"175988","2":"175988"},{"Name":"Huadian","0":"Huadian","CountryCode":"CHN","1":"CHN","Population":"175873","2":"175873"},{"Name":"Jiangyou","0":"Jiangyou","CountryCode":"CHN","1":"CHN","Population":"175753","2":"175753"},{"Name":"Qashqar","0":"Qashqar","CountryCode":"CHN","1":"CHN","Population":"174570","2":"174570"},{"Name":"Anshun","0":"Anshun","CountryCode":"CHN","1":"CHN","Population":"174142","2":"174142"},{"Name":"Fuling","0":"Fuling","CountryCode":"CHN","1":"CHN","Population":"173878","2":"173878"},{"Name":"Xinyu","0":"Xinyu","CountryCode":"CHN","1":"CHN","Population":"173524","2":"173524"},{"Name":"Hanzhong","0":"Hanzhong","CountryCode":"CHN","1":"CHN","Population":"169930","2":"169930"},{"Name":"Danyang","0":"Danyang","CountryCode":"CHN","1":"CHN","Population":"169603","2":"169603"},{"Name":"Chenzhou","0":"Chenzhou","CountryCode":"CHN","1":"CHN","Population":"169400","2":"169400"},{"Name":"Xiaogan","0":"Xiaogan","CountryCode":"CHN","1":"CHN","Population":"166280","2":"166280"},{"Name":"Shangqiu","0":"Shangqiu","CountryCode":"CHN","1":"CHN","Population":"164880","2":"164880"},{"Name":"Zhuhai","0":"Zhuhai","CountryCode":"CHN","1":"CHN","Population":"164747","2":"164747"},{"Name":"Qingyuan","0":"Qingyuan","CountryCode":"CHN","1":"CHN","Population":"164641","2":"164641"},{"Name":"Aqsu","0":"Aqsu","CountryCode":"CHN","1":"CHN","Population":"164092","2":"164092"},{"Name":"Jining","0":"Jining","CountryCode":"CHN","1":"CHN","Population":"163552","2":"163552"},{"Name":"Xiaoshan","0":"Xiaoshan","CountryCode":"CHN","1":"CHN","Population":"162930","2":"162930"},{"Name":"Zaoyang","0":"Zaoyang","CountryCode":"CHN","1":"CHN","Population":"162198","2":"162198"},{"Name":"Xinghua","0":"Xinghua","CountryCode":"CHN","1":"CHN","Population":"161910","2":"161910"},{"Name":"Hami","0":"Hami","CountryCode":"CHN","1":"CHN","Population":"161315","2":"161315"},{"Name":"Huizhou","0":"Huizhou","CountryCode":"CHN","1":"CHN","Population":"161023","2":"161023"},{"Name":"Jinmen","0":"Jinmen","CountryCode":"CHN","1":"CHN","Population":"160794","2":"160794"},{"Name":"Sanming","0":"Sanming","CountryCode":"CHN","1":"CHN","Population":"160691","2":"160691"},{"Name":"Ulanhot","0":"Ulanhot","CountryCode":"CHN","1":"CHN","Population":"159538","2":"159538"},{"Name":"Korla","0":"Korla","CountryCode":"CHN","1":"CHN","Population":"159344","2":"159344"},{"Name":"Wanxian","0":"Wanxian","CountryCode":"CHN","1":"CHN","Population":"156823","2":"156823"},{"Name":"Rui\u00b4an","0":"Rui\u00b4an","CountryCode":"CHN","1":"CHN","Population":"156468","2":"156468"},{"Name":"Zhoushan","0":"Zhoushan","CountryCode":"CHN","1":"CHN","Population":"156317","2":"156317"},{"Name":"Liangcheng","0":"Liangcheng","CountryCode":"CHN","1":"CHN","Population":"156307","2":"156307"},{"Name":"Jiaozhou","0":"Jiaozhou","CountryCode":"CHN","1":"CHN","Population":"153364","2":"153364"},{"Name":"Taizhou","0":"Taizhou","CountryCode":"CHN","1":"CHN","Population":"152442","2":"152442"},{"Name":"Suzhou","0":"Suzhou","CountryCode":"CHN","1":"CHN","Population":"151862","2":"151862"},{"Name":"Yichun","0":"Yichun","CountryCode":"CHN","1":"CHN","Population":"151585","2":"151585"},{"Name":"Taonan","0":"Taonan","CountryCode":"CHN","1":"CHN","Population":"150168","2":"150168"},{"Name":"Pingdu","0":"Pingdu","CountryCode":"CHN","1":"CHN","Population":"150123","2":"150123"},{"Name":"Ji\u00b4an","0":"Ji\u00b4an","CountryCode":"CHN","1":"CHN","Population":"148583","2":"148583"},{"Name":"Longkou","0":"Longkou","CountryCode":"CHN","1":"CHN","Population":"148362","2":"148362"},{"Name":"Langfang","0":"Langfang","CountryCode":"CHN","1":"CHN","Population":"148105","2":"148105"},{"Name":"Zhoukou","0":"Zhoukou","CountryCode":"CHN","1":"CHN","Population":"146288","2":"146288"},{"Name":"Suining","0":"Suining","CountryCode":"CHN","1":"CHN","Population":"146086","2":"146086"},{"Name":"Yulin","0":"Yulin","CountryCode":"CHN","1":"CHN","Population":"144467","2":"144467"},{"Name":"Jinhua","0":"Jinhua","CountryCode":"CHN","1":"CHN","Population":"144280","2":"144280"},{"Name":"Liu\u00b4an","0":"Liu\u00b4an","CountryCode":"CHN","1":"CHN","Population":"144248","2":"144248"},{"Name":"Shuangcheng","0":"Shuangcheng","CountryCode":"CHN","1":"CHN","Population":"142659","2":"142659"},{"Name":"Suizhou","0":"Suizhou","CountryCode":"CHN","1":"CHN","Population":"142302","2":"142302"},{"Name":"Ankang","0":"Ankang","CountryCode":"CHN","1":"CHN","Population":"142170","2":"142170"},{"Name":"Weinan","0":"Weinan","CountryCode":"CHN","1":"CHN","Population":"140169","2":"140169"},{"Name":"Longjing","0":"Longjing","CountryCode":"CHN","1":"CHN","Population":"139417","2":"139417"},{"Name":"Da\u00b4an","0":"Da\u00b4an","CountryCode":"CHN","1":"CHN","Population":"138963","2":"138963"},{"Name":"Lengshuijiang","0":"Lengshuijiang","CountryCode":"CHN","1":"CHN","Population":"137994","2":"137994"},{"Name":"Laiyang","0":"Laiyang","CountryCode":"CHN","1":"CHN","Population":"137080","2":"137080"},{"Name":"Xianning","0":"Xianning","CountryCode":"CHN","1":"CHN","Population":"136811","2":"136811"},{"Name":"Dali","0":"Dali","CountryCode":"CHN","1":"CHN","Population":"136554","2":"136554"},{"Name":"Anda","0":"Anda","CountryCode":"CHN","1":"CHN","Population":"136446","2":"136446"},{"Name":"Jincheng","0":"Jincheng","CountryCode":"CHN","1":"CHN","Population":"136396","2":"136396"},{"Name":"Longyan","0":"Longyan","CountryCode":"CHN","1":"CHN","Population":"134481","2":"134481"},{"Name":"Xichang","0":"Xichang","CountryCode":"CHN","1":"CHN","Population":"134419","2":"134419"},{"Name":"Wendeng","0":"Wendeng","CountryCode":"CHN","1":"CHN","Population":"133910","2":"133910"},{"Name":"Hailun","0":"Hailun","CountryCode":"CHN","1":"CHN","Population":"133565","2":"133565"},{"Name":"Binzhou","0":"Binzhou","CountryCode":"CHN","1":"CHN","Population":"133555","2":"133555"},{"Name":"Linhe","0":"Linhe","CountryCode":"CHN","1":"CHN","Population":"133183","2":"133183"},{"Name":"Wuwei","0":"Wuwei","CountryCode":"CHN","1":"CHN","Population":"133101","2":"133101"},{"Name":"Duyun","0":"Duyun","CountryCode":"CHN","1":"CHN","Population":"132971","2":"132971"},{"Name":"Mishan","0":"Mishan","CountryCode":"CHN","1":"CHN","Population":"132744","2":"132744"},{"Name":"Shangrao","0":"Shangrao","CountryCode":"CHN","1":"CHN","Population":"132455","2":"132455"},{"Name":"Changji","0":"Changji","CountryCode":"CHN","1":"CHN","Population":"132260","2":"132260"},{"Name":"Meixian","0":"Meixian","CountryCode":"CHN","1":"CHN","Population":"132156","2":"132156"},{"Name":"Yushu","0":"Yushu","CountryCode":"CHN","1":"CHN","Population":"131861","2":"131861"},{"Name":"Tiefa","0":"Tiefa","CountryCode":"CHN","1":"CHN","Population":"131807","2":"131807"},{"Name":"Huai\u00b4an","0":"Huai\u00b4an","CountryCode":"CHN","1":"CHN","Population":"131149","2":"131149"},{"Name":"Leiyang","0":"Leiyang","CountryCode":"CHN","1":"CHN","Population":"130115","2":"130115"},{"Name":"Zalantun","0":"Zalantun","CountryCode":"CHN","1":"CHN","Population":"130031","2":"130031"},{"Name":"Weihai","0":"Weihai","CountryCode":"CHN","1":"CHN","Population":"128888","2":"128888"},{"Name":"Loudi","0":"Loudi","CountryCode":"CHN","1":"CHN","Population":"128418","2":"128418"},{"Name":"Qingzhou","0":"Qingzhou","CountryCode":"CHN","1":"CHN","Population":"128258","2":"128258"},{"Name":"Qidong","0":"Qidong","CountryCode":"CHN","1":"CHN","Population":"126872","2":"126872"},{"Name":"Huaihua","0":"Huaihua","CountryCode":"CHN","1":"CHN","Population":"126785","2":"126785"},{"Name":"Luohe","0":"Luohe","CountryCode":"CHN","1":"CHN","Population":"126438","2":"126438"},{"Name":"Chuzhou","0":"Chuzhou","CountryCode":"CHN","1":"CHN","Population":"125341","2":"125341"},{"Name":"Kaiyuan","0":"Kaiyuan","CountryCode":"CHN","1":"CHN","Population":"124219","2":"124219"},{"Name":"Linqing","0":"Linqing","CountryCode":"CHN","1":"CHN","Population":"123958","2":"123958"},{"Name":"Chaohu","0":"Chaohu","CountryCode":"CHN","1":"CHN","Population":"123676","2":"123676"},{"Name":"Laohekou","0":"Laohekou","CountryCode":"CHN","1":"CHN","Population":"123366","2":"123366"},{"Name":"Dujiangyan","0":"Dujiangyan","CountryCode":"CHN","1":"CHN","Population":"123357","2":"123357"},{"Name":"Zhumadian","0":"Zhumadian","CountryCode":"CHN","1":"CHN","Population":"123232","2":"123232"},{"Name":"Linchuan","0":"Linchuan","CountryCode":"CHN","1":"CHN","Population":"121949","2":"121949"},{"Name":"Jiaonan","0":"Jiaonan","CountryCode":"CHN","1":"CHN","Population":"121397","2":"121397"},{"Name":"Sanmenxia","0":"Sanmenxia","CountryCode":"CHN","1":"CHN","Population":"120523","2":"120523"},{"Name":"Heyuan","0":"Heyuan","CountryCode":"CHN","1":"CHN","Population":"120101","2":"120101"},{"Name":"Manzhouli","0":"Manzhouli","CountryCode":"CHN","1":"CHN","Population":"120023","2":"120023"},{"Name":"Lhasa","0":"Lhasa","CountryCode":"CHN","1":"CHN","Population":"120000","2":"120000"},{"Name":"Lianyuan","0":"Lianyuan","CountryCode":"CHN","1":"CHN","Population":"118858","2":"118858"},{"Name":"Kuytun","0":"Kuytun","CountryCode":"CHN","1":"CHN","Population":"118553","2":"118553"},{"Name":"Puqi","0":"Puqi","CountryCode":"CHN","1":"CHN","Population":"117264","2":"117264"},{"Name":"Hongjiang","0":"Hongjiang","CountryCode":"CHN","1":"CHN","Population":"116188","2":"116188"},{"Name":"Qinzhou","0":"Qinzhou","CountryCode":"CHN","1":"CHN","Population":"114586","2":"114586"},{"Name":"Renqiu","0":"Renqiu","CountryCode":"CHN","1":"CHN","Population":"114256","2":"114256"},{"Name":"Yuyao","0":"Yuyao","CountryCode":"CHN","1":"CHN","Population":"114065","2":"114065"},{"Name":"Guigang","0":"Guigang","CountryCode":"CHN","1":"CHN","Population":"114025","2":"114025"},{"Name":"Kaili","0":"Kaili","CountryCode":"CHN","1":"CHN","Population":"113958","2":"113958"},{"Name":"Yan\u00b4an","0":"Yan\u00b4an","CountryCode":"CHN","1":"CHN","Population":"113277","2":"113277"},{"Name":"Beihai","0":"Beihai","CountryCode":"CHN","1":"CHN","Population":"112673","2":"112673"},{"Name":"Xuangzhou","0":"Xuangzhou","CountryCode":"CHN","1":"CHN","Population":"112673","2":"112673"},{"Name":"Quzhou","0":"Quzhou","CountryCode":"CHN","1":"CHN","Population":"112373","2":"112373"},{"Name":"Yong\u00b4an","0":"Yong\u00b4an","CountryCode":"CHN","1":"CHN","Population":"111762","2":"111762"},{"Name":"Zixing","0":"Zixing","CountryCode":"CHN","1":"CHN","Population":"110048","2":"110048"},{"Name":"Liyang","0":"Liyang","CountryCode":"CHN","1":"CHN","Population":"109520","2":"109520"},{"Name":"Yizheng","0":"Yizheng","CountryCode":"CHN","1":"CHN","Population":"109268","2":"109268"},{"Name":"Yumen","0":"Yumen","CountryCode":"CHN","1":"CHN","Population":"109234","2":"109234"},{"Name":"Liling","0":"Liling","CountryCode":"CHN","1":"CHN","Population":"108504","2":"108504"},{"Name":"Yuncheng","0":"Yuncheng","CountryCode":"CHN","1":"CHN","Population":"108359","2":"108359"},{"Name":"Shanwei","0":"Shanwei","CountryCode":"CHN","1":"CHN","Population":"107847","2":"107847"},{"Name":"Cixi","0":"Cixi","CountryCode":"CHN","1":"CHN","Population":"107329","2":"107329"},{"Name":"Yuanjiang","0":"Yuanjiang","CountryCode":"CHN","1":"CHN","Population":"107004","2":"107004"},{"Name":"Bozhou","0":"Bozhou","CountryCode":"CHN","1":"CHN","Population":"106346","2":"106346"},{"Name":"Jinchang","0":"Jinchang","CountryCode":"CHN","1":"CHN","Population":"105287","2":"105287"},{"Name":"Fu\u00b4an","0":"Fu\u00b4an","CountryCode":"CHN","1":"CHN","Population":"105265","2":"105265"},{"Name":"Suqian","0":"Suqian","CountryCode":"CHN","1":"CHN","Population":"105021","2":"105021"},{"Name":"Shishou","0":"Shishou","CountryCode":"CHN","1":"CHN","Population":"104571","2":"104571"},{"Name":"Hengshui","0":"Hengshui","CountryCode":"CHN","1":"CHN","Population":"104269","2":"104269"},{"Name":"Danjiangkou","0":"Danjiangkou","CountryCode":"CHN","1":"CHN","Population":"103211","2":"103211"},{"Name":"Fujin","0":"Fujin","CountryCode":"CHN","1":"CHN","Population":"103104","2":"103104"},{"Name":"Sanya","0":"Sanya","CountryCode":"CHN","1":"CHN","Population":"102820","2":"102820"},{"Name":"Guangshui","0":"Guangshui","CountryCode":"CHN","1":"CHN","Population":"102770","2":"102770"},{"Name":"Huangshan","0":"Huangshan","CountryCode":"CHN","1":"CHN","Population":"102628","2":"102628"},{"Name":"Xingcheng","0":"Xingcheng","CountryCode":"CHN","1":"CHN","Population":"102384","2":"102384"},{"Name":"Zhucheng","0":"Zhucheng","CountryCode":"CHN","1":"CHN","Population":"102134","2":"102134"},{"Name":"Kunshan","0":"Kunshan","CountryCode":"CHN","1":"CHN","Population":"102052","2":"102052"},{"Name":"Haining","0":"Haining","CountryCode":"CHN","1":"CHN","Population":"100478","2":"100478"},{"Name":"Pingliang","0":"Pingliang","CountryCode":"CHN","1":"CHN","Population":"99265","2":"99265"},{"Name":"Fuqing","0":"Fuqing","CountryCode":"CHN","1":"CHN","Population":"99193","2":"99193"},{"Name":"Xinzhou","0":"Xinzhou","CountryCode":"CHN","1":"CHN","Population":"98667","2":"98667"},{"Name":"Jieyang","0":"Jieyang","CountryCode":"CHN","1":"CHN","Population":"98531","2":"98531"},{"Name":"Zhangjiagang","0":"Zhangjiagang","CountryCode":"CHN","1":"CHN","Population":"97994","2":"97994"},{"Name":"Tong Xian","0":"Tong Xian","CountryCode":"CHN","1":"CHN","Population":"97168","2":"97168"},{"Name":"Ya\u00b4an","0":"Ya\u00b4an","CountryCode":"CHN","1":"CHN","Population":"95900","2":"95900"},{"Name":"Jinzhou","0":"Jinzhou","CountryCode":"CHN","1":"CHN","Population":"95761","2":"95761"},{"Name":"Emeishan","0":"Emeishan","CountryCode":"CHN","1":"CHN","Population":"94000","2":"94000"},{"Name":"Enshi","0":"Enshi","CountryCode":"CHN","1":"CHN","Population":"93056","2":"93056"},{"Name":"Bose","0":"Bose","CountryCode":"CHN","1":"CHN","Population":"93009","2":"93009"},{"Name":"Yuzhou","0":"Yuzhou","CountryCode":"CHN","1":"CHN","Population":"92889","2":"92889"},{"Name":"Kaiyuan","0":"Kaiyuan","CountryCode":"CHN","1":"CHN","Population":"91999","2":"91999"},{"Name":"Tumen","0":"Tumen","CountryCode":"CHN","1":"CHN","Population":"91471","2":"91471"},{"Name":"Putian","0":"Putian","CountryCode":"CHN","1":"CHN","Population":"91030","2":"91030"},{"Name":"Linhai","0":"Linhai","CountryCode":"CHN","1":"CHN","Population":"90870","2":"90870"},{"Name":"Xilin Hot","0":"Xilin Hot","CountryCode":"CHN","1":"CHN","Population":"90646","2":"90646"},{"Name":"Shaowu","0":"Shaowu","CountryCode":"CHN","1":"CHN","Population":"90286","2":"90286"},{"Name":"Junan","0":"Junan","CountryCode":"CHN","1":"CHN","Population":"90222","2":"90222"},{"Name":"Huaying","0":"Huaying","CountryCode":"CHN","1":"CHN","Population":"89400","2":"89400"},{"Name":"Pingyi","0":"Pingyi","CountryCode":"CHN","1":"CHN","Population":"89373","2":"89373"},{"Name":"Huangyan","0":"Huangyan","CountryCode":"CHN","1":"CHN","Population":"89288","2":"89288"},{"Name":"Bishkek","0":"Bishkek","CountryCode":"KGZ","1":"KGZ","Population":"589400","2":"589400"},{"Name":"Osh","0":"Osh","CountryCode":"KGZ","1":"KGZ","Population":"222700","2":"222700"},{"Name":"Bikenibeu","0":"Bikenibeu","CountryCode":"KIR","1":"KIR","Population":"5055","2":"5055"},{"Name":"Bairiki","0":"Bairiki","CountryCode":"KIR","1":"KIR","Population":"2226","2":"2226"},{"Name":"Santaf\u00e9 de Bogot\u00e1","0":"Santaf\u00e9 de Bogot\u00e1","CountryCode":"COL","1":"COL","Population":"6260862","2":"6260862"},{"Name":"Cali","0":"Cali","CountryCode":"COL","1":"COL","Population":"2077386","2":"2077386"},{"Name":"Medell\u00edn","0":"Medell\u00edn","CountryCode":"COL","1":"COL","Population":"1861265","2":"1861265"},{"Name":"Barranquilla","0":"Barranquilla","CountryCode":"COL","1":"COL","Population":"1223260","2":"1223260"},{"Name":"Cartagena","0":"Cartagena","CountryCode":"COL","1":"COL","Population":"805757","2":"805757"},{"Name":"C\u00facuta","0":"C\u00facuta","CountryCode":"COL","1":"COL","Population":"606932","2":"606932"},{"Name":"Bucaramanga","0":"Bucaramanga","CountryCode":"COL","1":"COL","Population":"515555","2":"515555"},{"Name":"Ibagu\u00e9","0":"Ibagu\u00e9","CountryCode":"COL","1":"COL","Population":"393664","2":"393664"},{"Name":"Pereira","0":"Pereira","CountryCode":"COL","1":"COL","Population":"381725","2":"381725"},{"Name":"Santa Marta","0":"Santa Marta","CountryCode":"COL","1":"COL","Population":"359147","2":"359147"},{"Name":"Manizales","0":"Manizales","CountryCode":"COL","1":"COL","Population":"337580","2":"337580"},{"Name":"Bello","0":"Bello","CountryCode":"COL","1":"COL","Population":"333470","2":"333470"},{"Name":"Pasto","0":"Pasto","CountryCode":"COL","1":"COL","Population":"332396","2":"332396"},{"Name":"Neiva","0":"Neiva","CountryCode":"COL","1":"COL","Population":"300052","2":"300052"},{"Name":"Soledad","0":"Soledad","CountryCode":"COL","1":"COL","Population":"295058","2":"295058"},{"Name":"Armenia","0":"Armenia","CountryCode":"COL","1":"COL","Population":"288977","2":"288977"},{"Name":"Villavicencio","0":"Villavicencio","CountryCode":"COL","1":"COL","Population":"273140","2":"273140"},{"Name":"Soacha","0":"Soacha","CountryCode":"COL","1":"COL","Population":"272058","2":"272058"},{"Name":"Valledupar","0":"Valledupar","CountryCode":"COL","1":"COL","Population":"263247","2":"263247"},{"Name":"Monter\u00eda","0":"Monter\u00eda","CountryCode":"COL","1":"COL","Population":"248245","2":"248245"},{"Name":"Itag\u00fc\u00ed","0":"Itag\u00fc\u00ed","CountryCode":"COL","1":"COL","Population":"228985","2":"228985"},{"Name":"Palmira","0":"Palmira","CountryCode":"COL","1":"COL","Population":"226509","2":"226509"},{"Name":"Buenaventura","0":"Buenaventura","CountryCode":"COL","1":"COL","Population":"224336","2":"224336"},{"Name":"Floridablanca","0":"Floridablanca","CountryCode":"COL","1":"COL","Population":"221913","2":"221913"},{"Name":"Sincelejo","0":"Sincelejo","CountryCode":"COL","1":"COL","Population":"220704","2":"220704"},{"Name":"Popay\u00e1n","0":"Popay\u00e1n","CountryCode":"COL","1":"COL","Population":"200719","2":"200719"},{"Name":"Barrancabermeja","0":"Barrancabermeja","CountryCode":"COL","1":"COL","Population":"178020","2":"178020"},{"Name":"Dos Quebradas","0":"Dos Quebradas","CountryCode":"COL","1":"COL","Population":"159363","2":"159363"},{"Name":"Tulu\u00e1","0":"Tulu\u00e1","CountryCode":"COL","1":"COL","Population":"152488","2":"152488"},{"Name":"Envigado","0":"Envigado","CountryCode":"COL","1":"COL","Population":"135848","2":"135848"},{"Name":"Cartago","0":"Cartago","CountryCode":"COL","1":"COL","Population":"125884","2":"125884"},{"Name":"Girardot","0":"Girardot","CountryCode":"COL","1":"COL","Population":"110963","2":"110963"},{"Name":"Buga","0":"Buga","CountryCode":"COL","1":"COL","Population":"110699","2":"110699"},{"Name":"Tunja","0":"Tunja","CountryCode":"COL","1":"COL","Population":"109740","2":"109740"},{"Name":"Florencia","0":"Florencia","CountryCode":"COL","1":"COL","Population":"108574","2":"108574"},{"Name":"Maicao","0":"Maicao","CountryCode":"COL","1":"COL","Population":"108053","2":"108053"},{"Name":"Sogamoso","0":"Sogamoso","CountryCode":"COL","1":"COL","Population":"107728","2":"107728"},{"Name":"Giron","0":"Giron","CountryCode":"COL","1":"COL","Population":"90688","2":"90688"},{"Name":"Moroni","0":"Moroni","CountryCode":"COM","1":"COM","Population":"36000","2":"36000"},{"Name":"Brazzaville","0":"Brazzaville","CountryCode":"COG","1":"COG","Population":"950000","2":"950000"},{"Name":"Pointe-Noire","0":"Pointe-Noire","CountryCode":"COG","1":"COG","Population":"500000","2":"500000"},{"Name":"Kinshasa","0":"Kinshasa","CountryCode":"COD","1":"COD","Population":"5064000","2":"5064000"},{"Name":"Lubumbashi","0":"Lubumbashi","CountryCode":"COD","1":"COD","Population":"851381","2":"851381"},{"Name":"Mbuji-Mayi","0":"Mbuji-Mayi","CountryCode":"COD","1":"COD","Population":"806475","2":"806475"},{"Name":"Kolwezi","0":"Kolwezi","CountryCode":"COD","1":"COD","Population":"417810","2":"417810"},{"Name":"Kisangani","0":"Kisangani","CountryCode":"COD","1":"COD","Population":"417517","2":"417517"},{"Name":"Kananga","0":"Kananga","CountryCode":"COD","1":"COD","Population":"393030","2":"393030"},{"Name":"Likasi","0":"Likasi","CountryCode":"COD","1":"COD","Population":"299118","2":"299118"},{"Name":"Bukavu","0":"Bukavu","CountryCode":"COD","1":"COD","Population":"201569","2":"201569"},{"Name":"Kikwit","0":"Kikwit","CountryCode":"COD","1":"COD","Population":"182142","2":"182142"},{"Name":"Tshikapa","0":"Tshikapa","CountryCode":"COD","1":"COD","Population":"180860","2":"180860"},{"Name":"Matadi","0":"Matadi","CountryCode":"COD","1":"COD","Population":"172730","2":"172730"},{"Name":"Mbandaka","0":"Mbandaka","CountryCode":"COD","1":"COD","Population":"169841","2":"169841"},{"Name":"Mwene-Ditu","0":"Mwene-Ditu","CountryCode":"COD","1":"COD","Population":"137459","2":"137459"},{"Name":"Boma","0":"Boma","CountryCode":"COD","1":"COD","Population":"135284","2":"135284"},{"Name":"Uvira","0":"Uvira","CountryCode":"COD","1":"COD","Population":"115590","2":"115590"},{"Name":"Butembo","0":"Butembo","CountryCode":"COD","1":"COD","Population":"109406","2":"109406"},{"Name":"Goma","0":"Goma","CountryCode":"COD","1":"COD","Population":"109094","2":"109094"},{"Name":"Kalemie","0":"Kalemie","CountryCode":"COD","1":"COD","Population":"101309","2":"101309"},{"Name":"Bantam","0":"Bantam","CountryCode":"CCK","1":"CCK","Population":"503","2":"503"},{"Name":"West Island","0":"West Island","CountryCode":"CCK","1":"CCK","Population":"167","2":"167"},{"Name":"Pyongyang","0":"Pyongyang","CountryCode":"PRK","1":"PRK","Population":"2484000","2":"2484000"},{"Name":"Hamhung","0":"Hamhung","CountryCode":"PRK","1":"PRK","Population":"709730","2":"709730"},{"Name":"Chongjin","0":"Chongjin","CountryCode":"PRK","1":"PRK","Population":"582480","2":"582480"},{"Name":"Nampo","0":"Nampo","CountryCode":"PRK","1":"PRK","Population":"566200","2":"566200"},{"Name":"Sinuiju","0":"Sinuiju","CountryCode":"PRK","1":"PRK","Population":"326011","2":"326011"},{"Name":"Wonsan","0":"Wonsan","CountryCode":"PRK","1":"PRK","Population":"300148","2":"300148"},{"Name":"Phyongsong","0":"Phyongsong","CountryCode":"PRK","1":"PRK","Population":"272934","2":"272934"},{"Name":"Sariwon","0":"Sariwon","CountryCode":"PRK","1":"PRK","Population":"254146","2":"254146"},{"Name":"Haeju","0":"Haeju","CountryCode":"PRK","1":"PRK","Population":"229172","2":"229172"},{"Name":"Kanggye","0":"Kanggye","CountryCode":"PRK","1":"PRK","Population":"223410","2":"223410"},{"Name":"Kimchaek","0":"Kimchaek","CountryCode":"PRK","1":"PRK","Population":"179000","2":"179000"},{"Name":"Hyesan","0":"Hyesan","CountryCode":"PRK","1":"PRK","Population":"178020","2":"178020"},{"Name":"Kaesong","0":"Kaesong","CountryCode":"PRK","1":"PRK","Population":"171500","2":"171500"},{"Name":"Seoul","0":"Seoul","CountryCode":"KOR","1":"KOR","Population":"9981619","2":"9981619"},{"Name":"Pusan","0":"Pusan","CountryCode":"KOR","1":"KOR","Population":"3804522","2":"3804522"},{"Name":"Inchon","0":"Inchon","CountryCode":"KOR","1":"KOR","Population":"2559424","2":"2559424"},{"Name":"Taegu","0":"Taegu","CountryCode":"KOR","1":"KOR","Population":"2548568","2":"2548568"},{"Name":"Taejon","0":"Taejon","CountryCode":"KOR","1":"KOR","Population":"1425835","2":"1425835"},{"Name":"Kwangju","0":"Kwangju","CountryCode":"KOR","1":"KOR","Population":"1368341","2":"1368341"},{"Name":"Ulsan","0":"Ulsan","CountryCode":"KOR","1":"KOR","Population":"1084891","2":"1084891"},{"Name":"Songnam","0":"Songnam","CountryCode":"KOR","1":"KOR","Population":"869094","2":"869094"},{"Name":"Puchon","0":"Puchon","CountryCode":"KOR","1":"KOR","Population":"779412","2":"779412"},{"Name":"Suwon","0":"Suwon","CountryCode":"KOR","1":"KOR","Population":"755550","2":"755550"},{"Name":"Anyang","0":"Anyang","CountryCode":"KOR","1":"KOR","Population":"591106","2":"591106"},{"Name":"Chonju","0":"Chonju","CountryCode":"KOR","1":"KOR","Population":"563153","2":"563153"},{"Name":"Chongju","0":"Chongju","CountryCode":"KOR","1":"KOR","Population":"531376","2":"531376"},{"Name":"Koyang","0":"Koyang","CountryCode":"KOR","1":"KOR","Population":"518282","2":"518282"},{"Name":"Ansan","0":"Ansan","CountryCode":"KOR","1":"KOR","Population":"510314","2":"510314"},{"Name":"Pohang","0":"Pohang","CountryCode":"KOR","1":"KOR","Population":"508899","2":"508899"},{"Name":"Chang-won","0":"Chang-won","CountryCode":"KOR","1":"KOR","Population":"481694","2":"481694"},{"Name":"Masan","0":"Masan","CountryCode":"KOR","1":"KOR","Population":"441242","2":"441242"},{"Name":"Kwangmyong","0":"Kwangmyong","CountryCode":"KOR","1":"KOR","Population":"350914","2":"350914"},{"Name":"Chonan","0":"Chonan","CountryCode":"KOR","1":"KOR","Population":"330259","2":"330259"},{"Name":"Chinju","0":"Chinju","CountryCode":"KOR","1":"KOR","Population":"329886","2":"329886"},{"Name":"Iksan","0":"Iksan","CountryCode":"KOR","1":"KOR","Population":"322685","2":"322685"},{"Name":"Pyongtaek","0":"Pyongtaek","CountryCode":"KOR","1":"KOR","Population":"312927","2":"312927"},{"Name":"Kumi","0":"Kumi","CountryCode":"KOR","1":"KOR","Population":"311431","2":"311431"},{"Name":"Uijongbu","0":"Uijongbu","CountryCode":"KOR","1":"KOR","Population":"276111","2":"276111"},{"Name":"Kyongju","0":"Kyongju","CountryCode":"KOR","1":"KOR","Population":"272968","2":"272968"},{"Name":"Kunsan","0":"Kunsan","CountryCode":"KOR","1":"KOR","Population":"266569","2":"266569"},{"Name":"Cheju","0":"Cheju","CountryCode":"KOR","1":"KOR","Population":"258511","2":"258511"},{"Name":"Kimhae","0":"Kimhae","CountryCode":"KOR","1":"KOR","Population":"256370","2":"256370"},{"Name":"Sunchon","0":"Sunchon","CountryCode":"KOR","1":"KOR","Population":"249263","2":"249263"},{"Name":"Mokpo","0":"Mokpo","CountryCode":"KOR","1":"KOR","Population":"247452","2":"247452"},{"Name":"Yong-in","0":"Yong-in","CountryCode":"KOR","1":"KOR","Population":"242643","2":"242643"},{"Name":"Wonju","0":"Wonju","CountryCode":"KOR","1":"KOR","Population":"237460","2":"237460"},{"Name":"Kunpo","0":"Kunpo","CountryCode":"KOR","1":"KOR","Population":"235233","2":"235233"},{"Name":"Chunchon","0":"Chunchon","CountryCode":"KOR","1":"KOR","Population":"234528","2":"234528"},{"Name":"Namyangju","0":"Namyangju","CountryCode":"KOR","1":"KOR","Population":"229060","2":"229060"},{"Name":"Kangnung","0":"Kangnung","CountryCode":"KOR","1":"KOR","Population":"220403","2":"220403"},{"Name":"Chungju","0":"Chungju","CountryCode":"KOR","1":"KOR","Population":"205206","2":"205206"},{"Name":"Andong","0":"Andong","CountryCode":"KOR","1":"KOR","Population":"188443","2":"188443"},{"Name":"Yosu","0":"Yosu","CountryCode":"KOR","1":"KOR","Population":"183596","2":"183596"},{"Name":"Kyongsan","0":"Kyongsan","CountryCode":"KOR","1":"KOR","Population":"173746","2":"173746"},{"Name":"Paju","0":"Paju","CountryCode":"KOR","1":"KOR","Population":"163379","2":"163379"},{"Name":"Yangsan","0":"Yangsan","CountryCode":"KOR","1":"KOR","Population":"163351","2":"163351"},{"Name":"Ichon","0":"Ichon","CountryCode":"KOR","1":"KOR","Population":"155332","2":"155332"},{"Name":"Asan","0":"Asan","CountryCode":"KOR","1":"KOR","Population":"154663","2":"154663"},{"Name":"Koje","0":"Koje","CountryCode":"KOR","1":"KOR","Population":"147562","2":"147562"},{"Name":"Kimchon","0":"Kimchon","CountryCode":"KOR","1":"KOR","Population":"147027","2":"147027"},{"Name":"Nonsan","0":"Nonsan","CountryCode":"KOR","1":"KOR","Population":"146619","2":"146619"},{"Name":"Kuri","0":"Kuri","CountryCode":"KOR","1":"KOR","Population":"142173","2":"142173"},{"Name":"Chong-up","0":"Chong-up","CountryCode":"KOR","1":"KOR","Population":"139111","2":"139111"},{"Name":"Chechon","0":"Chechon","CountryCode":"KOR","1":"KOR","Population":"137070","2":"137070"},{"Name":"Sosan","0":"Sosan","CountryCode":"KOR","1":"KOR","Population":"134746","2":"134746"},{"Name":"Shihung","0":"Shihung","CountryCode":"KOR","1":"KOR","Population":"133443","2":"133443"},{"Name":"Tong-yong","0":"Tong-yong","CountryCode":"KOR","1":"KOR","Population":"131717","2":"131717"},{"Name":"Kongju","0":"Kongju","CountryCode":"KOR","1":"KOR","Population":"131229","2":"131229"},{"Name":"Yongju","0":"Yongju","CountryCode":"KOR","1":"KOR","Population":"131097","2":"131097"},{"Name":"Chinhae","0":"Chinhae","CountryCode":"KOR","1":"KOR","Population":"125997","2":"125997"},{"Name":"Sangju","0":"Sangju","CountryCode":"KOR","1":"KOR","Population":"124116","2":"124116"},{"Name":"Poryong","0":"Poryong","CountryCode":"KOR","1":"KOR","Population":"122604","2":"122604"},{"Name":"Kwang-yang","0":"Kwang-yang","CountryCode":"KOR","1":"KOR","Population":"122052","2":"122052"},{"Name":"Miryang","0":"Miryang","CountryCode":"KOR","1":"KOR","Population":"121501","2":"121501"},{"Name":"Hanam","0":"Hanam","CountryCode":"KOR","1":"KOR","Population":"115812","2":"115812"},{"Name":"Kimje","0":"Kimje","CountryCode":"KOR","1":"KOR","Population":"115427","2":"115427"},{"Name":"Yongchon","0":"Yongchon","CountryCode":"KOR","1":"KOR","Population":"113511","2":"113511"},{"Name":"Sachon","0":"Sachon","CountryCode":"KOR","1":"KOR","Population":"113494","2":"113494"},{"Name":"Uiwang","0":"Uiwang","CountryCode":"KOR","1":"KOR","Population":"108788","2":"108788"},{"Name":"Naju","0":"Naju","CountryCode":"KOR","1":"KOR","Population":"107831","2":"107831"},{"Name":"Namwon","0":"Namwon","CountryCode":"KOR","1":"KOR","Population":"103544","2":"103544"},{"Name":"Tonghae","0":"Tonghae","CountryCode":"KOR","1":"KOR","Population":"95472","2":"95472"},{"Name":"Mun-gyong","0":"Mun-gyong","CountryCode":"KOR","1":"KOR","Population":"92239","2":"92239"},{"Name":"Athenai","0":"Athenai","CountryCode":"GRC","1":"GRC","Population":"772072","2":"772072"},{"Name":"Thessaloniki","0":"Thessaloniki","CountryCode":"GRC","1":"GRC","Population":"383967","2":"383967"},{"Name":"Pireus","0":"Pireus","CountryCode":"GRC","1":"GRC","Population":"182671","2":"182671"},{"Name":"Patras","0":"Patras","CountryCode":"GRC","1":"GRC","Population":"153344","2":"153344"},{"Name":"Peristerion","0":"Peristerion","CountryCode":"GRC","1":"GRC","Population":"137288","2":"137288"},{"Name":"Herakleion","0":"Herakleion","CountryCode":"GRC","1":"GRC","Population":"116178","2":"116178"},{"Name":"Kallithea","0":"Kallithea","CountryCode":"GRC","1":"GRC","Population":"114233","2":"114233"},{"Name":"Larisa","0":"Larisa","CountryCode":"GRC","1":"GRC","Population":"113090","2":"113090"},{"Name":"Zagreb","0":"Zagreb","CountryCode":"HRV","1":"HRV","Population":"706770","2":"706770"},{"Name":"Split","0":"Split","CountryCode":"HRV","1":"HRV","Population":"189388","2":"189388"},{"Name":"Rijeka","0":"Rijeka","CountryCode":"HRV","1":"HRV","Population":"167964","2":"167964"},{"Name":"Osijek","0":"Osijek","CountryCode":"HRV","1":"HRV","Population":"104761","2":"104761"},{"Name":"La Habana","0":"La Habana","CountryCode":"CUB","1":"CUB","Population":"2256000","2":"2256000"},{"Name":"Santiago de Cuba","0":"Santiago de Cuba","CountryCode":"CUB","1":"CUB","Population":"433180","2":"433180"},{"Name":"Camag\u00fcey","0":"Camag\u00fcey","CountryCode":"CUB","1":"CUB","Population":"298726","2":"298726"},{"Name":"Holgu\u00edn","0":"Holgu\u00edn","CountryCode":"CUB","1":"CUB","Population":"249492","2":"249492"},{"Name":"Santa Clara","0":"Santa Clara","CountryCode":"CUB","1":"CUB","Population":"207350","2":"207350"},{"Name":"Guant\u00e1namo","0":"Guant\u00e1namo","CountryCode":"CUB","1":"CUB","Population":"205078","2":"205078"},{"Name":"Pinar del R\u00edo","0":"Pinar del R\u00edo","CountryCode":"CUB","1":"CUB","Population":"142100","2":"142100"},{"Name":"Bayamo","0":"Bayamo","CountryCode":"CUB","1":"CUB","Population":"141000","2":"141000"},{"Name":"Cienfuegos","0":"Cienfuegos","CountryCode":"CUB","1":"CUB","Population":"132770","2":"132770"},{"Name":"Victoria de las Tunas","0":"Victoria de las Tunas","CountryCode":"CUB","1":"CUB","Population":"132350","2":"132350"},{"Name":"Matanzas","0":"Matanzas","CountryCode":"CUB","1":"CUB","Population":"123273","2":"123273"},{"Name":"Manzanillo","0":"Manzanillo","CountryCode":"CUB","1":"CUB","Population":"109350","2":"109350"},{"Name":"Sancti-Sp\u00edritus","0":"Sancti-Sp\u00edritus","CountryCode":"CUB","1":"CUB","Population":"100751","2":"100751"},{"Name":"Ciego de \u00c1vila","0":"Ciego de \u00c1vila","CountryCode":"CUB","1":"CUB","Population":"98505","2":"98505"},{"Name":"al-Salimiya","0":"al-Salimiya","CountryCode":"KWT","1":"KWT","Population":"130215","2":"130215"},{"Name":"Jalib al-Shuyukh","0":"Jalib al-Shuyukh","CountryCode":"KWT","1":"KWT","Population":"102178","2":"102178"},{"Name":"Kuwait","0":"Kuwait","CountryCode":"KWT","1":"KWT","Population":"28859","2":"28859"},{"Name":"Nicosia","0":"Nicosia","CountryCode":"CYP","1":"CYP","Population":"195000","2":"195000"},{"Name":"Limassol","0":"Limassol","CountryCode":"CYP","1":"CYP","Population":"154400","2":"154400"},{"Name":"Vientiane","0":"Vientiane","CountryCode":"LAO","1":"LAO","Population":"531800","2":"531800"},{"Name":"Savannakhet","0":"Savannakhet","CountryCode":"LAO","1":"LAO","Population":"96652","2":"96652"},{"Name":"Riga","0":"Riga","CountryCode":"LVA","1":"LVA","Population":"764328","2":"764328"},{"Name":"Daugavpils","0":"Daugavpils","CountryCode":"LVA","1":"LVA","Population":"114829","2":"114829"},{"Name":"Liepaja","0":"Liepaja","CountryCode":"LVA","1":"LVA","Population":"89439","2":"89439"},{"Name":"Maseru","0":"Maseru","CountryCode":"LSO","1":"LSO","Population":"297000","2":"297000"},{"Name":"Beirut","0":"Beirut","CountryCode":"LBN","1":"LBN","Population":"1100000","2":"1100000"},{"Name":"Tripoli","0":"Tripoli","CountryCode":"LBN","1":"LBN","Population":"240000","2":"240000"},{"Name":"Monrovia","0":"Monrovia","CountryCode":"LBR","1":"LBR","Population":"850000","2":"850000"},{"Name":"Tripoli","0":"Tripoli","CountryCode":"LBY","1":"LBY","Population":"1682000","2":"1682000"},{"Name":"Bengasi","0":"Bengasi","CountryCode":"LBY","1":"LBY","Population":"804000","2":"804000"},{"Name":"Misrata","0":"Misrata","CountryCode":"LBY","1":"LBY","Population":"121669","2":"121669"},{"Name":"al-Zawiya","0":"al-Zawiya","CountryCode":"LBY","1":"LBY","Population":"89338","2":"89338"},{"Name":"Schaan","0":"Schaan","CountryCode":"LIE","1":"LIE","Population":"5346","2":"5346"},{"Name":"Vaduz","0":"Vaduz","CountryCode":"LIE","1":"LIE","Population":"5043","2":"5043"},{"Name":"Vilnius","0":"Vilnius","CountryCode":"LTU","1":"LTU","Population":"577969","2":"577969"},{"Name":"Kaunas","0":"Kaunas","CountryCode":"LTU","1":"LTU","Population":"412639","2":"412639"},{"Name":"Klaipeda","0":"Klaipeda","CountryCode":"LTU","1":"LTU","Population":"202451","2":"202451"},{"Name":"\u0160iauliai","0":"\u0160iauliai","CountryCode":"LTU","1":"LTU","Population":"146563","2":"146563"},{"Name":"Panevezys","0":"Panevezys","CountryCode":"LTU","1":"LTU","Population":"133695","2":"133695"},{"Name":"Luxembourg [Luxemburg\/L\u00ebtzebuerg]","0":"Luxembourg [Luxemburg\/L\u00ebtzebuerg]","CountryCode":"LUX","1":"LUX","Population":"80700","2":"80700"},{"Name":"El-Aai\u00fan","0":"El-Aai\u00fan","CountryCode":"ESH","1":"ESH","Population":"169000","2":"169000"},{"Name":"Macao","0":"Macao","CountryCode":"MAC","1":"MAC","Population":"437500","2":"437500"},{"Name":"Antananarivo","0":"Antananarivo","CountryCode":"MDG","1":"MDG","Population":"675669","2":"675669"},{"Name":"Toamasina","0":"Toamasina","CountryCode":"MDG","1":"MDG","Population":"127441","2":"127441"},{"Name":"Antsirab\u00e9","0":"Antsirab\u00e9","CountryCode":"MDG","1":"MDG","Population":"120239","2":"120239"},{"Name":"Mahajanga","0":"Mahajanga","CountryCode":"MDG","1":"MDG","Population":"100807","2":"100807"},{"Name":"Fianarantsoa","0":"Fianarantsoa","CountryCode":"MDG","1":"MDG","Population":"99005","2":"99005"},{"Name":"Skopje","0":"Skopje","CountryCode":"MKD","1":"MKD","Population":"444299","2":"444299"},{"Name":"Blantyre","0":"Blantyre","CountryCode":"MWI","1":"MWI","Population":"478155","2":"478155"},{"Name":"Lilongwe","0":"Lilongwe","CountryCode":"MWI","1":"MWI","Population":"435964","2":"435964"},{"Name":"Male","0":"Male","CountryCode":"MDV","1":"MDV","Population":"71000","2":"71000"},{"Name":"Kuala Lumpur","0":"Kuala Lumpur","CountryCode":"MYS","1":"MYS","Population":"1297526","2":"1297526"},{"Name":"Ipoh","0":"Ipoh","CountryCode":"MYS","1":"MYS","Population":"382853","2":"382853"},{"Name":"Johor Baharu","0":"Johor Baharu","CountryCode":"MYS","1":"MYS","Population":"328436","2":"328436"},{"Name":"Petaling Jaya","0":"Petaling Jaya","CountryCode":"MYS","1":"MYS","Population":"254350","2":"254350"},{"Name":"Kelang","0":"Kelang","CountryCode":"MYS","1":"MYS","Population":"243355","2":"243355"},{"Name":"Kuala Terengganu","0":"Kuala Terengganu","CountryCode":"MYS","1":"MYS","Population":"228119","2":"228119"},{"Name":"Pinang","0":"Pinang","CountryCode":"MYS","1":"MYS","Population":"219603","2":"219603"},{"Name":"Kota Bharu","0":"Kota Bharu","CountryCode":"MYS","1":"MYS","Population":"219582","2":"219582"},{"Name":"Kuantan","0":"Kuantan","CountryCode":"MYS","1":"MYS","Population":"199484","2":"199484"},{"Name":"Taiping","0":"Taiping","CountryCode":"MYS","1":"MYS","Population":"183261","2":"183261"},{"Name":"Seremban","0":"Seremban","CountryCode":"MYS","1":"MYS","Population":"182869","2":"182869"},{"Name":"Kuching","0":"Kuching","CountryCode":"MYS","1":"MYS","Population":"148059","2":"148059"},{"Name":"Sibu","0":"Sibu","CountryCode":"MYS","1":"MYS","Population":"126381","2":"126381"},{"Name":"Sandakan","0":"Sandakan","CountryCode":"MYS","1":"MYS","Population":"125841","2":"125841"},{"Name":"Alor Setar","0":"Alor Setar","CountryCode":"MYS","1":"MYS","Population":"124412","2":"124412"},{"Name":"Selayang Baru","0":"Selayang Baru","CountryCode":"MYS","1":"MYS","Population":"124228","2":"124228"},{"Name":"Sungai Petani","0":"Sungai Petani","CountryCode":"MYS","1":"MYS","Population":"114763","2":"114763"},{"Name":"Shah Alam","0":"Shah Alam","CountryCode":"MYS","1":"MYS","Population":"102019","2":"102019"},{"Name":"Bamako","0":"Bamako","CountryCode":"MLI","1":"MLI","Population":"809552","2":"809552"},{"Name":"Birkirkara","0":"Birkirkara","CountryCode":"MLT","1":"MLT","Population":"21445","2":"21445"},{"Name":"Valletta","0":"Valletta","CountryCode":"MLT","1":"MLT","Population":"7073","2":"7073"},{"Name":"Casablanca","0":"Casablanca","CountryCode":"MAR","1":"MAR","Population":"2940623","2":"2940623"},{"Name":"Rabat","0":"Rabat","CountryCode":"MAR","1":"MAR","Population":"623457","2":"623457"},{"Name":"Marrakech","0":"Marrakech","CountryCode":"MAR","1":"MAR","Population":"621914","2":"621914"},{"Name":"F\u00e8s","0":"F\u00e8s","CountryCode":"MAR","1":"MAR","Population":"541162","2":"541162"},{"Name":"Tanger","0":"Tanger","CountryCode":"MAR","1":"MAR","Population":"521735","2":"521735"},{"Name":"Sal\u00e9","0":"Sal\u00e9","CountryCode":"MAR","1":"MAR","Population":"504420","2":"504420"},{"Name":"Mekn\u00e8s","0":"Mekn\u00e8s","CountryCode":"MAR","1":"MAR","Population":"460000","2":"460000"},{"Name":"Oujda","0":"Oujda","CountryCode":"MAR","1":"MAR","Population":"365382","2":"365382"},{"Name":"K\u00e9nitra","0":"K\u00e9nitra","CountryCode":"MAR","1":"MAR","Population":"292600","2":"292600"},{"Name":"T\u00e9touan","0":"T\u00e9touan","CountryCode":"MAR","1":"MAR","Population":"277516","2":"277516"},{"Name":"Safi","0":"Safi","CountryCode":"MAR","1":"MAR","Population":"262300","2":"262300"},{"Name":"Agadir","0":"Agadir","CountryCode":"MAR","1":"MAR","Population":"155244","2":"155244"},{"Name":"Mohammedia","0":"Mohammedia","CountryCode":"MAR","1":"MAR","Population":"154706","2":"154706"},{"Name":"Khouribga","0":"Khouribga","CountryCode":"MAR","1":"MAR","Population":"152090","2":"152090"},{"Name":"Beni-Mellal","0":"Beni-Mellal","CountryCode":"MAR","1":"MAR","Population":"140212","2":"140212"},{"Name":"T\u00e9mara","0":"T\u00e9mara","CountryCode":"MAR","1":"MAR","Population":"126303","2":"126303"},{"Name":"El Jadida","0":"El Jadida","CountryCode":"MAR","1":"MAR","Population":"119083","2":"119083"},{"Name":"Nador","0":"Nador","CountryCode":"MAR","1":"MAR","Population":"112450","2":"112450"},{"Name":"Ksar el Kebir","0":"Ksar el Kebir","CountryCode":"MAR","1":"MAR","Population":"107065","2":"107065"},{"Name":"Settat","0":"Settat","CountryCode":"MAR","1":"MAR","Population":"96200","2":"96200"},{"Name":"Taza","0":"Taza","CountryCode":"MAR","1":"MAR","Population":"92700","2":"92700"},{"Name":"El Araich","0":"El Araich","CountryCode":"MAR","1":"MAR","Population":"90400","2":"90400"},{"Name":"Dalap-Uliga-Darrit","0":"Dalap-Uliga-Darrit","CountryCode":"MHL","1":"MHL","Population":"28000","2":"28000"},{"Name":"Fort-de-France","0":"Fort-de-France","CountryCode":"MTQ","1":"MTQ","Population":"94050","2":"94050"},{"Name":"Nouakchott","0":"Nouakchott","CountryCode":"MRT","1":"MRT","Population":"667300","2":"667300"},{"Name":"Nou\u00e2dhibou","0":"Nou\u00e2dhibou","CountryCode":"MRT","1":"MRT","Population":"97600","2":"97600"},{"Name":"Port-Louis","0":"Port-Louis","CountryCode":"MUS","1":"MUS","Population":"138200","2":"138200"},{"Name":"Beau Bassin-Rose Hill","0":"Beau Bassin-Rose Hill","CountryCode":"MUS","1":"MUS","Population":"100616","2":"100616"},{"Name":"Vacoas-Phoenix","0":"Vacoas-Phoenix","CountryCode":"MUS","1":"MUS","Population":"98464","2":"98464"},{"Name":"Mamoutzou","0":"Mamoutzou","CountryCode":"MYT","1":"MYT","Population":"12000","2":"12000"},{"Name":"Ciudad de M\u00e9xico","0":"Ciudad de M\u00e9xico","CountryCode":"MEX","1":"MEX","Population":"8591309","2":"8591309"},{"Name":"Guadalajara","0":"Guadalajara","CountryCode":"MEX","1":"MEX","Population":"1647720","2":"1647720"},{"Name":"Ecatepec de Morelos","0":"Ecatepec de Morelos","CountryCode":"MEX","1":"MEX","Population":"1620303","2":"1620303"},{"Name":"Puebla","0":"Puebla","CountryCode":"MEX","1":"MEX","Population":"1346176","2":"1346176"},{"Name":"Nezahualc\u00f3yotl","0":"Nezahualc\u00f3yotl","CountryCode":"MEX","1":"MEX","Population":"1224924","2":"1224924"},{"Name":"Ju\u00e1rez","0":"Ju\u00e1rez","CountryCode":"MEX","1":"MEX","Population":"1217818","2":"1217818"},{"Name":"Tijuana","0":"Tijuana","CountryCode":"MEX","1":"MEX","Population":"1212232","2":"1212232"},{"Name":"Le\u00f3n","0":"Le\u00f3n","CountryCode":"MEX","1":"MEX","Population":"1133576","2":"1133576"},{"Name":"Monterrey","0":"Monterrey","CountryCode":"MEX","1":"MEX","Population":"1108499","2":"1108499"},{"Name":"Zapopan","0":"Zapopan","CountryCode":"MEX","1":"MEX","Population":"1002239","2":"1002239"},{"Name":"Naucalpan de Ju\u00e1rez","0":"Naucalpan de Ju\u00e1rez","CountryCode":"MEX","1":"MEX","Population":"857511","2":"857511"},{"Name":"Mexicali","0":"Mexicali","CountryCode":"MEX","1":"MEX","Population":"764902","2":"764902"},{"Name":"Culiac\u00e1n","0":"Culiac\u00e1n","CountryCode":"MEX","1":"MEX","Population":"744859","2":"744859"},{"Name":"Acapulco de Ju\u00e1rez","0":"Acapulco de Ju\u00e1rez","CountryCode":"MEX","1":"MEX","Population":"721011","2":"721011"},{"Name":"Tlalnepantla de Baz","0":"Tlalnepantla de Baz","CountryCode":"MEX","1":"MEX","Population":"720755","2":"720755"},{"Name":"M\u00e9rida","0":"M\u00e9rida","CountryCode":"MEX","1":"MEX","Population":"703324","2":"703324"},{"Name":"Chihuahua","0":"Chihuahua","CountryCode":"MEX","1":"MEX","Population":"670208","2":"670208"},{"Name":"San Luis Potos\u00ed","0":"San Luis Potos\u00ed","CountryCode":"MEX","1":"MEX","Population":"669353","2":"669353"},{"Name":"Guadalupe","0":"Guadalupe","CountryCode":"MEX","1":"MEX","Population":"668780","2":"668780"},{"Name":"Toluca","0":"Toluca","CountryCode":"MEX","1":"MEX","Population":"665617","2":"665617"},{"Name":"Aguascalientes","0":"Aguascalientes","CountryCode":"MEX","1":"MEX","Population":"643360","2":"643360"},{"Name":"Quer\u00e9taro","0":"Quer\u00e9taro","CountryCode":"MEX","1":"MEX","Population":"639839","2":"639839"},{"Name":"Morelia","0":"Morelia","CountryCode":"MEX","1":"MEX","Population":"619958","2":"619958"},{"Name":"Hermosillo","0":"Hermosillo","CountryCode":"MEX","1":"MEX","Population":"608697","2":"608697"},{"Name":"Saltillo","0":"Saltillo","CountryCode":"MEX","1":"MEX","Population":"577352","2":"577352"},{"Name":"Torre\u00f3n","0":"Torre\u00f3n","CountryCode":"MEX","1":"MEX","Population":"529093","2":"529093"},{"Name":"Centro (Villahermosa)","0":"Centro (Villahermosa)","CountryCode":"MEX","1":"MEX","Population":"519873","2":"519873"},{"Name":"San Nicol\u00e1s de los Garza","0":"San Nicol\u00e1s de los Garza","CountryCode":"MEX","1":"MEX","Population":"495540","2":"495540"},{"Name":"Durango","0":"Durango","CountryCode":"MEX","1":"MEX","Population":"490524","2":"490524"},{"Name":"Chimalhuac\u00e1n","0":"Chimalhuac\u00e1n","CountryCode":"MEX","1":"MEX","Population":"490245","2":"490245"},{"Name":"Tlaquepaque","0":"Tlaquepaque","CountryCode":"MEX","1":"MEX","Population":"475472","2":"475472"},{"Name":"Atizap\u00e1n de Zaragoza","0":"Atizap\u00e1n de Zaragoza","CountryCode":"MEX","1":"MEX","Population":"467262","2":"467262"},{"Name":"Veracruz","0":"Veracruz","CountryCode":"MEX","1":"MEX","Population":"457119","2":"457119"},{"Name":"Cuautitl\u00e1n Izcalli","0":"Cuautitl\u00e1n Izcalli","CountryCode":"MEX","1":"MEX","Population":"452976","2":"452976"},{"Name":"Irapuato","0":"Irapuato","CountryCode":"MEX","1":"MEX","Population":"440039","2":"440039"},{"Name":"Tuxtla Guti\u00e9rrez","0":"Tuxtla Guti\u00e9rrez","CountryCode":"MEX","1":"MEX","Population":"433544","2":"433544"},{"Name":"Tultitl\u00e1n","0":"Tultitl\u00e1n","CountryCode":"MEX","1":"MEX","Population":"432411","2":"432411"},{"Name":"Reynosa","0":"Reynosa","CountryCode":"MEX","1":"MEX","Population":"419776","2":"419776"},{"Name":"Benito Ju\u00e1rez","0":"Benito Ju\u00e1rez","CountryCode":"MEX","1":"MEX","Population":"419276","2":"419276"},{"Name":"Matamoros","0":"Matamoros","CountryCode":"MEX","1":"MEX","Population":"416428","2":"416428"},{"Name":"Xalapa","0":"Xalapa","CountryCode":"MEX","1":"MEX","Population":"390058","2":"390058"},{"Name":"Celaya","0":"Celaya","CountryCode":"MEX","1":"MEX","Population":"382140","2":"382140"},{"Name":"Mazatl\u00e1n","0":"Mazatl\u00e1n","CountryCode":"MEX","1":"MEX","Population":"380265","2":"380265"},{"Name":"Ensenada","0":"Ensenada","CountryCode":"MEX","1":"MEX","Population":"369573","2":"369573"},{"Name":"Ahome","0":"Ahome","CountryCode":"MEX","1":"MEX","Population":"358663","2":"358663"},{"Name":"Cajeme","0":"Cajeme","CountryCode":"MEX","1":"MEX","Population":"355679","2":"355679"},{"Name":"Cuernavaca","0":"Cuernavaca","CountryCode":"MEX","1":"MEX","Population":"337966","2":"337966"},{"Name":"Tonal\u00e1","0":"Tonal\u00e1","CountryCode":"MEX","1":"MEX","Population":"336109","2":"336109"},{"Name":"Valle de Chalco Solidaridad","0":"Valle de Chalco Solidaridad","CountryCode":"MEX","1":"MEX","Population":"323113","2":"323113"},{"Name":"Nuevo Laredo","0":"Nuevo Laredo","CountryCode":"MEX","1":"MEX","Population":"310277","2":"310277"},{"Name":"Tepic","0":"Tepic","CountryCode":"MEX","1":"MEX","Population":"305025","2":"305025"},{"Name":"Tampico","0":"Tampico","CountryCode":"MEX","1":"MEX","Population":"294789","2":"294789"},{"Name":"Ixtapaluca","0":"Ixtapaluca","CountryCode":"MEX","1":"MEX","Population":"293160","2":"293160"},{"Name":"Apodaca","0":"Apodaca","CountryCode":"MEX","1":"MEX","Population":"282941","2":"282941"},{"Name":"Guasave","0":"Guasave","CountryCode":"MEX","1":"MEX","Population":"277201","2":"277201"},{"Name":"G\u00f3mez Palacio","0":"G\u00f3mez Palacio","CountryCode":"MEX","1":"MEX","Population":"272806","2":"272806"},{"Name":"Tapachula","0":"Tapachula","CountryCode":"MEX","1":"MEX","Population":"271141","2":"271141"},{"Name":"Nicol\u00e1s Romero","0":"Nicol\u00e1s Romero","CountryCode":"MEX","1":"MEX","Population":"269393","2":"269393"},{"Name":"Coatzacoalcos","0":"Coatzacoalcos","CountryCode":"MEX","1":"MEX","Population":"267037","2":"267037"},{"Name":"Uruapan","0":"Uruapan","CountryCode":"MEX","1":"MEX","Population":"265211","2":"265211"},{"Name":"Victoria","0":"Victoria","CountryCode":"MEX","1":"MEX","Population":"262686","2":"262686"},{"Name":"Oaxaca de Ju\u00e1rez","0":"Oaxaca de Ju\u00e1rez","CountryCode":"MEX","1":"MEX","Population":"256848","2":"256848"},{"Name":"Coacalco de Berrioz\u00e1bal","0":"Coacalco de Berrioz\u00e1bal","CountryCode":"MEX","1":"MEX","Population":"252270","2":"252270"},{"Name":"Pachuca de Soto","0":"Pachuca de Soto","CountryCode":"MEX","1":"MEX","Population":"244688","2":"244688"},{"Name":"General Escobedo","0":"General Escobedo","CountryCode":"MEX","1":"MEX","Population":"232961","2":"232961"},{"Name":"Salamanca","0":"Salamanca","CountryCode":"MEX","1":"MEX","Population":"226864","2":"226864"},{"Name":"Santa Catarina","0":"Santa Catarina","CountryCode":"MEX","1":"MEX","Population":"226573","2":"226573"},{"Name":"Tehuac\u00e1n","0":"Tehuac\u00e1n","CountryCode":"MEX","1":"MEX","Population":"225943","2":"225943"},{"Name":"Chalco","0":"Chalco","CountryCode":"MEX","1":"MEX","Population":"222201","2":"222201"},{"Name":"C\u00e1rdenas","0":"C\u00e1rdenas","CountryCode":"MEX","1":"MEX","Population":"216903","2":"216903"},{"Name":"Campeche","0":"Campeche","CountryCode":"MEX","1":"MEX","Population":"216735","2":"216735"},{"Name":"La Paz","0":"La Paz","CountryCode":"MEX","1":"MEX","Population":"213045","2":"213045"},{"Name":"Oth\u00f3n P. Blanco (Chetumal)","0":"Oth\u00f3n P. Blanco (Chetumal)","CountryCode":"MEX","1":"MEX","Population":"208014","2":"208014"},{"Name":"Texcoco","0":"Texcoco","CountryCode":"MEX","1":"MEX","Population":"203681","2":"203681"},{"Name":"La Paz","0":"La Paz","CountryCode":"MEX","1":"MEX","Population":"196708","2":"196708"},{"Name":"Metepec","0":"Metepec","CountryCode":"MEX","1":"MEX","Population":"194265","2":"194265"},{"Name":"Monclova","0":"Monclova","CountryCode":"MEX","1":"MEX","Population":"193657","2":"193657"},{"Name":"Huixquilucan","0":"Huixquilucan","CountryCode":"MEX","1":"MEX","Population":"193156","2":"193156"},{"Name":"Chilpancingo de los Bravo","0":"Chilpancingo de los Bravo","CountryCode":"MEX","1":"MEX","Population":"192509","2":"192509"},{"Name":"Puerto Vallarta","0":"Puerto Vallarta","CountryCode":"MEX","1":"MEX","Population":"183741","2":"183741"},{"Name":"Fresnillo","0":"Fresnillo","CountryCode":"MEX","1":"MEX","Population":"182744","2":"182744"},{"Name":"Ciudad Madero","0":"Ciudad Madero","CountryCode":"MEX","1":"MEX","Population":"182012","2":"182012"},{"Name":"Soledad de Graciano S\u00e1nchez","0":"Soledad de Graciano S\u00e1nchez","CountryCode":"MEX","1":"MEX","Population":"179956","2":"179956"},{"Name":"San Juan del R\u00edo","0":"San Juan del R\u00edo","CountryCode":"MEX","1":"MEX","Population":"179300","2":"179300"},{"Name":"San Felipe del Progreso","0":"San Felipe del Progreso","CountryCode":"MEX","1":"MEX","Population":"177330","2":"177330"},{"Name":"C\u00f3rdoba","0":"C\u00f3rdoba","CountryCode":"MEX","1":"MEX","Population":"176952","2":"176952"},{"Name":"Tec\u00e1mac","0":"Tec\u00e1mac","CountryCode":"MEX","1":"MEX","Population":"172410","2":"172410"},{"Name":"Ocosingo","0":"Ocosingo","CountryCode":"MEX","1":"MEX","Population":"171495","2":"171495"},{"Name":"Carmen","0":"Carmen","CountryCode":"MEX","1":"MEX","Population":"171367","2":"171367"},{"Name":"L\u00e1zaro C\u00e1rdenas","0":"L\u00e1zaro C\u00e1rdenas","CountryCode":"MEX","1":"MEX","Population":"170878","2":"170878"},{"Name":"Jiutepec","0":"Jiutepec","CountryCode":"MEX","1":"MEX","Population":"170428","2":"170428"},{"Name":"Papantla","0":"Papantla","CountryCode":"MEX","1":"MEX","Population":"170123","2":"170123"},{"Name":"Comalcalco","0":"Comalcalco","CountryCode":"MEX","1":"MEX","Population":"164640","2":"164640"},{"Name":"Zamora","0":"Zamora","CountryCode":"MEX","1":"MEX","Population":"161191","2":"161191"},{"Name":"Nogales","0":"Nogales","CountryCode":"MEX","1":"MEX","Population":"159103","2":"159103"},{"Name":"Huimanguillo","0":"Huimanguillo","CountryCode":"MEX","1":"MEX","Population":"158335","2":"158335"},{"Name":"Cuautla","0":"Cuautla","CountryCode":"MEX","1":"MEX","Population":"153132","2":"153132"},{"Name":"Minatitl\u00e1n","0":"Minatitl\u00e1n","CountryCode":"MEX","1":"MEX","Population":"152983","2":"152983"},{"Name":"Poza Rica de Hidalgo","0":"Poza Rica de Hidalgo","CountryCode":"MEX","1":"MEX","Population":"152678","2":"152678"},{"Name":"Ciudad Valles","0":"Ciudad Valles","CountryCode":"MEX","1":"MEX","Population":"146411","2":"146411"},{"Name":"Navolato","0":"Navolato","CountryCode":"MEX","1":"MEX","Population":"145396","2":"145396"},{"Name":"San Luis R\u00edo Colorado","0":"San Luis R\u00edo Colorado","CountryCode":"MEX","1":"MEX","Population":"145276","2":"145276"},{"Name":"P\u00e9njamo","0":"P\u00e9njamo","CountryCode":"MEX","1":"MEX","Population":"143927","2":"143927"},{"Name":"San Andr\u00e9s Tuxtla","0":"San Andr\u00e9s Tuxtla","CountryCode":"MEX","1":"MEX","Population":"142251","2":"142251"},{"Name":"Guanajuato","0":"Guanajuato","CountryCode":"MEX","1":"MEX","Population":"141215","2":"141215"},{"Name":"Navojoa","0":"Navojoa","CountryCode":"MEX","1":"MEX","Population":"140495","2":"140495"},{"Name":"Zit\u00e1cuaro","0":"Zit\u00e1cuaro","CountryCode":"MEX","1":"MEX","Population":"137970","2":"137970"},{"Name":"Boca del R\u00edo","0":"Boca del R\u00edo","CountryCode":"MEX","1":"MEX","Population":"135721","2":"135721"},{"Name":"Allende","0":"Allende","CountryCode":"MEX","1":"MEX","Population":"134645","2":"134645"},{"Name":"Silao","0":"Silao","CountryCode":"MEX","1":"MEX","Population":"134037","2":"134037"},{"Name":"Macuspana","0":"Macuspana","CountryCode":"MEX","1":"MEX","Population":"133795","2":"133795"},{"Name":"San Juan Bautista Tuxtepec","0":"San Juan Bautista Tuxtepec","CountryCode":"MEX","1":"MEX","Population":"133675","2":"133675"},{"Name":"San Crist\u00f3bal de las Casas","0":"San Crist\u00f3bal de las Casas","CountryCode":"MEX","1":"MEX","Population":"132317","2":"132317"},{"Name":"Valle de Santiago","0":"Valle de Santiago","CountryCode":"MEX","1":"MEX","Population":"130557","2":"130557"},{"Name":"Guaymas","0":"Guaymas","CountryCode":"MEX","1":"MEX","Population":"130108","2":"130108"},{"Name":"Colima","0":"Colima","CountryCode":"MEX","1":"MEX","Population":"129454","2":"129454"},{"Name":"Dolores Hidalgo","0":"Dolores Hidalgo","CountryCode":"MEX","1":"MEX","Population":"128675","2":"128675"},{"Name":"Lagos de Moreno","0":"Lagos de Moreno","CountryCode":"MEX","1":"MEX","Population":"127949","2":"127949"},{"Name":"Piedras Negras","0":"Piedras Negras","CountryCode":"MEX","1":"MEX","Population":"127898","2":"127898"},{"Name":"Altamira","0":"Altamira","CountryCode":"MEX","1":"MEX","Population":"127490","2":"127490"},{"Name":"T\u00faxpam","0":"T\u00faxpam","CountryCode":"MEX","1":"MEX","Population":"126475","2":"126475"},{"Name":"San Pedro Garza Garc\u00eda","0":"San Pedro Garza Garc\u00eda","CountryCode":"MEX","1":"MEX","Population":"126147","2":"126147"},{"Name":"Cuauht\u00e9moc","0":"Cuauht\u00e9moc","CountryCode":"MEX","1":"MEX","Population":"124279","2":"124279"},{"Name":"Manzanillo","0":"Manzanillo","CountryCode":"MEX","1":"MEX","Population":"124014","2":"124014"},{"Name":"Iguala de la Independencia","0":"Iguala de la Independencia","CountryCode":"MEX","1":"MEX","Population":"123883","2":"123883"},{"Name":"Zacatecas","0":"Zacatecas","CountryCode":"MEX","1":"MEX","Population":"123700","2":"123700"},{"Name":"Tlajomulco de Z\u00fa\u00f1iga","0":"Tlajomulco de Z\u00fa\u00f1iga","CountryCode":"MEX","1":"MEX","Population":"123220","2":"123220"},{"Name":"Tulancingo de Bravo","0":"Tulancingo de Bravo","CountryCode":"MEX","1":"MEX","Population":"121946","2":"121946"},{"Name":"Zinacantepec","0":"Zinacantepec","CountryCode":"MEX","1":"MEX","Population":"121715","2":"121715"},{"Name":"San Mart\u00edn Texmelucan","0":"San Mart\u00edn Texmelucan","CountryCode":"MEX","1":"MEX","Population":"121093","2":"121093"},{"Name":"Tepatitl\u00e1n de Morelos","0":"Tepatitl\u00e1n de Morelos","CountryCode":"MEX","1":"MEX","Population":"118948","2":"118948"},{"Name":"Mart\u00ednez de la Torre","0":"Mart\u00ednez de la Torre","CountryCode":"MEX","1":"MEX","Population":"118815","2":"118815"},{"Name":"Orizaba","0":"Orizaba","CountryCode":"MEX","1":"MEX","Population":"118488","2":"118488"},{"Name":"Apatzing\u00e1n","0":"Apatzing\u00e1n","CountryCode":"MEX","1":"MEX","Population":"117849","2":"117849"},{"Name":"Atlixco","0":"Atlixco","CountryCode":"MEX","1":"MEX","Population":"117019","2":"117019"},{"Name":"Delicias","0":"Delicias","CountryCode":"MEX","1":"MEX","Population":"116132","2":"116132"},{"Name":"Ixtlahuaca","0":"Ixtlahuaca","CountryCode":"MEX","1":"MEX","Population":"115548","2":"115548"},{"Name":"El Mante","0":"El Mante","CountryCode":"MEX","1":"MEX","Population":"112453","2":"112453"},{"Name":"Lerdo","0":"Lerdo","CountryCode":"MEX","1":"MEX","Population":"112272","2":"112272"},{"Name":"Almoloya de Ju\u00e1rez","0":"Almoloya de Ju\u00e1rez","CountryCode":"MEX","1":"MEX","Population":"110550","2":"110550"},{"Name":"Ac\u00e1mbaro","0":"Ac\u00e1mbaro","CountryCode":"MEX","1":"MEX","Population":"110487","2":"110487"},{"Name":"Acu\u00f1a","0":"Acu\u00f1a","CountryCode":"MEX","1":"MEX","Population":"110388","2":"110388"},{"Name":"Guadalupe","0":"Guadalupe","CountryCode":"MEX","1":"MEX","Population":"108881","2":"108881"},{"Name":"Huejutla de Reyes","0":"Huejutla de Reyes","CountryCode":"MEX","1":"MEX","Population":"108017","2":"108017"},{"Name":"Hidalgo","0":"Hidalgo","CountryCode":"MEX","1":"MEX","Population":"106198","2":"106198"},{"Name":"Los Cabos","0":"Los Cabos","CountryCode":"MEX","1":"MEX","Population":"105199","2":"105199"},{"Name":"Comit\u00e1n de Dom\u00ednguez","0":"Comit\u00e1n de Dom\u00ednguez","CountryCode":"MEX","1":"MEX","Population":"104986","2":"104986"},{"Name":"Cunduac\u00e1n","0":"Cunduac\u00e1n","CountryCode":"MEX","1":"MEX","Population":"104164","2":"104164"},{"Name":"R\u00edo Bravo","0":"R\u00edo Bravo","CountryCode":"MEX","1":"MEX","Population":"103901","2":"103901"},{"Name":"Temapache","0":"Temapache","CountryCode":"MEX","1":"MEX","Population":"102824","2":"102824"},{"Name":"Chilapa de Alvarez","0":"Chilapa de Alvarez","CountryCode":"MEX","1":"MEX","Population":"102716","2":"102716"},{"Name":"Hidalgo del Parral","0":"Hidalgo del Parral","CountryCode":"MEX","1":"MEX","Population":"100881","2":"100881"},{"Name":"San Francisco del Rinc\u00f3n","0":"San Francisco del Rinc\u00f3n","CountryCode":"MEX","1":"MEX","Population":"100149","2":"100149"},{"Name":"Taxco de Alarc\u00f3n","0":"Taxco de Alarc\u00f3n","CountryCode":"MEX","1":"MEX","Population":"99907","2":"99907"},{"Name":"Zumpango","0":"Zumpango","CountryCode":"MEX","1":"MEX","Population":"99781","2":"99781"},{"Name":"San Pedro Cholula","0":"San Pedro Cholula","CountryCode":"MEX","1":"MEX","Population":"99734","2":"99734"},{"Name":"Lerma","0":"Lerma","CountryCode":"MEX","1":"MEX","Population":"99714","2":"99714"},{"Name":"Tecom\u00e1n","0":"Tecom\u00e1n","CountryCode":"MEX","1":"MEX","Population":"99296","2":"99296"},{"Name":"Las Margaritas","0":"Las Margaritas","CountryCode":"MEX","1":"MEX","Population":"97389","2":"97389"},{"Name":"Cosoleacaque","0":"Cosoleacaque","CountryCode":"MEX","1":"MEX","Population":"97199","2":"97199"},{"Name":"San Luis de la Paz","0":"San Luis de la Paz","CountryCode":"MEX","1":"MEX","Population":"96763","2":"96763"},{"Name":"Jos\u00e9 Azueta","0":"Jos\u00e9 Azueta","CountryCode":"MEX","1":"MEX","Population":"95448","2":"95448"},{"Name":"Santiago Ixcuintla","0":"Santiago Ixcuintla","CountryCode":"MEX","1":"MEX","Population":"95311","2":"95311"},{"Name":"San Felipe","0":"San Felipe","CountryCode":"MEX","1":"MEX","Population":"95305","2":"95305"},{"Name":"Tejupilco","0":"Tejupilco","CountryCode":"MEX","1":"MEX","Population":"94934","2":"94934"},{"Name":"Tantoyuca","0":"Tantoyuca","CountryCode":"MEX","1":"MEX","Population":"94709","2":"94709"},{"Name":"Salvatierra","0":"Salvatierra","CountryCode":"MEX","1":"MEX","Population":"94322","2":"94322"},{"Name":"Tultepec","0":"Tultepec","CountryCode":"MEX","1":"MEX","Population":"93364","2":"93364"},{"Name":"Temixco","0":"Temixco","CountryCode":"MEX","1":"MEX","Population":"92686","2":"92686"},{"Name":"Matamoros","0":"Matamoros","CountryCode":"MEX","1":"MEX","Population":"91858","2":"91858"},{"Name":"P\u00e1nuco","0":"P\u00e1nuco","CountryCode":"MEX","1":"MEX","Population":"90551","2":"90551"},{"Name":"El Fuerte","0":"El Fuerte","CountryCode":"MEX","1":"MEX","Population":"89556","2":"89556"},{"Name":"Tierra Blanca","0":"Tierra Blanca","CountryCode":"MEX","1":"MEX","Population":"89143","2":"89143"},{"Name":"Weno","0":"Weno","CountryCode":"FSM","1":"FSM","Population":"22000","2":"22000"},{"Name":"Palikir","0":"Palikir","CountryCode":"FSM","1":"FSM","Population":"8600","2":"8600"},{"Name":"Chisinau","0":"Chisinau","CountryCode":"MDA","1":"MDA","Population":"719900","2":"719900"},{"Name":"Tiraspol","0":"Tiraspol","CountryCode":"MDA","1":"MDA","Population":"194300","2":"194300"},{"Name":"Balti","0":"Balti","CountryCode":"MDA","1":"MDA","Population":"153400","2":"153400"},{"Name":"Bender (T\u00eeghina)","0":"Bender (T\u00eeghina)","CountryCode":"MDA","1":"MDA","Population":"125700","2":"125700"},{"Name":"Monte-Carlo","0":"Monte-Carlo","CountryCode":"MCO","1":"MCO","Population":"13154","2":"13154"},{"Name":"Monaco-Ville","0":"Monaco-Ville","CountryCode":"MCO","1":"MCO","Population":"1234","2":"1234"},{"Name":"Ulan Bator","0":"Ulan Bator","CountryCode":"MNG","1":"MNG","Population":"773700","2":"773700"},{"Name":"Plymouth","0":"Plymouth","CountryCode":"MSR","1":"MSR","Population":"2000","2":"2000"},{"Name":"Maputo","0":"Maputo","CountryCode":"MOZ","1":"MOZ","Population":"1018938","2":"1018938"},{"Name":"Matola","0":"Matola","CountryCode":"MOZ","1":"MOZ","Population":"424662","2":"424662"},{"Name":"Beira","0":"Beira","CountryCode":"MOZ","1":"MOZ","Population":"397368","2":"397368"},{"Name":"Nampula","0":"Nampula","CountryCode":"MOZ","1":"MOZ","Population":"303346","2":"303346"},{"Name":"Chimoio","0":"Chimoio","CountryCode":"MOZ","1":"MOZ","Population":"171056","2":"171056"},{"Name":"Na\u00e7ala-Porto","0":"Na\u00e7ala-Porto","CountryCode":"MOZ","1":"MOZ","Population":"158248","2":"158248"},{"Name":"Quelimane","0":"Quelimane","CountryCode":"MOZ","1":"MOZ","Population":"150116","2":"150116"},{"Name":"Mocuba","0":"Mocuba","CountryCode":"MOZ","1":"MOZ","Population":"124700","2":"124700"},{"Name":"Tete","0":"Tete","CountryCode":"MOZ","1":"MOZ","Population":"101984","2":"101984"},{"Name":"Xai-Xai","0":"Xai-Xai","CountryCode":"MOZ","1":"MOZ","Population":"99442","2":"99442"},{"Name":"Gurue","0":"Gurue","CountryCode":"MOZ","1":"MOZ","Population":"99300","2":"99300"},{"Name":"Maxixe","0":"Maxixe","CountryCode":"MOZ","1":"MOZ","Population":"93985","2":"93985"},{"Name":"Rangoon (Yangon)","0":"Rangoon (Yangon)","CountryCode":"MMR","1":"MMR","Population":"3361700","2":"3361700"},{"Name":"Mandalay","0":"Mandalay","CountryCode":"MMR","1":"MMR","Population":"885300","2":"885300"},{"Name":"Moulmein (Mawlamyine)","0":"Moulmein (Mawlamyine)","CountryCode":"MMR","1":"MMR","Population":"307900","2":"307900"},{"Name":"Pegu (Bago)","0":"Pegu (Bago)","CountryCode":"MMR","1":"MMR","Population":"190900","2":"190900"},{"Name":"Bassein (Pathein)","0":"Bassein (Pathein)","CountryCode":"MMR","1":"MMR","Population":"183900","2":"183900"},{"Name":"Monywa","0":"Monywa","CountryCode":"MMR","1":"MMR","Population":"138600","2":"138600"},{"Name":"Sittwe (Akyab)","0":"Sittwe (Akyab)","CountryCode":"MMR","1":"MMR","Population":"137600","2":"137600"},{"Name":"Taunggyi (Taunggye)","0":"Taunggyi (Taunggye)","CountryCode":"MMR","1":"MMR","Population":"131500","2":"131500"},{"Name":"Meikhtila","0":"Meikhtila","CountryCode":"MMR","1":"MMR","Population":"129700","2":"129700"},{"Name":"Mergui (Myeik)","0":"Mergui (Myeik)","CountryCode":"MMR","1":"MMR","Population":"122700","2":"122700"},{"Name":"Lashio (Lasho)","0":"Lashio (Lasho)","CountryCode":"MMR","1":"MMR","Population":"107600","2":"107600"},{"Name":"Prome (Pyay)","0":"Prome (Pyay)","CountryCode":"MMR","1":"MMR","Population":"105700","2":"105700"},{"Name":"Henzada (Hinthada)","0":"Henzada (Hinthada)","CountryCode":"MMR","1":"MMR","Population":"104700","2":"104700"},{"Name":"Myingyan","0":"Myingyan","CountryCode":"MMR","1":"MMR","Population":"103600","2":"103600"},{"Name":"Tavoy (Dawei)","0":"Tavoy (Dawei)","CountryCode":"MMR","1":"MMR","Population":"96800","2":"96800"},{"Name":"Pagakku (Pakokku)","0":"Pagakku (Pakokku)","CountryCode":"MMR","1":"MMR","Population":"94800","2":"94800"},{"Name":"Windhoek","0":"Windhoek","CountryCode":"NAM","1":"NAM","Population":"169000","2":"169000"},{"Name":"Yangor","0":"Yangor","CountryCode":"NRU","1":"NRU","Population":"4050","2":"4050"},{"Name":"Yaren","0":"Yaren","CountryCode":"NRU","1":"NRU","Population":"559","2":"559"},{"Name":"Kathmandu","0":"Kathmandu","CountryCode":"NPL","1":"NPL","Population":"591835","2":"591835"},{"Name":"Biratnagar","0":"Biratnagar","CountryCode":"NPL","1":"NPL","Population":"157764","2":"157764"},{"Name":"Pokhara","0":"Pokhara","CountryCode":"NPL","1":"NPL","Population":"146318","2":"146318"},{"Name":"Lalitapur","0":"Lalitapur","CountryCode":"NPL","1":"NPL","Population":"145847","2":"145847"},{"Name":"Birgunj","0":"Birgunj","CountryCode":"NPL","1":"NPL","Population":"90639","2":"90639"},{"Name":"Managua","0":"Managua","CountryCode":"NIC","1":"NIC","Population":"959000","2":"959000"},{"Name":"Le\u00f3n","0":"Le\u00f3n","CountryCode":"NIC","1":"NIC","Population":"123865","2":"123865"},{"Name":"Chinandega","0":"Chinandega","CountryCode":"NIC","1":"NIC","Population":"97387","2":"97387"},{"Name":"Masaya","0":"Masaya","CountryCode":"NIC","1":"NIC","Population":"88971","2":"88971"},{"Name":"Niamey","0":"Niamey","CountryCode":"NER","1":"NER","Population":"420000","2":"420000"},{"Name":"Zinder","0":"Zinder","CountryCode":"NER","1":"NER","Population":"120892","2":"120892"},{"Name":"Maradi","0":"Maradi","CountryCode":"NER","1":"NER","Population":"112965","2":"112965"},{"Name":"Lagos","0":"Lagos","CountryCode":"NGA","1":"NGA","Population":"1518000","2":"1518000"},{"Name":"Ibadan","0":"Ibadan","CountryCode":"NGA","1":"NGA","Population":"1432000","2":"1432000"},{"Name":"Ogbomosho","0":"Ogbomosho","CountryCode":"NGA","1":"NGA","Population":"730000","2":"730000"},{"Name":"Kano","0":"Kano","CountryCode":"NGA","1":"NGA","Population":"674100","2":"674100"},{"Name":"Oshogbo","0":"Oshogbo","CountryCode":"NGA","1":"NGA","Population":"476800","2":"476800"},{"Name":"Ilorin","0":"Ilorin","CountryCode":"NGA","1":"NGA","Population":"475800","2":"475800"},{"Name":"Abeokuta","0":"Abeokuta","CountryCode":"NGA","1":"NGA","Population":"427400","2":"427400"},{"Name":"Port Harcourt","0":"Port Harcourt","CountryCode":"NGA","1":"NGA","Population":"410000","2":"410000"},{"Name":"Zaria","0":"Zaria","CountryCode":"NGA","1":"NGA","Population":"379200","2":"379200"},{"Name":"Ilesha","0":"Ilesha","CountryCode":"NGA","1":"NGA","Population":"378400","2":"378400"},{"Name":"Onitsha","0":"Onitsha","CountryCode":"NGA","1":"NGA","Population":"371900","2":"371900"},{"Name":"Iwo","0":"Iwo","CountryCode":"NGA","1":"NGA","Population":"362000","2":"362000"},{"Name":"Ado-Ekiti","0":"Ado-Ekiti","CountryCode":"NGA","1":"NGA","Population":"359400","2":"359400"},{"Name":"Abuja","0":"Abuja","CountryCode":"NGA","1":"NGA","Population":"350100","2":"350100"},{"Name":"Kaduna","0":"Kaduna","CountryCode":"NGA","1":"NGA","Population":"342200","2":"342200"},{"Name":"Mushin","0":"Mushin","CountryCode":"NGA","1":"NGA","Population":"333200","2":"333200"},{"Name":"Maiduguri","0":"Maiduguri","CountryCode":"NGA","1":"NGA","Population":"320000","2":"320000"},{"Name":"Enugu","0":"Enugu","CountryCode":"NGA","1":"NGA","Population":"316100","2":"316100"},{"Name":"Ede","0":"Ede","CountryCode":"NGA","1":"NGA","Population":"307100","2":"307100"},{"Name":"Aba","0":"Aba","CountryCode":"NGA","1":"NGA","Population":"298900","2":"298900"},{"Name":"Ife","0":"Ife","CountryCode":"NGA","1":"NGA","Population":"296800","2":"296800"},{"Name":"Ila","0":"Ila","CountryCode":"NGA","1":"NGA","Population":"264000","2":"264000"},{"Name":"Oyo","0":"Oyo","CountryCode":"NGA","1":"NGA","Population":"256400","2":"256400"},{"Name":"Ikerre","0":"Ikerre","CountryCode":"NGA","1":"NGA","Population":"244600","2":"244600"},{"Name":"Benin City","0":"Benin City","CountryCode":"NGA","1":"NGA","Population":"229400","2":"229400"},{"Name":"Iseyin","0":"Iseyin","CountryCode":"NGA","1":"NGA","Population":"217300","2":"217300"},{"Name":"Katsina","0":"Katsina","CountryCode":"NGA","1":"NGA","Population":"206500","2":"206500"},{"Name":"Jos","0":"Jos","CountryCode":"NGA","1":"NGA","Population":"206300","2":"206300"},{"Name":"Sokoto","0":"Sokoto","CountryCode":"NGA","1":"NGA","Population":"204900","2":"204900"},{"Name":"Ilobu","0":"Ilobu","CountryCode":"NGA","1":"NGA","Population":"199000","2":"199000"},{"Name":"Offa","0":"Offa","CountryCode":"NGA","1":"NGA","Population":"197200","2":"197200"},{"Name":"Ikorodu","0":"Ikorodu","CountryCode":"NGA","1":"NGA","Population":"184900","2":"184900"},{"Name":"Ilawe-Ekiti","0":"Ilawe-Ekiti","CountryCode":"NGA","1":"NGA","Population":"184500","2":"184500"},{"Name":"Owo","0":"Owo","CountryCode":"NGA","1":"NGA","Population":"183500","2":"183500"},{"Name":"Ikirun","0":"Ikirun","CountryCode":"NGA","1":"NGA","Population":"181400","2":"181400"},{"Name":"Shaki","0":"Shaki","CountryCode":"NGA","1":"NGA","Population":"174500","2":"174500"},{"Name":"Calabar","0":"Calabar","CountryCode":"NGA","1":"NGA","Population":"174400","2":"174400"},{"Name":"Ondo","0":"Ondo","CountryCode":"NGA","1":"NGA","Population":"173600","2":"173600"},{"Name":"Akure","0":"Akure","CountryCode":"NGA","1":"NGA","Population":"162300","2":"162300"},{"Name":"Gusau","0":"Gusau","CountryCode":"NGA","1":"NGA","Population":"158000","2":"158000"},{"Name":"Ijebu-Ode","0":"Ijebu-Ode","CountryCode":"NGA","1":"NGA","Population":"156400","2":"156400"},{"Name":"Effon-Alaiye","0":"Effon-Alaiye","CountryCode":"NGA","1":"NGA","Population":"153100","2":"153100"},{"Name":"Kumo","0":"Kumo","CountryCode":"NGA","1":"NGA","Population":"148000","2":"148000"},{"Name":"Shomolu","0":"Shomolu","CountryCode":"NGA","1":"NGA","Population":"147700","2":"147700"},{"Name":"Oka-Akoko","0":"Oka-Akoko","CountryCode":"NGA","1":"NGA","Population":"142900","2":"142900"},{"Name":"Ikare","0":"Ikare","CountryCode":"NGA","1":"NGA","Population":"140800","2":"140800"},{"Name":"Sapele","0":"Sapele","CountryCode":"NGA","1":"NGA","Population":"139200","2":"139200"},{"Name":"Deba Habe","0":"Deba Habe","CountryCode":"NGA","1":"NGA","Population":"138600","2":"138600"},{"Name":"Minna","0":"Minna","CountryCode":"NGA","1":"NGA","Population":"136900","2":"136900"},{"Name":"Warri","0":"Warri","CountryCode":"NGA","1":"NGA","Population":"126100","2":"126100"},{"Name":"Bida","0":"Bida","CountryCode":"NGA","1":"NGA","Population":"125500","2":"125500"},{"Name":"Ikire","0":"Ikire","CountryCode":"NGA","1":"NGA","Population":"123300","2":"123300"},{"Name":"Makurdi","0":"Makurdi","CountryCode":"NGA","1":"NGA","Population":"123100","2":"123100"},{"Name":"Lafia","0":"Lafia","CountryCode":"NGA","1":"NGA","Population":"122500","2":"122500"},{"Name":"Inisa","0":"Inisa","CountryCode":"NGA","1":"NGA","Population":"119800","2":"119800"},{"Name":"Shagamu","0":"Shagamu","CountryCode":"NGA","1":"NGA","Population":"117200","2":"117200"},{"Name":"Awka","0":"Awka","CountryCode":"NGA","1":"NGA","Population":"111200","2":"111200"},{"Name":"Gombe","0":"Gombe","CountryCode":"NGA","1":"NGA","Population":"107800","2":"107800"},{"Name":"Igboho","0":"Igboho","CountryCode":"NGA","1":"NGA","Population":"106800","2":"106800"},{"Name":"Ejigbo","0":"Ejigbo","CountryCode":"NGA","1":"NGA","Population":"105900","2":"105900"},{"Name":"Agege","0":"Agege","CountryCode":"NGA","1":"NGA","Population":"105000","2":"105000"},{"Name":"Ise-Ekiti","0":"Ise-Ekiti","CountryCode":"NGA","1":"NGA","Population":"103400","2":"103400"},{"Name":"Ugep","0":"Ugep","CountryCode":"NGA","1":"NGA","Population":"102600","2":"102600"},{"Name":"Epe","0":"Epe","CountryCode":"NGA","1":"NGA","Population":"101000","2":"101000"},{"Name":"Alofi","0":"Alofi","CountryCode":"NIU","1":"NIU","Population":"682","2":"682"},{"Name":"Kingston","0":"Kingston","CountryCode":"NFK","1":"NFK","Population":"800","2":"800"},{"Name":"Oslo","0":"Oslo","CountryCode":"NOR","1":"NOR","Population":"508726","2":"508726"},{"Name":"Bergen","0":"Bergen","CountryCode":"NOR","1":"NOR","Population":"230948","2":"230948"},{"Name":"Trondheim","0":"Trondheim","CountryCode":"NOR","1":"NOR","Population":"150166","2":"150166"},{"Name":"Stavanger","0":"Stavanger","CountryCode":"NOR","1":"NOR","Population":"108848","2":"108848"},{"Name":"B\u00e6rum","0":"B\u00e6rum","CountryCode":"NOR","1":"NOR","Population":"101340","2":"101340"},{"Name":"Abidjan","0":"Abidjan","CountryCode":"CIV","1":"CIV","Population":"2500000","2":"2500000"},{"Name":"Bouak\u00e9","0":"Bouak\u00e9","CountryCode":"CIV","1":"CIV","Population":"329850","2":"329850"},{"Name":"Yamoussoukro","0":"Yamoussoukro","CountryCode":"CIV","1":"CIV","Population":"130000","2":"130000"},{"Name":"Daloa","0":"Daloa","CountryCode":"CIV","1":"CIV","Population":"121842","2":"121842"},{"Name":"Korhogo","0":"Korhogo","CountryCode":"CIV","1":"CIV","Population":"109445","2":"109445"},{"Name":"al-Sib","0":"al-Sib","CountryCode":"OMN","1":"OMN","Population":"155000","2":"155000"},{"Name":"Salala","0":"Salala","CountryCode":"OMN","1":"OMN","Population":"131813","2":"131813"},{"Name":"Bawshar","0":"Bawshar","CountryCode":"OMN","1":"OMN","Population":"107500","2":"107500"},{"Name":"Suhar","0":"Suhar","CountryCode":"OMN","1":"OMN","Population":"90814","2":"90814"},{"Name":"Masqat","0":"Masqat","CountryCode":"OMN","1":"OMN","Population":"51969","2":"51969"},{"Name":"Karachi","0":"Karachi","CountryCode":"PAK","1":"PAK","Population":"9269265","2":"9269265"},{"Name":"Lahore","0":"Lahore","CountryCode":"PAK","1":"PAK","Population":"5063499","2":"5063499"},{"Name":"Faisalabad","0":"Faisalabad","CountryCode":"PAK","1":"PAK","Population":"1977246","2":"1977246"},{"Name":"Rawalpindi","0":"Rawalpindi","CountryCode":"PAK","1":"PAK","Population":"1406214","2":"1406214"},{"Name":"Multan","0":"Multan","CountryCode":"PAK","1":"PAK","Population":"1182441","2":"1182441"},{"Name":"Hyderabad","0":"Hyderabad","CountryCode":"PAK","1":"PAK","Population":"1151274","2":"1151274"},{"Name":"Gujranwala","0":"Gujranwala","CountryCode":"PAK","1":"PAK","Population":"1124749","2":"1124749"},{"Name":"Peshawar","0":"Peshawar","CountryCode":"PAK","1":"PAK","Population":"988005","2":"988005"},{"Name":"Quetta","0":"Quetta","CountryCode":"PAK","1":"PAK","Population":"560307","2":"560307"},{"Name":"Islamabad","0":"Islamabad","CountryCode":"PAK","1":"PAK","Population":"524500","2":"524500"},{"Name":"Sargodha","0":"Sargodha","CountryCode":"PAK","1":"PAK","Population":"455360","2":"455360"},{"Name":"Sialkot","0":"Sialkot","CountryCode":"PAK","1":"PAK","Population":"417597","2":"417597"},{"Name":"Bahawalpur","0":"Bahawalpur","CountryCode":"PAK","1":"PAK","Population":"403408","2":"403408"},{"Name":"Sukkur","0":"Sukkur","CountryCode":"PAK","1":"PAK","Population":"329176","2":"329176"},{"Name":"Jhang","0":"Jhang","CountryCode":"PAK","1":"PAK","Population":"292214","2":"292214"},{"Name":"Sheikhupura","0":"Sheikhupura","CountryCode":"PAK","1":"PAK","Population":"271875","2":"271875"},{"Name":"Larkana","0":"Larkana","CountryCode":"PAK","1":"PAK","Population":"270366","2":"270366"},{"Name":"Gujrat","0":"Gujrat","CountryCode":"PAK","1":"PAK","Population":"250121","2":"250121"},{"Name":"Mardan","0":"Mardan","CountryCode":"PAK","1":"PAK","Population":"244511","2":"244511"},{"Name":"Kasur","0":"Kasur","CountryCode":"PAK","1":"PAK","Population":"241649","2":"241649"},{"Name":"Rahim Yar Khan","0":"Rahim Yar Khan","CountryCode":"PAK","1":"PAK","Population":"228479","2":"228479"},{"Name":"Sahiwal","0":"Sahiwal","CountryCode":"PAK","1":"PAK","Population":"207388","2":"207388"},{"Name":"Okara","0":"Okara","CountryCode":"PAK","1":"PAK","Population":"200901","2":"200901"},{"Name":"Wah","0":"Wah","CountryCode":"PAK","1":"PAK","Population":"198400","2":"198400"},{"Name":"Dera Ghazi Khan","0":"Dera Ghazi Khan","CountryCode":"PAK","1":"PAK","Population":"188100","2":"188100"},{"Name":"Mirpur Khas","0":"Mirpur Khas","CountryCode":"PAK","1":"PAK","Population":"184500","2":"184500"},{"Name":"Nawabshah","0":"Nawabshah","CountryCode":"PAK","1":"PAK","Population":"183100","2":"183100"},{"Name":"Mingora","0":"Mingora","CountryCode":"PAK","1":"PAK","Population":"174500","2":"174500"},{"Name":"Chiniot","0":"Chiniot","CountryCode":"PAK","1":"PAK","Population":"169300","2":"169300"},{"Name":"Kamoke","0":"Kamoke","CountryCode":"PAK","1":"PAK","Population":"151000","2":"151000"},{"Name":"Mandi Burewala","0":"Mandi Burewala","CountryCode":"PAK","1":"PAK","Population":"149900","2":"149900"},{"Name":"Jhelum","0":"Jhelum","CountryCode":"PAK","1":"PAK","Population":"145800","2":"145800"},{"Name":"Sadiqabad","0":"Sadiqabad","CountryCode":"PAK","1":"PAK","Population":"141500","2":"141500"},{"Name":"Jacobabad","0":"Jacobabad","CountryCode":"PAK","1":"PAK","Population":"137700","2":"137700"},{"Name":"Shikarpur","0":"Shikarpur","CountryCode":"PAK","1":"PAK","Population":"133300","2":"133300"},{"Name":"Khanewal","0":"Khanewal","CountryCode":"PAK","1":"PAK","Population":"133000","2":"133000"},{"Name":"Hafizabad","0":"Hafizabad","CountryCode":"PAK","1":"PAK","Population":"130200","2":"130200"},{"Name":"Kohat","0":"Kohat","CountryCode":"PAK","1":"PAK","Population":"125300","2":"125300"},{"Name":"Muzaffargarh","0":"Muzaffargarh","CountryCode":"PAK","1":"PAK","Population":"121600","2":"121600"},{"Name":"Khanpur","0":"Khanpur","CountryCode":"PAK","1":"PAK","Population":"117800","2":"117800"},{"Name":"Gojra","0":"Gojra","CountryCode":"PAK","1":"PAK","Population":"115000","2":"115000"},{"Name":"Bahawalnagar","0":"Bahawalnagar","CountryCode":"PAK","1":"PAK","Population":"109600","2":"109600"},{"Name":"Muridke","0":"Muridke","CountryCode":"PAK","1":"PAK","Population":"108600","2":"108600"},{"Name":"Pak Pattan","0":"Pak Pattan","CountryCode":"PAK","1":"PAK","Population":"107800","2":"107800"},{"Name":"Abottabad","0":"Abottabad","CountryCode":"PAK","1":"PAK","Population":"106000","2":"106000"},{"Name":"Tando Adam","0":"Tando Adam","CountryCode":"PAK","1":"PAK","Population":"103400","2":"103400"},{"Name":"Jaranwala","0":"Jaranwala","CountryCode":"PAK","1":"PAK","Population":"103300","2":"103300"},{"Name":"Khairpur","0":"Khairpur","CountryCode":"PAK","1":"PAK","Population":"102200","2":"102200"},{"Name":"Chishtian Mandi","0":"Chishtian Mandi","CountryCode":"PAK","1":"PAK","Population":"101700","2":"101700"},{"Name":"Daska","0":"Daska","CountryCode":"PAK","1":"PAK","Population":"101500","2":"101500"},{"Name":"Dadu","0":"Dadu","CountryCode":"PAK","1":"PAK","Population":"98600","2":"98600"},{"Name":"Mandi Bahauddin","0":"Mandi Bahauddin","CountryCode":"PAK","1":"PAK","Population":"97300","2":"97300"},{"Name":"Ahmadpur East","0":"Ahmadpur East","CountryCode":"PAK","1":"PAK","Population":"96000","2":"96000"},{"Name":"Kamalia","0":"Kamalia","CountryCode":"PAK","1":"PAK","Population":"95300","2":"95300"},{"Name":"Khuzdar","0":"Khuzdar","CountryCode":"PAK","1":"PAK","Population":"93100","2":"93100"},{"Name":"Vihari","0":"Vihari","CountryCode":"PAK","1":"PAK","Population":"92300","2":"92300"},{"Name":"Dera Ismail Khan","0":"Dera Ismail Khan","CountryCode":"PAK","1":"PAK","Population":"90400","2":"90400"},{"Name":"Wazirabad","0":"Wazirabad","CountryCode":"PAK","1":"PAK","Population":"89700","2":"89700"},{"Name":"Nowshera","0":"Nowshera","CountryCode":"PAK","1":"PAK","Population":"89400","2":"89400"},{"Name":"Koror","0":"Koror","CountryCode":"PLW","1":"PLW","Population":"12000","2":"12000"},{"Name":"Ciudad de Panam\u00e1","0":"Ciudad de Panam\u00e1","CountryCode":"PAN","1":"PAN","Population":"471373","2":"471373"},{"Name":"San Miguelito","0":"San Miguelito","CountryCode":"PAN","1":"PAN","Population":"315382","2":"315382"},{"Name":"Port Moresby","0":"Port Moresby","CountryCode":"PNG","1":"PNG","Population":"247000","2":"247000"},{"Name":"Asunci\u00f3n","0":"Asunci\u00f3n","CountryCode":"PRY","1":"PRY","Population":"557776","2":"557776"},{"Name":"Ciudad del Este","0":"Ciudad del Este","CountryCode":"PRY","1":"PRY","Population":"133881","2":"133881"},{"Name":"San Lorenzo","0":"San Lorenzo","CountryCode":"PRY","1":"PRY","Population":"133395","2":"133395"},{"Name":"Lambar\u00e9","0":"Lambar\u00e9","CountryCode":"PRY","1":"PRY","Population":"99681","2":"99681"},{"Name":"Fernando de la Mora","0":"Fernando de la Mora","CountryCode":"PRY","1":"PRY","Population":"95287","2":"95287"},{"Name":"Lima","0":"Lima","CountryCode":"PER","1":"PER","Population":"6464693","2":"6464693"},{"Name":"Arequipa","0":"Arequipa","CountryCode":"PER","1":"PER","Population":"762000","2":"762000"},{"Name":"Trujillo","0":"Trujillo","CountryCode":"PER","1":"PER","Population":"652000","2":"652000"},{"Name":"Chiclayo","0":"Chiclayo","CountryCode":"PER","1":"PER","Population":"517000","2":"517000"},{"Name":"Callao","0":"Callao","CountryCode":"PER","1":"PER","Population":"424294","2":"424294"},{"Name":"Iquitos","0":"Iquitos","CountryCode":"PER","1":"PER","Population":"367000","2":"367000"},{"Name":"Chimbote","0":"Chimbote","CountryCode":"PER","1":"PER","Population":"336000","2":"336000"},{"Name":"Huancayo","0":"Huancayo","CountryCode":"PER","1":"PER","Population":"327000","2":"327000"},{"Name":"Piura","0":"Piura","CountryCode":"PER","1":"PER","Population":"325000","2":"325000"},{"Name":"Cusco","0":"Cusco","CountryCode":"PER","1":"PER","Population":"291000","2":"291000"},{"Name":"Pucallpa","0":"Pucallpa","CountryCode":"PER","1":"PER","Population":"220866","2":"220866"},{"Name":"Tacna","0":"Tacna","CountryCode":"PER","1":"PER","Population":"215683","2":"215683"},{"Name":"Ica","0":"Ica","CountryCode":"PER","1":"PER","Population":"194820","2":"194820"},{"Name":"Sullana","0":"Sullana","CountryCode":"PER","1":"PER","Population":"147361","2":"147361"},{"Name":"Juliaca","0":"Juliaca","CountryCode":"PER","1":"PER","Population":"142576","2":"142576"},{"Name":"Hu\u00e1nuco","0":"Hu\u00e1nuco","CountryCode":"PER","1":"PER","Population":"129688","2":"129688"},{"Name":"Ayacucho","0":"Ayacucho","CountryCode":"PER","1":"PER","Population":"118960","2":"118960"},{"Name":"Chincha Alta","0":"Chincha Alta","CountryCode":"PER","1":"PER","Population":"110016","2":"110016"},{"Name":"Cajamarca","0":"Cajamarca","CountryCode":"PER","1":"PER","Population":"108009","2":"108009"},{"Name":"Puno","0":"Puno","CountryCode":"PER","1":"PER","Population":"101578","2":"101578"},{"Name":"Ventanilla","0":"Ventanilla","CountryCode":"PER","1":"PER","Population":"101056","2":"101056"},{"Name":"Castilla","0":"Castilla","CountryCode":"PER","1":"PER","Population":"90642","2":"90642"},{"Name":"Adamstown","0":"Adamstown","CountryCode":"PCN","1":"PCN","Population":"42","2":"42"},{"Name":"Garapan","0":"Garapan","CountryCode":"MNP","1":"MNP","Population":"9200","2":"9200"},{"Name":"Lisboa","0":"Lisboa","CountryCode":"PRT","1":"PRT","Population":"563210","2":"563210"},{"Name":"Porto","0":"Porto","CountryCode":"PRT","1":"PRT","Population":"273060","2":"273060"},{"Name":"Amadora","0":"Amadora","CountryCode":"PRT","1":"PRT","Population":"122106","2":"122106"},{"Name":"Co\u00edmbra","0":"Co\u00edmbra","CountryCode":"PRT","1":"PRT","Population":"96100","2":"96100"},{"Name":"Braga","0":"Braga","CountryCode":"PRT","1":"PRT","Population":"90535","2":"90535"},{"Name":"San Juan","0":"San Juan","CountryCode":"PRI","1":"PRI","Population":"434374","2":"434374"},{"Name":"Bayam\u00f3n","0":"Bayam\u00f3n","CountryCode":"PRI","1":"PRI","Population":"224044","2":"224044"},{"Name":"Ponce","0":"Ponce","CountryCode":"PRI","1":"PRI","Population":"186475","2":"186475"},{"Name":"Carolina","0":"Carolina","CountryCode":"PRI","1":"PRI","Population":"186076","2":"186076"},{"Name":"Caguas","0":"Caguas","CountryCode":"PRI","1":"PRI","Population":"140502","2":"140502"},{"Name":"Arecibo","0":"Arecibo","CountryCode":"PRI","1":"PRI","Population":"100131","2":"100131"},{"Name":"Guaynabo","0":"Guaynabo","CountryCode":"PRI","1":"PRI","Population":"100053","2":"100053"},{"Name":"Mayag\u00fcez","0":"Mayag\u00fcez","CountryCode":"PRI","1":"PRI","Population":"98434","2":"98434"},{"Name":"Toa Baja","0":"Toa Baja","CountryCode":"PRI","1":"PRI","Population":"94085","2":"94085"},{"Name":"Warszawa","0":"Warszawa","CountryCode":"POL","1":"POL","Population":"1615369","2":"1615369"},{"Name":"L\u00f3dz","0":"L\u00f3dz","CountryCode":"POL","1":"POL","Population":"800110","2":"800110"},{"Name":"Krak\u00f3w","0":"Krak\u00f3w","CountryCode":"POL","1":"POL","Population":"738150","2":"738150"},{"Name":"Wroclaw","0":"Wroclaw","CountryCode":"POL","1":"POL","Population":"636765","2":"636765"},{"Name":"Poznan","0":"Poznan","CountryCode":"POL","1":"POL","Population":"576899","2":"576899"},{"Name":"Gdansk","0":"Gdansk","CountryCode":"POL","1":"POL","Population":"458988","2":"458988"},{"Name":"Szczecin","0":"Szczecin","CountryCode":"POL","1":"POL","Population":"416988","2":"416988"},{"Name":"Bydgoszcz","0":"Bydgoszcz","CountryCode":"POL","1":"POL","Population":"386855","2":"386855"},{"Name":"Lublin","0":"Lublin","CountryCode":"POL","1":"POL","Population":"356251","2":"356251"},{"Name":"Katowice","0":"Katowice","CountryCode":"POL","1":"POL","Population":"345934","2":"345934"},{"Name":"Bialystok","0":"Bialystok","CountryCode":"POL","1":"POL","Population":"283937","2":"283937"},{"Name":"Czestochowa","0":"Czestochowa","CountryCode":"POL","1":"POL","Population":"257812","2":"257812"},{"Name":"Gdynia","0":"Gdynia","CountryCode":"POL","1":"POL","Population":"253521","2":"253521"},{"Name":"Sosnowiec","0":"Sosnowiec","CountryCode":"POL","1":"POL","Population":"244102","2":"244102"},{"Name":"Radom","0":"Radom","CountryCode":"POL","1":"POL","Population":"232262","2":"232262"},{"Name":"Kielce","0":"Kielce","CountryCode":"POL","1":"POL","Population":"212383","2":"212383"},{"Name":"Gliwice","0":"Gliwice","CountryCode":"POL","1":"POL","Population":"212164","2":"212164"},{"Name":"Torun","0":"Torun","CountryCode":"POL","1":"POL","Population":"206158","2":"206158"},{"Name":"Bytom","0":"Bytom","CountryCode":"POL","1":"POL","Population":"205560","2":"205560"},{"Name":"Zabrze","0":"Zabrze","CountryCode":"POL","1":"POL","Population":"200177","2":"200177"},{"Name":"Bielsko-Biala","0":"Bielsko-Biala","CountryCode":"POL","1":"POL","Population":"180307","2":"180307"},{"Name":"Olsztyn","0":"Olsztyn","CountryCode":"POL","1":"POL","Population":"170904","2":"170904"},{"Name":"Rzesz\u00f3w","0":"Rzesz\u00f3w","CountryCode":"POL","1":"POL","Population":"162049","2":"162049"},{"Name":"Ruda Slaska","0":"Ruda Slaska","CountryCode":"POL","1":"POL","Population":"159665","2":"159665"},{"Name":"Rybnik","0":"Rybnik","CountryCode":"POL","1":"POL","Population":"144582","2":"144582"},{"Name":"Walbrzych","0":"Walbrzych","CountryCode":"POL","1":"POL","Population":"136923","2":"136923"},{"Name":"Tychy","0":"Tychy","CountryCode":"POL","1":"POL","Population":"133178","2":"133178"},{"Name":"Dabrowa G\u00f3rnicza","0":"Dabrowa G\u00f3rnicza","CountryCode":"POL","1":"POL","Population":"131037","2":"131037"},{"Name":"Plock","0":"Plock","CountryCode":"POL","1":"POL","Population":"131011","2":"131011"},{"Name":"Elblag","0":"Elblag","CountryCode":"POL","1":"POL","Population":"129782","2":"129782"},{"Name":"Opole","0":"Opole","CountryCode":"POL","1":"POL","Population":"129553","2":"129553"},{"Name":"Gorz\u00f3w Wielkopolski","0":"Gorz\u00f3w Wielkopolski","CountryCode":"POL","1":"POL","Population":"126019","2":"126019"},{"Name":"Wloclawek","0":"Wloclawek","CountryCode":"POL","1":"POL","Population":"123373","2":"123373"},{"Name":"Chorz\u00f3w","0":"Chorz\u00f3w","CountryCode":"POL","1":"POL","Population":"121708","2":"121708"},{"Name":"Tarn\u00f3w","0":"Tarn\u00f3w","CountryCode":"POL","1":"POL","Population":"121494","2":"121494"},{"Name":"Zielona G\u00f3ra","0":"Zielona G\u00f3ra","CountryCode":"POL","1":"POL","Population":"118182","2":"118182"},{"Name":"Koszalin","0":"Koszalin","CountryCode":"POL","1":"POL","Population":"112375","2":"112375"},{"Name":"Legnica","0":"Legnica","CountryCode":"POL","1":"POL","Population":"109335","2":"109335"},{"Name":"Kalisz","0":"Kalisz","CountryCode":"POL","1":"POL","Population":"106641","2":"106641"},{"Name":"Grudziadz","0":"Grudziadz","CountryCode":"POL","1":"POL","Population":"102434","2":"102434"},{"Name":"Slupsk","0":"Slupsk","CountryCode":"POL","1":"POL","Population":"102370","2":"102370"},{"Name":"Jastrzebie-Zdr\u00f3j","0":"Jastrzebie-Zdr\u00f3j","CountryCode":"POL","1":"POL","Population":"102294","2":"102294"},{"Name":"Jaworzno","0":"Jaworzno","CountryCode":"POL","1":"POL","Population":"97929","2":"97929"},{"Name":"Jelenia G\u00f3ra","0":"Jelenia G\u00f3ra","CountryCode":"POL","1":"POL","Population":"93901","2":"93901"},{"Name":"Malabo","0":"Malabo","CountryCode":"GNQ","1":"GNQ","Population":"40000","2":"40000"},{"Name":"Doha","0":"Doha","CountryCode":"QAT","1":"QAT","Population":"355000","2":"355000"},{"Name":"Paris","0":"Paris","CountryCode":"FRA","1":"FRA","Population":"2125246","2":"2125246"},{"Name":"Marseille","0":"Marseille","CountryCode":"FRA","1":"FRA","Population":"798430","2":"798430"},{"Name":"Lyon","0":"Lyon","CountryCode":"FRA","1":"FRA","Population":"445452","2":"445452"},{"Name":"Toulouse","0":"Toulouse","CountryCode":"FRA","1":"FRA","Population":"390350","2":"390350"},{"Name":"Nice","0":"Nice","CountryCode":"FRA","1":"FRA","Population":"342738","2":"342738"},{"Name":"Nantes","0":"Nantes","CountryCode":"FRA","1":"FRA","Population":"270251","2":"270251"},{"Name":"Strasbourg","0":"Strasbourg","CountryCode":"FRA","1":"FRA","Population":"264115","2":"264115"},{"Name":"Montpellier","0":"Montpellier","CountryCode":"FRA","1":"FRA","Population":"225392","2":"225392"},{"Name":"Bordeaux","0":"Bordeaux","CountryCode":"FRA","1":"FRA","Population":"215363","2":"215363"},{"Name":"Rennes","0":"Rennes","CountryCode":"FRA","1":"FRA","Population":"206229","2":"206229"},{"Name":"Le Havre","0":"Le Havre","CountryCode":"FRA","1":"FRA","Population":"190905","2":"190905"},{"Name":"Reims","0":"Reims","CountryCode":"FRA","1":"FRA","Population":"187206","2":"187206"},{"Name":"Lille","0":"Lille","CountryCode":"FRA","1":"FRA","Population":"184657","2":"184657"},{"Name":"St-\u00c9tienne","0":"St-\u00c9tienne","CountryCode":"FRA","1":"FRA","Population":"180210","2":"180210"},{"Name":"Toulon","0":"Toulon","CountryCode":"FRA","1":"FRA","Population":"160639","2":"160639"},{"Name":"Grenoble","0":"Grenoble","CountryCode":"FRA","1":"FRA","Population":"153317","2":"153317"},{"Name":"Angers","0":"Angers","CountryCode":"FRA","1":"FRA","Population":"151279","2":"151279"},{"Name":"Dijon","0":"Dijon","CountryCode":"FRA","1":"FRA","Population":"149867","2":"149867"},{"Name":"Brest","0":"Brest","CountryCode":"FRA","1":"FRA","Population":"149634","2":"149634"},{"Name":"Le Mans","0":"Le Mans","CountryCode":"FRA","1":"FRA","Population":"146105","2":"146105"},{"Name":"Clermont-Ferrand","0":"Clermont-Ferrand","CountryCode":"FRA","1":"FRA","Population":"137140","2":"137140"},{"Name":"Amiens","0":"Amiens","CountryCode":"FRA","1":"FRA","Population":"135501","2":"135501"},{"Name":"Aix-en-Provence","0":"Aix-en-Provence","CountryCode":"FRA","1":"FRA","Population":"134222","2":"134222"},{"Name":"Limoges","0":"Limoges","CountryCode":"FRA","1":"FRA","Population":"133968","2":"133968"},{"Name":"N\u00eemes","0":"N\u00eemes","CountryCode":"FRA","1":"FRA","Population":"133424","2":"133424"},{"Name":"Tours","0":"Tours","CountryCode":"FRA","1":"FRA","Population":"132820","2":"132820"},{"Name":"Villeurbanne","0":"Villeurbanne","CountryCode":"FRA","1":"FRA","Population":"124215","2":"124215"},{"Name":"Metz","0":"Metz","CountryCode":"FRA","1":"FRA","Population":"123776","2":"123776"},{"Name":"Besan\u00e7on","0":"Besan\u00e7on","CountryCode":"FRA","1":"FRA","Population":"117733","2":"117733"},{"Name":"Caen","0":"Caen","CountryCode":"FRA","1":"FRA","Population":"113987","2":"113987"},{"Name":"Orl\u00e9ans","0":"Orl\u00e9ans","CountryCode":"FRA","1":"FRA","Population":"113126","2":"113126"},{"Name":"Mulhouse","0":"Mulhouse","CountryCode":"FRA","1":"FRA","Population":"110359","2":"110359"},{"Name":"Rouen","0":"Rouen","CountryCode":"FRA","1":"FRA","Population":"106592","2":"106592"},{"Name":"Boulogne-Billancourt","0":"Boulogne-Billancourt","CountryCode":"FRA","1":"FRA","Population":"106367","2":"106367"},{"Name":"Perpignan","0":"Perpignan","CountryCode":"FRA","1":"FRA","Population":"105115","2":"105115"},{"Name":"Nancy","0":"Nancy","CountryCode":"FRA","1":"FRA","Population":"103605","2":"103605"},{"Name":"Roubaix","0":"Roubaix","CountryCode":"FRA","1":"FRA","Population":"96984","2":"96984"},{"Name":"Argenteuil","0":"Argenteuil","CountryCode":"FRA","1":"FRA","Population":"93961","2":"93961"},{"Name":"Tourcoing","0":"Tourcoing","CountryCode":"FRA","1":"FRA","Population":"93540","2":"93540"},{"Name":"Montreuil","0":"Montreuil","CountryCode":"FRA","1":"FRA","Population":"90674","2":"90674"},{"Name":"Cayenne","0":"Cayenne","CountryCode":"GUF","1":"GUF","Population":"50699","2":"50699"},{"Name":"Faaa","0":"Faaa","CountryCode":"PYF","1":"PYF","Population":"25888","2":"25888"},{"Name":"Papeete","0":"Papeete","CountryCode":"PYF","1":"PYF","Population":"25553","2":"25553"},{"Name":"Saint-Denis","0":"Saint-Denis","CountryCode":"REU","1":"REU","Population":"131480","2":"131480"},{"Name":"Bucuresti","0":"Bucuresti","CountryCode":"ROM","1":"ROM","Population":"2016131","2":"2016131"},{"Name":"Iasi","0":"Iasi","CountryCode":"ROM","1":"ROM","Population":"348070","2":"348070"},{"Name":"Constanta","0":"Constanta","CountryCode":"ROM","1":"ROM","Population":"342264","2":"342264"},{"Name":"Cluj-Napoca","0":"Cluj-Napoca","CountryCode":"ROM","1":"ROM","Population":"332498","2":"332498"},{"Name":"Galati","0":"Galati","CountryCode":"ROM","1":"ROM","Population":"330276","2":"330276"},{"Name":"Timisoara","0":"Timisoara","CountryCode":"ROM","1":"ROM","Population":"324304","2":"324304"},{"Name":"Brasov","0":"Brasov","CountryCode":"ROM","1":"ROM","Population":"314225","2":"314225"},{"Name":"Craiova","0":"Craiova","CountryCode":"ROM","1":"ROM","Population":"313530","2":"313530"},{"Name":"Ploiesti","0":"Ploiesti","CountryCode":"ROM","1":"ROM","Population":"251348","2":"251348"},{"Name":"Braila","0":"Braila","CountryCode":"ROM","1":"ROM","Population":"233756","2":"233756"},{"Name":"Oradea","0":"Oradea","CountryCode":"ROM","1":"ROM","Population":"222239","2":"222239"},{"Name":"Bacau","0":"Bacau","CountryCode":"ROM","1":"ROM","Population":"209235","2":"209235"},{"Name":"Pitesti","0":"Pitesti","CountryCode":"ROM","1":"ROM","Population":"187170","2":"187170"},{"Name":"Arad","0":"Arad","CountryCode":"ROM","1":"ROM","Population":"184408","2":"184408"},{"Name":"Sibiu","0":"Sibiu","CountryCode":"ROM","1":"ROM","Population":"169611","2":"169611"},{"Name":"T\u00e2rgu Mures","0":"T\u00e2rgu Mures","CountryCode":"ROM","1":"ROM","Population":"165153","2":"165153"},{"Name":"Baia Mare","0":"Baia Mare","CountryCode":"ROM","1":"ROM","Population":"149665","2":"149665"},{"Name":"Buzau","0":"Buzau","CountryCode":"ROM","1":"ROM","Population":"148372","2":"148372"},{"Name":"Satu Mare","0":"Satu Mare","CountryCode":"ROM","1":"ROM","Population":"130059","2":"130059"},{"Name":"Botosani","0":"Botosani","CountryCode":"ROM","1":"ROM","Population":"128730","2":"128730"},{"Name":"Piatra Neamt","0":"Piatra Neamt","CountryCode":"ROM","1":"ROM","Population":"125070","2":"125070"},{"Name":"R\u00e2mnicu V\u00e2lcea","0":"R\u00e2mnicu V\u00e2lcea","CountryCode":"ROM","1":"ROM","Population":"119741","2":"119741"},{"Name":"Suceava","0":"Suceava","CountryCode":"ROM","1":"ROM","Population":"118549","2":"118549"},{"Name":"Drobeta-Turnu Severin","0":"Drobeta-Turnu Severin","CountryCode":"ROM","1":"ROM","Population":"117865","2":"117865"},{"Name":"T\u00e2rgoviste","0":"T\u00e2rgoviste","CountryCode":"ROM","1":"ROM","Population":"98980","2":"98980"},{"Name":"Focsani","0":"Focsani","CountryCode":"ROM","1":"ROM","Population":"98979","2":"98979"},{"Name":"T\u00e2rgu Jiu","0":"T\u00e2rgu Jiu","CountryCode":"ROM","1":"ROM","Population":"98524","2":"98524"},{"Name":"Tulcea","0":"Tulcea","CountryCode":"ROM","1":"ROM","Population":"96278","2":"96278"},{"Name":"Resita","0":"Resita","CountryCode":"ROM","1":"ROM","Population":"93976","2":"93976"},{"Name":"Kigali","0":"Kigali","CountryCode":"RWA","1":"RWA","Population":"286000","2":"286000"},{"Name":"Stockholm","0":"Stockholm","CountryCode":"SWE","1":"SWE","Population":"750348","2":"750348"},{"Name":"Gothenburg [G\u00f6teborg]","0":"Gothenburg [G\u00f6teborg]","CountryCode":"SWE","1":"SWE","Population":"466990","2":"466990"},{"Name":"Malm\u00f6","0":"Malm\u00f6","CountryCode":"SWE","1":"SWE","Population":"259579","2":"259579"},{"Name":"Uppsala","0":"Uppsala","CountryCode":"SWE","1":"SWE","Population":"189569","2":"189569"},{"Name":"Link\u00f6ping","0":"Link\u00f6ping","CountryCode":"SWE","1":"SWE","Population":"133168","2":"133168"},{"Name":"V\u00e4ster\u00e5s","0":"V\u00e4ster\u00e5s","CountryCode":"SWE","1":"SWE","Population":"126328","2":"126328"},{"Name":"\u00d6rebro","0":"\u00d6rebro","CountryCode":"SWE","1":"SWE","Population":"124207","2":"124207"},{"Name":"Norrk\u00f6ping","0":"Norrk\u00f6ping","CountryCode":"SWE","1":"SWE","Population":"122199","2":"122199"},{"Name":"Helsingborg","0":"Helsingborg","CountryCode":"SWE","1":"SWE","Population":"117737","2":"117737"},{"Name":"J\u00f6nk\u00f6ping","0":"J\u00f6nk\u00f6ping","CountryCode":"SWE","1":"SWE","Population":"117095","2":"117095"},{"Name":"Ume\u00e5","0":"Ume\u00e5","CountryCode":"SWE","1":"SWE","Population":"104512","2":"104512"},{"Name":"Lund","0":"Lund","CountryCode":"SWE","1":"SWE","Population":"98948","2":"98948"},{"Name":"Bor\u00e5s","0":"Bor\u00e5s","CountryCode":"SWE","1":"SWE","Population":"96883","2":"96883"},{"Name":"Sundsvall","0":"Sundsvall","CountryCode":"SWE","1":"SWE","Population":"93126","2":"93126"},{"Name":"G\u00e4vle","0":"G\u00e4vle","CountryCode":"SWE","1":"SWE","Population":"90742","2":"90742"},{"Name":"Jamestown","0":"Jamestown","CountryCode":"SHN","1":"SHN","Population":"1500","2":"1500"},{"Name":"Basseterre","0":"Basseterre","CountryCode":"KNA","1":"KNA","Population":"11600","2":"11600"},{"Name":"Castries","0":"Castries","CountryCode":"LCA","1":"LCA","Population":"2301","2":"2301"},{"Name":"Kingstown","0":"Kingstown","CountryCode":"VCT","1":"VCT","Population":"17100","2":"17100"},{"Name":"Saint-Pierre","0":"Saint-Pierre","CountryCode":"SPM","1":"SPM","Population":"5808","2":"5808"},{"Name":"Berlin","0":"Berlin","CountryCode":"DEU","1":"DEU","Population":"3386667","2":"3386667"},{"Name":"Hamburg","0":"Hamburg","CountryCode":"DEU","1":"DEU","Population":"1704735","2":"1704735"},{"Name":"Munich [M\u00fcnchen]","0":"Munich [M\u00fcnchen]","CountryCode":"DEU","1":"DEU","Population":"1194560","2":"1194560"},{"Name":"K\u00f6ln","0":"K\u00f6ln","CountryCode":"DEU","1":"DEU","Population":"962507","2":"962507"},{"Name":"Frankfurt am Main","0":"Frankfurt am Main","CountryCode":"DEU","1":"DEU","Population":"643821","2":"643821"},{"Name":"Essen","0":"Essen","CountryCode":"DEU","1":"DEU","Population":"599515","2":"599515"},{"Name":"Dortmund","0":"Dortmund","CountryCode":"DEU","1":"DEU","Population":"590213","2":"590213"},{"Name":"Stuttgart","0":"Stuttgart","CountryCode":"DEU","1":"DEU","Population":"582443","2":"582443"},{"Name":"D\u00fcsseldorf","0":"D\u00fcsseldorf","CountryCode":"DEU","1":"DEU","Population":"568855","2":"568855"},{"Name":"Bremen","0":"Bremen","CountryCode":"DEU","1":"DEU","Population":"540330","2":"540330"},{"Name":"Duisburg","0":"Duisburg","CountryCode":"DEU","1":"DEU","Population":"519793","2":"519793"},{"Name":"Hannover","0":"Hannover","CountryCode":"DEU","1":"DEU","Population":"514718","2":"514718"},{"Name":"Leipzig","0":"Leipzig","CountryCode":"DEU","1":"DEU","Population":"489532","2":"489532"},{"Name":"N\u00fcrnberg","0":"N\u00fcrnberg","CountryCode":"DEU","1":"DEU","Population":"486628","2":"486628"},{"Name":"Dresden","0":"Dresden","CountryCode":"DEU","1":"DEU","Population":"476668","2":"476668"},{"Name":"Bochum","0":"Bochum","CountryCode":"DEU","1":"DEU","Population":"392830","2":"392830"},{"Name":"Wuppertal","0":"Wuppertal","CountryCode":"DEU","1":"DEU","Population":"368993","2":"368993"},{"Name":"Bielefeld","0":"Bielefeld","CountryCode":"DEU","1":"DEU","Population":"321125","2":"321125"},{"Name":"Mannheim","0":"Mannheim","CountryCode":"DEU","1":"DEU","Population":"307730","2":"307730"},{"Name":"Bonn","0":"Bonn","CountryCode":"DEU","1":"DEU","Population":"301048","2":"301048"},{"Name":"Gelsenkirchen","0":"Gelsenkirchen","CountryCode":"DEU","1":"DEU","Population":"281979","2":"281979"},{"Name":"Karlsruhe","0":"Karlsruhe","CountryCode":"DEU","1":"DEU","Population":"277204","2":"277204"},{"Name":"Wiesbaden","0":"Wiesbaden","CountryCode":"DEU","1":"DEU","Population":"268716","2":"268716"},{"Name":"M\u00fcnster","0":"M\u00fcnster","CountryCode":"DEU","1":"DEU","Population":"264670","2":"264670"},{"Name":"M\u00f6nchengladbach","0":"M\u00f6nchengladbach","CountryCode":"DEU","1":"DEU","Population":"263697","2":"263697"},{"Name":"Chemnitz","0":"Chemnitz","CountryCode":"DEU","1":"DEU","Population":"263222","2":"263222"},{"Name":"Augsburg","0":"Augsburg","CountryCode":"DEU","1":"DEU","Population":"254867","2":"254867"},{"Name":"Halle\/Saale","0":"Halle\/Saale","CountryCode":"DEU","1":"DEU","Population":"254360","2":"254360"},{"Name":"Braunschweig","0":"Braunschweig","CountryCode":"DEU","1":"DEU","Population":"246322","2":"246322"},{"Name":"Aachen","0":"Aachen","CountryCode":"DEU","1":"DEU","Population":"243825","2":"243825"},{"Name":"Krefeld","0":"Krefeld","CountryCode":"DEU","1":"DEU","Population":"241769","2":"241769"},{"Name":"Magdeburg","0":"Magdeburg","CountryCode":"DEU","1":"DEU","Population":"235073","2":"235073"},{"Name":"Kiel","0":"Kiel","CountryCode":"DEU","1":"DEU","Population":"233795","2":"233795"},{"Name":"Oberhausen","0":"Oberhausen","CountryCode":"DEU","1":"DEU","Population":"222349","2":"222349"},{"Name":"L\u00fcbeck","0":"L\u00fcbeck","CountryCode":"DEU","1":"DEU","Population":"213326","2":"213326"},{"Name":"Hagen","0":"Hagen","CountryCode":"DEU","1":"DEU","Population":"205201","2":"205201"},{"Name":"Rostock","0":"Rostock","CountryCode":"DEU","1":"DEU","Population":"203279","2":"203279"},{"Name":"Freiburg im Breisgau","0":"Freiburg im Breisgau","CountryCode":"DEU","1":"DEU","Population":"202455","2":"202455"},{"Name":"Erfurt","0":"Erfurt","CountryCode":"DEU","1":"DEU","Population":"201267","2":"201267"},{"Name":"Kassel","0":"Kassel","CountryCode":"DEU","1":"DEU","Population":"196211","2":"196211"},{"Name":"Saarbr\u00fccken","0":"Saarbr\u00fccken","CountryCode":"DEU","1":"DEU","Population":"183836","2":"183836"},{"Name":"Mainz","0":"Mainz","CountryCode":"DEU","1":"DEU","Population":"183134","2":"183134"},{"Name":"Hamm","0":"Hamm","CountryCode":"DEU","1":"DEU","Population":"181804","2":"181804"},{"Name":"Herne","0":"Herne","CountryCode":"DEU","1":"DEU","Population":"175661","2":"175661"},{"Name":"M\u00fclheim an der Ruhr","0":"M\u00fclheim an der Ruhr","CountryCode":"DEU","1":"DEU","Population":"173895","2":"173895"},{"Name":"Solingen","0":"Solingen","CountryCode":"DEU","1":"DEU","Population":"165583","2":"165583"},{"Name":"Osnabr\u00fcck","0":"Osnabr\u00fcck","CountryCode":"DEU","1":"DEU","Population":"164539","2":"164539"},{"Name":"Ludwigshafen am Rhein","0":"Ludwigshafen am Rhein","CountryCode":"DEU","1":"DEU","Population":"163771","2":"163771"},{"Name":"Leverkusen","0":"Leverkusen","CountryCode":"DEU","1":"DEU","Population":"160841","2":"160841"},{"Name":"Oldenburg","0":"Oldenburg","CountryCode":"DEU","1":"DEU","Population":"154125","2":"154125"},{"Name":"Neuss","0":"Neuss","CountryCode":"DEU","1":"DEU","Population":"149702","2":"149702"},{"Name":"Heidelberg","0":"Heidelberg","CountryCode":"DEU","1":"DEU","Population":"139672","2":"139672"},{"Name":"Darmstadt","0":"Darmstadt","CountryCode":"DEU","1":"DEU","Population":"137776","2":"137776"},{"Name":"Paderborn","0":"Paderborn","CountryCode":"DEU","1":"DEU","Population":"137647","2":"137647"},{"Name":"Potsdam","0":"Potsdam","CountryCode":"DEU","1":"DEU","Population":"128983","2":"128983"},{"Name":"W\u00fcrzburg","0":"W\u00fcrzburg","CountryCode":"DEU","1":"DEU","Population":"127350","2":"127350"},{"Name":"Regensburg","0":"Regensburg","CountryCode":"DEU","1":"DEU","Population":"125236","2":"125236"},{"Name":"Recklinghausen","0":"Recklinghausen","CountryCode":"DEU","1":"DEU","Population":"125022","2":"125022"},{"Name":"G\u00f6ttingen","0":"G\u00f6ttingen","CountryCode":"DEU","1":"DEU","Population":"124775","2":"124775"},{"Name":"Bremerhaven","0":"Bremerhaven","CountryCode":"DEU","1":"DEU","Population":"122735","2":"122735"},{"Name":"Wolfsburg","0":"Wolfsburg","CountryCode":"DEU","1":"DEU","Population":"121954","2":"121954"},{"Name":"Bottrop","0":"Bottrop","CountryCode":"DEU","1":"DEU","Population":"121097","2":"121097"},{"Name":"Remscheid","0":"Remscheid","CountryCode":"DEU","1":"DEU","Population":"120125","2":"120125"},{"Name":"Heilbronn","0":"Heilbronn","CountryCode":"DEU","1":"DEU","Population":"119526","2":"119526"},{"Name":"Pforzheim","0":"Pforzheim","CountryCode":"DEU","1":"DEU","Population":"117227","2":"117227"},{"Name":"Offenbach am Main","0":"Offenbach am Main","CountryCode":"DEU","1":"DEU","Population":"116627","2":"116627"},{"Name":"Ulm","0":"Ulm","CountryCode":"DEU","1":"DEU","Population":"116103","2":"116103"},{"Name":"Ingolstadt","0":"Ingolstadt","CountryCode":"DEU","1":"DEU","Population":"114826","2":"114826"},{"Name":"Gera","0":"Gera","CountryCode":"DEU","1":"DEU","Population":"114718","2":"114718"},{"Name":"Salzgitter","0":"Salzgitter","CountryCode":"DEU","1":"DEU","Population":"112934","2":"112934"},{"Name":"Cottbus","0":"Cottbus","CountryCode":"DEU","1":"DEU","Population":"110894","2":"110894"},{"Name":"Reutlingen","0":"Reutlingen","CountryCode":"DEU","1":"DEU","Population":"110343","2":"110343"},{"Name":"F\u00fcrth","0":"F\u00fcrth","CountryCode":"DEU","1":"DEU","Population":"109771","2":"109771"},{"Name":"Siegen","0":"Siegen","CountryCode":"DEU","1":"DEU","Population":"109225","2":"109225"},{"Name":"Koblenz","0":"Koblenz","CountryCode":"DEU","1":"DEU","Population":"108003","2":"108003"},{"Name":"Moers","0":"Moers","CountryCode":"DEU","1":"DEU","Population":"106837","2":"106837"},{"Name":"Bergisch Gladbach","0":"Bergisch Gladbach","CountryCode":"DEU","1":"DEU","Population":"106150","2":"106150"},{"Name":"Zwickau","0":"Zwickau","CountryCode":"DEU","1":"DEU","Population":"104146","2":"104146"},{"Name":"Hildesheim","0":"Hildesheim","CountryCode":"DEU","1":"DEU","Population":"104013","2":"104013"},{"Name":"Witten","0":"Witten","CountryCode":"DEU","1":"DEU","Population":"103384","2":"103384"},{"Name":"Schwerin","0":"Schwerin","CountryCode":"DEU","1":"DEU","Population":"102878","2":"102878"},{"Name":"Erlangen","0":"Erlangen","CountryCode":"DEU","1":"DEU","Population":"100750","2":"100750"},{"Name":"Kaiserslautern","0":"Kaiserslautern","CountryCode":"DEU","1":"DEU","Population":"100025","2":"100025"},{"Name":"Trier","0":"Trier","CountryCode":"DEU","1":"DEU","Population":"99891","2":"99891"},{"Name":"Jena","0":"Jena","CountryCode":"DEU","1":"DEU","Population":"99779","2":"99779"},{"Name":"Iserlohn","0":"Iserlohn","CountryCode":"DEU","1":"DEU","Population":"99474","2":"99474"},{"Name":"G\u00fctersloh","0":"G\u00fctersloh","CountryCode":"DEU","1":"DEU","Population":"95028","2":"95028"},{"Name":"Marl","0":"Marl","CountryCode":"DEU","1":"DEU","Population":"93735","2":"93735"},{"Name":"L\u00fcnen","0":"L\u00fcnen","CountryCode":"DEU","1":"DEU","Population":"92044","2":"92044"},{"Name":"D\u00fcren","0":"D\u00fcren","CountryCode":"DEU","1":"DEU","Population":"91092","2":"91092"},{"Name":"Ratingen","0":"Ratingen","CountryCode":"DEU","1":"DEU","Population":"90951","2":"90951"},{"Name":"Velbert","0":"Velbert","CountryCode":"DEU","1":"DEU","Population":"89881","2":"89881"},{"Name":"Esslingen am Neckar","0":"Esslingen am Neckar","CountryCode":"DEU","1":"DEU","Population":"89667","2":"89667"},{"Name":"Honiara","0":"Honiara","CountryCode":"SLB","1":"SLB","Population":"50100","2":"50100"},{"Name":"Lusaka","0":"Lusaka","CountryCode":"ZMB","1":"ZMB","Population":"1317000","2":"1317000"},{"Name":"Ndola","0":"Ndola","CountryCode":"ZMB","1":"ZMB","Population":"329200","2":"329200"},{"Name":"Kitwe","0":"Kitwe","CountryCode":"ZMB","1":"ZMB","Population":"288600","2":"288600"},{"Name":"Kabwe","0":"Kabwe","CountryCode":"ZMB","1":"ZMB","Population":"154300","2":"154300"},{"Name":"Chingola","0":"Chingola","CountryCode":"ZMB","1":"ZMB","Population":"142400","2":"142400"},{"Name":"Mufulira","0":"Mufulira","CountryCode":"ZMB","1":"ZMB","Population":"123900","2":"123900"},{"Name":"Luanshya","0":"Luanshya","CountryCode":"ZMB","1":"ZMB","Population":"118100","2":"118100"},{"Name":"Apia","0":"Apia","CountryCode":"WSM","1":"WSM","Population":"35900","2":"35900"},{"Name":"Serravalle","0":"Serravalle","CountryCode":"SMR","1":"SMR","Population":"4802","2":"4802"},{"Name":"San Marino","0":"San Marino","CountryCode":"SMR","1":"SMR","Population":"2294","2":"2294"},{"Name":"S\u00e3o Tom\u00e9","0":"S\u00e3o Tom\u00e9","CountryCode":"STP","1":"STP","Population":"49541","2":"49541"},{"Name":"Riyadh","0":"Riyadh","CountryCode":"SAU","1":"SAU","Population":"3324000","2":"3324000"},{"Name":"Jedda","0":"Jedda","CountryCode":"SAU","1":"SAU","Population":"2046300","2":"2046300"},{"Name":"Mekka","0":"Mekka","CountryCode":"SAU","1":"SAU","Population":"965700","2":"965700"},{"Name":"Medina","0":"Medina","CountryCode":"SAU","1":"SAU","Population":"608300","2":"608300"},{"Name":"al-Dammam","0":"al-Dammam","CountryCode":"SAU","1":"SAU","Population":"482300","2":"482300"},{"Name":"al-Taif","0":"al-Taif","CountryCode":"SAU","1":"SAU","Population":"416100","2":"416100"},{"Name":"Tabuk","0":"Tabuk","CountryCode":"SAU","1":"SAU","Population":"292600","2":"292600"},{"Name":"Burayda","0":"Burayda","CountryCode":"SAU","1":"SAU","Population":"248600","2":"248600"},{"Name":"al-Hufuf","0":"al-Hufuf","CountryCode":"SAU","1":"SAU","Population":"225800","2":"225800"},{"Name":"al-Mubarraz","0":"al-Mubarraz","CountryCode":"SAU","1":"SAU","Population":"219100","2":"219100"},{"Name":"Khamis Mushayt","0":"Khamis Mushayt","CountryCode":"SAU","1":"SAU","Population":"217900","2":"217900"},{"Name":"Hail","0":"Hail","CountryCode":"SAU","1":"SAU","Population":"176800","2":"176800"},{"Name":"al-Kharj","0":"al-Kharj","CountryCode":"SAU","1":"SAU","Population":"152100","2":"152100"},{"Name":"al-Khubar","0":"al-Khubar","CountryCode":"SAU","1":"SAU","Population":"141700","2":"141700"},{"Name":"Jubayl","0":"Jubayl","CountryCode":"SAU","1":"SAU","Population":"140800","2":"140800"},{"Name":"Hafar al-Batin","0":"Hafar al-Batin","CountryCode":"SAU","1":"SAU","Population":"137800","2":"137800"},{"Name":"al-Tuqba","0":"al-Tuqba","CountryCode":"SAU","1":"SAU","Population":"125700","2":"125700"},{"Name":"Yanbu","0":"Yanbu","CountryCode":"SAU","1":"SAU","Population":"119800","2":"119800"},{"Name":"Abha","0":"Abha","CountryCode":"SAU","1":"SAU","Population":"112300","2":"112300"},{"Name":"Ara\u00b4ar","0":"Ara\u00b4ar","CountryCode":"SAU","1":"SAU","Population":"108100","2":"108100"},{"Name":"al-Qatif","0":"al-Qatif","CountryCode":"SAU","1":"SAU","Population":"98900","2":"98900"},{"Name":"al-Hawiya","0":"al-Hawiya","CountryCode":"SAU","1":"SAU","Population":"93900","2":"93900"},{"Name":"Unayza","0":"Unayza","CountryCode":"SAU","1":"SAU","Population":"91100","2":"91100"},{"Name":"Najran","0":"Najran","CountryCode":"SAU","1":"SAU","Population":"91000","2":"91000"},{"Name":"Pikine","0":"Pikine","CountryCode":"SEN","1":"SEN","Population":"855287","2":"855287"},{"Name":"Dakar","0":"Dakar","CountryCode":"SEN","1":"SEN","Population":"785071","2":"785071"},{"Name":"Thi\u00e8s","0":"Thi\u00e8s","CountryCode":"SEN","1":"SEN","Population":"248000","2":"248000"},{"Name":"Kaolack","0":"Kaolack","CountryCode":"SEN","1":"SEN","Population":"199000","2":"199000"},{"Name":"Ziguinchor","0":"Ziguinchor","CountryCode":"SEN","1":"SEN","Population":"192000","2":"192000"},{"Name":"Rufisque","0":"Rufisque","CountryCode":"SEN","1":"SEN","Population":"150000","2":"150000"},{"Name":"Saint-Louis","0":"Saint-Louis","CountryCode":"SEN","1":"SEN","Population":"132400","2":"132400"},{"Name":"Mbour","0":"Mbour","CountryCode":"SEN","1":"SEN","Population":"109300","2":"109300"},{"Name":"Diourbel","0":"Diourbel","CountryCode":"SEN","1":"SEN","Population":"99400","2":"99400"},{"Name":"Victoria","0":"Victoria","CountryCode":"SYC","1":"SYC","Population":"41000","2":"41000"},{"Name":"Freetown","0":"Freetown","CountryCode":"SLE","1":"SLE","Population":"850000","2":"850000"},{"Name":"Singapore","0":"Singapore","CountryCode":"SGP","1":"SGP","Population":"4017733","2":"4017733"},{"Name":"Bratislava","0":"Bratislava","CountryCode":"SVK","1":"SVK","Population":"448292","2":"448292"},{"Name":"Ko\u0161ice","0":"Ko\u0161ice","CountryCode":"SVK","1":"SVK","Population":"241874","2":"241874"},{"Name":"Pre\u0161ov","0":"Pre\u0161ov","CountryCode":"SVK","1":"SVK","Population":"93977","2":"93977"},{"Name":"Ljubljana","0":"Ljubljana","CountryCode":"SVN","1":"SVN","Population":"270986","2":"270986"},{"Name":"Maribor","0":"Maribor","CountryCode":"SVN","1":"SVN","Population":"115532","2":"115532"},{"Name":"Mogadishu","0":"Mogadishu","CountryCode":"SOM","1":"SOM","Population":"997000","2":"997000"},{"Name":"Hargeysa","0":"Hargeysa","CountryCode":"SOM","1":"SOM","Population":"90000","2":"90000"},{"Name":"Kismaayo","0":"Kismaayo","CountryCode":"SOM","1":"SOM","Population":"90000","2":"90000"},{"Name":"Colombo","0":"Colombo","CountryCode":"LKA","1":"LKA","Population":"645000","2":"645000"},{"Name":"Dehiwala","0":"Dehiwala","CountryCode":"LKA","1":"LKA","Population":"203000","2":"203000"},{"Name":"Moratuwa","0":"Moratuwa","CountryCode":"LKA","1":"LKA","Population":"190000","2":"190000"},{"Name":"Jaffna","0":"Jaffna","CountryCode":"LKA","1":"LKA","Population":"149000","2":"149000"},{"Name":"Kandy","0":"Kandy","CountryCode":"LKA","1":"LKA","Population":"140000","2":"140000"},{"Name":"Sri Jayawardenepura Kotte","0":"Sri Jayawardenepura Kotte","CountryCode":"LKA","1":"LKA","Population":"118000","2":"118000"},{"Name":"Negombo","0":"Negombo","CountryCode":"LKA","1":"LKA","Population":"100000","2":"100000"},{"Name":"Omdurman","0":"Omdurman","CountryCode":"SDN","1":"SDN","Population":"1271403","2":"1271403"},{"Name":"Khartum","0":"Khartum","CountryCode":"SDN","1":"SDN","Population":"947483","2":"947483"},{"Name":"Sharq al-Nil","0":"Sharq al-Nil","CountryCode":"SDN","1":"SDN","Population":"700887","2":"700887"},{"Name":"Port Sudan","0":"Port Sudan","CountryCode":"SDN","1":"SDN","Population":"308195","2":"308195"},{"Name":"Kassala","0":"Kassala","CountryCode":"SDN","1":"SDN","Population":"234622","2":"234622"},{"Name":"Obeid","0":"Obeid","CountryCode":"SDN","1":"SDN","Population":"229425","2":"229425"},{"Name":"Nyala","0":"Nyala","CountryCode":"SDN","1":"SDN","Population":"227183","2":"227183"},{"Name":"Wad Madani","0":"Wad Madani","CountryCode":"SDN","1":"SDN","Population":"211362","2":"211362"},{"Name":"al-Qadarif","0":"al-Qadarif","CountryCode":"SDN","1":"SDN","Population":"191164","2":"191164"},{"Name":"Kusti","0":"Kusti","CountryCode":"SDN","1":"SDN","Population":"173599","2":"173599"},{"Name":"al-Fashir","0":"al-Fashir","CountryCode":"SDN","1":"SDN","Population":"141884","2":"141884"},{"Name":"Juba","0":"Juba","CountryCode":"SDN","1":"SDN","Population":"114980","2":"114980"},{"Name":"Helsinki [Helsingfors]","0":"Helsinki [Helsingfors]","CountryCode":"FIN","1":"FIN","Population":"555474","2":"555474"},{"Name":"Espoo","0":"Espoo","CountryCode":"FIN","1":"FIN","Population":"213271","2":"213271"},{"Name":"Tampere","0":"Tampere","CountryCode":"FIN","1":"FIN","Population":"195468","2":"195468"},{"Name":"Vantaa","0":"Vantaa","CountryCode":"FIN","1":"FIN","Population":"178471","2":"178471"},{"Name":"Turku [\u00c5bo]","0":"Turku [\u00c5bo]","CountryCode":"FIN","1":"FIN","Population":"172561","2":"172561"},{"Name":"Oulu","0":"Oulu","CountryCode":"FIN","1":"FIN","Population":"120753","2":"120753"},{"Name":"Lahti","0":"Lahti","CountryCode":"FIN","1":"FIN","Population":"96921","2":"96921"},{"Name":"Paramaribo","0":"Paramaribo","CountryCode":"SUR","1":"SUR","Population":"112000","2":"112000"},{"Name":"Mbabane","0":"Mbabane","CountryCode":"SWZ","1":"SWZ","Population":"61000","2":"61000"},{"Name":"Z\u00fcrich","0":"Z\u00fcrich","CountryCode":"CHE","1":"CHE","Population":"336800","2":"336800"},{"Name":"Geneve","0":"Geneve","CountryCode":"CHE","1":"CHE","Population":"173500","2":"173500"},{"Name":"Basel","0":"Basel","CountryCode":"CHE","1":"CHE","Population":"166700","2":"166700"},{"Name":"Bern","0":"Bern","CountryCode":"CHE","1":"CHE","Population":"122700","2":"122700"},{"Name":"Lausanne","0":"Lausanne","CountryCode":"CHE","1":"CHE","Population":"114500","2":"114500"},{"Name":"Damascus","0":"Damascus","CountryCode":"SYR","1":"SYR","Population":"1347000","2":"1347000"},{"Name":"Aleppo","0":"Aleppo","CountryCode":"SYR","1":"SYR","Population":"1261983","2":"1261983"},{"Name":"Hims","0":"Hims","CountryCode":"SYR","1":"SYR","Population":"507404","2":"507404"},{"Name":"Hama","0":"Hama","CountryCode":"SYR","1":"SYR","Population":"343361","2":"343361"},{"Name":"Latakia","0":"Latakia","CountryCode":"SYR","1":"SYR","Population":"264563","2":"264563"},{"Name":"al-Qamishliya","0":"al-Qamishliya","CountryCode":"SYR","1":"SYR","Population":"144286","2":"144286"},{"Name":"Dayr al-Zawr","0":"Dayr al-Zawr","CountryCode":"SYR","1":"SYR","Population":"140459","2":"140459"},{"Name":"Jaramana","0":"Jaramana","CountryCode":"SYR","1":"SYR","Population":"138469","2":"138469"},{"Name":"Duma","0":"Duma","CountryCode":"SYR","1":"SYR","Population":"131158","2":"131158"},{"Name":"al-Raqqa","0":"al-Raqqa","CountryCode":"SYR","1":"SYR","Population":"108020","2":"108020"},{"Name":"Idlib","0":"Idlib","CountryCode":"SYR","1":"SYR","Population":"91081","2":"91081"},{"Name":"Dushanbe","0":"Dushanbe","CountryCode":"TJK","1":"TJK","Population":"524000","2":"524000"},{"Name":"Khujand","0":"Khujand","CountryCode":"TJK","1":"TJK","Population":"161500","2":"161500"},{"Name":"Taipei","0":"Taipei","CountryCode":"TWN","1":"TWN","Population":"2641312","2":"2641312"},{"Name":"Kaohsiung","0":"Kaohsiung","CountryCode":"TWN","1":"TWN","Population":"1475505","2":"1475505"},{"Name":"Taichung","0":"Taichung","CountryCode":"TWN","1":"TWN","Population":"940589","2":"940589"},{"Name":"Tainan","0":"Tainan","CountryCode":"TWN","1":"TWN","Population":"728060","2":"728060"},{"Name":"Panchiao","0":"Panchiao","CountryCode":"TWN","1":"TWN","Population":"523850","2":"523850"},{"Name":"Chungho","0":"Chungho","CountryCode":"TWN","1":"TWN","Population":"392176","2":"392176"},{"Name":"Keelung (Chilung)","0":"Keelung (Chilung)","CountryCode":"TWN","1":"TWN","Population":"385201","2":"385201"},{"Name":"Sanchung","0":"Sanchung","CountryCode":"TWN","1":"TWN","Population":"380084","2":"380084"},{"Name":"Hsinchuang","0":"Hsinchuang","CountryCode":"TWN","1":"TWN","Population":"365048","2":"365048"},{"Name":"Hsinchu","0":"Hsinchu","CountryCode":"TWN","1":"TWN","Population":"361958","2":"361958"},{"Name":"Chungli","0":"Chungli","CountryCode":"TWN","1":"TWN","Population":"318649","2":"318649"},{"Name":"Fengshan","0":"Fengshan","CountryCode":"TWN","1":"TWN","Population":"318562","2":"318562"},{"Name":"Taoyuan","0":"Taoyuan","CountryCode":"TWN","1":"TWN","Population":"316438","2":"316438"},{"Name":"Chiayi","0":"Chiayi","CountryCode":"TWN","1":"TWN","Population":"265109","2":"265109"},{"Name":"Hsintien","0":"Hsintien","CountryCode":"TWN","1":"TWN","Population":"263603","2":"263603"},{"Name":"Changhwa","0":"Changhwa","CountryCode":"TWN","1":"TWN","Population":"227715","2":"227715"},{"Name":"Yungho","0":"Yungho","CountryCode":"TWN","1":"TWN","Population":"227700","2":"227700"},{"Name":"Tucheng","0":"Tucheng","CountryCode":"TWN","1":"TWN","Population":"224897","2":"224897"},{"Name":"Pingtung","0":"Pingtung","CountryCode":"TWN","1":"TWN","Population":"214727","2":"214727"},{"Name":"Yungkang","0":"Yungkang","CountryCode":"TWN","1":"TWN","Population":"193005","2":"193005"},{"Name":"Pingchen","0":"Pingchen","CountryCode":"TWN","1":"TWN","Population":"188344","2":"188344"},{"Name":"Tali","0":"Tali","CountryCode":"TWN","1":"TWN","Population":"171940","2":"171940"},{"Name":"Taiping","0":"Taiping","CountryCode":"TWN","1":"TWN","Population":"165524","2":"165524"},{"Name":"Pate","0":"Pate","CountryCode":"TWN","1":"TWN","Population":"161700","2":"161700"},{"Name":"Fengyuan","0":"Fengyuan","CountryCode":"TWN","1":"TWN","Population":"161032","2":"161032"},{"Name":"Luchou","0":"Luchou","CountryCode":"TWN","1":"TWN","Population":"160516","2":"160516"},{"Name":"Hsichuh","0":"Hsichuh","CountryCode":"TWN","1":"TWN","Population":"154976","2":"154976"},{"Name":"Shulin","0":"Shulin","CountryCode":"TWN","1":"TWN","Population":"151260","2":"151260"},{"Name":"Yuanlin","0":"Yuanlin","CountryCode":"TWN","1":"TWN","Population":"126402","2":"126402"},{"Name":"Yangmei","0":"Yangmei","CountryCode":"TWN","1":"TWN","Population":"126323","2":"126323"},{"Name":"Taliao","0":"Taliao","CountryCode":"TWN","1":"TWN","Population":"115897","2":"115897"},{"Name":"Kueishan","0":"Kueishan","CountryCode":"TWN","1":"TWN","Population":"112195","2":"112195"},{"Name":"Tanshui","0":"Tanshui","CountryCode":"TWN","1":"TWN","Population":"111882","2":"111882"},{"Name":"Taitung","0":"Taitung","CountryCode":"TWN","1":"TWN","Population":"111039","2":"111039"},{"Name":"Hualien","0":"Hualien","CountryCode":"TWN","1":"TWN","Population":"108407","2":"108407"},{"Name":"Nantou","0":"Nantou","CountryCode":"TWN","1":"TWN","Population":"104723","2":"104723"},{"Name":"Lungtan","0":"Lungtan","CountryCode":"TWN","1":"TWN","Population":"103088","2":"103088"},{"Name":"Touliu","0":"Touliu","CountryCode":"TWN","1":"TWN","Population":"98900","2":"98900"},{"Name":"Tsaotun","0":"Tsaotun","CountryCode":"TWN","1":"TWN","Population":"96800","2":"96800"},{"Name":"Kangshan","0":"Kangshan","CountryCode":"TWN","1":"TWN","Population":"92200","2":"92200"},{"Name":"Ilan","0":"Ilan","CountryCode":"TWN","1":"TWN","Population":"92000","2":"92000"},{"Name":"Miaoli","0":"Miaoli","CountryCode":"TWN","1":"TWN","Population":"90000","2":"90000"},{"Name":"Dar es Salaam","0":"Dar es Salaam","CountryCode":"TZA","1":"TZA","Population":"1747000","2":"1747000"},{"Name":"Dodoma","0":"Dodoma","CountryCode":"TZA","1":"TZA","Population":"189000","2":"189000"},{"Name":"Mwanza","0":"Mwanza","CountryCode":"TZA","1":"TZA","Population":"172300","2":"172300"},{"Name":"Zanzibar","0":"Zanzibar","CountryCode":"TZA","1":"TZA","Population":"157634","2":"157634"},{"Name":"Tanga","0":"Tanga","CountryCode":"TZA","1":"TZA","Population":"137400","2":"137400"},{"Name":"Mbeya","0":"Mbeya","CountryCode":"TZA","1":"TZA","Population":"130800","2":"130800"},{"Name":"Morogoro","0":"Morogoro","CountryCode":"TZA","1":"TZA","Population":"117800","2":"117800"},{"Name":"Arusha","0":"Arusha","CountryCode":"TZA","1":"TZA","Population":"102500","2":"102500"},{"Name":"Moshi","0":"Moshi","CountryCode":"TZA","1":"TZA","Population":"96800","2":"96800"},{"Name":"Tabora","0":"Tabora","CountryCode":"TZA","1":"TZA","Population":"92800","2":"92800"},{"Name":"K\u00f8benhavn","0":"K\u00f8benhavn","CountryCode":"DNK","1":"DNK","Population":"495699","2":"495699"},{"Name":"\u00c5rhus","0":"\u00c5rhus","CountryCode":"DNK","1":"DNK","Population":"284846","2":"284846"},{"Name":"Odense","0":"Odense","CountryCode":"DNK","1":"DNK","Population":"183912","2":"183912"},{"Name":"Aalborg","0":"Aalborg","CountryCode":"DNK","1":"DNK","Population":"161161","2":"161161"},{"Name":"Frederiksberg","0":"Frederiksberg","CountryCode":"DNK","1":"DNK","Population":"90327","2":"90327"},{"Name":"Bangkok","0":"Bangkok","CountryCode":"THA","1":"THA","Population":"6320174","2":"6320174"},{"Name":"Nonthaburi","0":"Nonthaburi","CountryCode":"THA","1":"THA","Population":"292100","2":"292100"},{"Name":"Nakhon Ratchasima","0":"Nakhon Ratchasima","CountryCode":"THA","1":"THA","Population":"181400","2":"181400"},{"Name":"Chiang Mai","0":"Chiang Mai","CountryCode":"THA","1":"THA","Population":"171100","2":"171100"},{"Name":"Udon Thani","0":"Udon Thani","CountryCode":"THA","1":"THA","Population":"158100","2":"158100"},{"Name":"Hat Yai","0":"Hat Yai","CountryCode":"THA","1":"THA","Population":"148632","2":"148632"},{"Name":"Khon Kaen","0":"Khon Kaen","CountryCode":"THA","1":"THA","Population":"126500","2":"126500"},{"Name":"Pak Kret","0":"Pak Kret","CountryCode":"THA","1":"THA","Population":"126055","2":"126055"},{"Name":"Nakhon Sawan","0":"Nakhon Sawan","CountryCode":"THA","1":"THA","Population":"123800","2":"123800"},{"Name":"Ubon Ratchathani","0":"Ubon Ratchathani","CountryCode":"THA","1":"THA","Population":"116300","2":"116300"},{"Name":"Songkhla","0":"Songkhla","CountryCode":"THA","1":"THA","Population":"94900","2":"94900"},{"Name":"Nakhon Pathom","0":"Nakhon Pathom","CountryCode":"THA","1":"THA","Population":"94100","2":"94100"},{"Name":"Lom\u00e9","0":"Lom\u00e9","CountryCode":"TGO","1":"TGO","Population":"375000","2":"375000"},{"Name":"Fakaofo","0":"Fakaofo","CountryCode":"TKL","1":"TKL","Population":"300","2":"300"},{"Name":"Nuku\u00b4alofa","0":"Nuku\u00b4alofa","CountryCode":"TON","1":"TON","Population":"22400","2":"22400"},{"Name":"Chaguanas","0":"Chaguanas","CountryCode":"TTO","1":"TTO","Population":"56601","2":"56601"},{"Name":"Port-of-Spain","0":"Port-of-Spain","CountryCode":"TTO","1":"TTO","Population":"43396","2":"43396"},{"Name":"N\u00b4Djam\u00e9na","0":"N\u00b4Djam\u00e9na","CountryCode":"TCD","1":"TCD","Population":"530965","2":"530965"},{"Name":"Moundou","0":"Moundou","CountryCode":"TCD","1":"TCD","Population":"99500","2":"99500"},{"Name":"Praha","0":"Praha","CountryCode":"CZE","1":"CZE","Population":"1181126","2":"1181126"},{"Name":"Brno","0":"Brno","CountryCode":"CZE","1":"CZE","Population":"381862","2":"381862"},{"Name":"Ostrava","0":"Ostrava","CountryCode":"CZE","1":"CZE","Population":"320041","2":"320041"},{"Name":"Plzen","0":"Plzen","CountryCode":"CZE","1":"CZE","Population":"166759","2":"166759"},{"Name":"Olomouc","0":"Olomouc","CountryCode":"CZE","1":"CZE","Population":"102702","2":"102702"},{"Name":"Liberec","0":"Liberec","CountryCode":"CZE","1":"CZE","Population":"99155","2":"99155"},{"Name":"Cesk\u00e9 Budejovice","0":"Cesk\u00e9 Budejovice","CountryCode":"CZE","1":"CZE","Population":"98186","2":"98186"},{"Name":"Hradec Kr\u00e1lov\u00e9","0":"Hradec Kr\u00e1lov\u00e9","CountryCode":"CZE","1":"CZE","Population":"98080","2":"98080"},{"Name":"\u00dast\u00ed nad Labem","0":"\u00dast\u00ed nad Labem","CountryCode":"CZE","1":"CZE","Population":"95491","2":"95491"},{"Name":"Pardubice","0":"Pardubice","CountryCode":"CZE","1":"CZE","Population":"91309","2":"91309"},{"Name":"Tunis","0":"Tunis","CountryCode":"TUN","1":"TUN","Population":"690600","2":"690600"},{"Name":"Sfax","0":"Sfax","CountryCode":"TUN","1":"TUN","Population":"257800","2":"257800"},{"Name":"Ariana","0":"Ariana","CountryCode":"TUN","1":"TUN","Population":"197000","2":"197000"},{"Name":"Ettadhamen","0":"Ettadhamen","CountryCode":"TUN","1":"TUN","Population":"178600","2":"178600"},{"Name":"Sousse","0":"Sousse","CountryCode":"TUN","1":"TUN","Population":"145900","2":"145900"},{"Name":"Kairouan","0":"Kairouan","CountryCode":"TUN","1":"TUN","Population":"113100","2":"113100"},{"Name":"Biserta","0":"Biserta","CountryCode":"TUN","1":"TUN","Population":"108900","2":"108900"},{"Name":"Gab\u00e8s","0":"Gab\u00e8s","CountryCode":"TUN","1":"TUN","Population":"106600","2":"106600"},{"Name":"Istanbul","0":"Istanbul","CountryCode":"TUR","1":"TUR","Population":"8787958","2":"8787958"},{"Name":"Ankara","0":"Ankara","CountryCode":"TUR","1":"TUR","Population":"3038159","2":"3038159"},{"Name":"Izmir","0":"Izmir","CountryCode":"TUR","1":"TUR","Population":"2130359","2":"2130359"},{"Name":"Adana","0":"Adana","CountryCode":"TUR","1":"TUR","Population":"1131198","2":"1131198"},{"Name":"Bursa","0":"Bursa","CountryCode":"TUR","1":"TUR","Population":"1095842","2":"1095842"},{"Name":"Gaziantep","0":"Gaziantep","CountryCode":"TUR","1":"TUR","Population":"789056","2":"789056"},{"Name":"Konya","0":"Konya","CountryCode":"TUR","1":"TUR","Population":"628364","2":"628364"},{"Name":"Mersin (I\u00e7el)","0":"Mersin (I\u00e7el)","CountryCode":"TUR","1":"TUR","Population":"587212","2":"587212"},{"Name":"Antalya","0":"Antalya","CountryCode":"TUR","1":"TUR","Population":"564914","2":"564914"},{"Name":"Diyarbakir","0":"Diyarbakir","CountryCode":"TUR","1":"TUR","Population":"479884","2":"479884"},{"Name":"Kayseri","0":"Kayseri","CountryCode":"TUR","1":"TUR","Population":"475657","2":"475657"},{"Name":"Eskisehir","0":"Eskisehir","CountryCode":"TUR","1":"TUR","Population":"470781","2":"470781"},{"Name":"Sanliurfa","0":"Sanliurfa","CountryCode":"TUR","1":"TUR","Population":"405905","2":"405905"},{"Name":"Samsun","0":"Samsun","CountryCode":"TUR","1":"TUR","Population":"339871","2":"339871"},{"Name":"Malatya","0":"Malatya","CountryCode":"TUR","1":"TUR","Population":"330312","2":"330312"},{"Name":"Gebze","0":"Gebze","CountryCode":"TUR","1":"TUR","Population":"264170","2":"264170"},{"Name":"Denizli","0":"Denizli","CountryCode":"TUR","1":"TUR","Population":"253848","2":"253848"},{"Name":"Sivas","0":"Sivas","CountryCode":"TUR","1":"TUR","Population":"246642","2":"246642"},{"Name":"Erzurum","0":"Erzurum","CountryCode":"TUR","1":"TUR","Population":"246535","2":"246535"},{"Name":"Tarsus","0":"Tarsus","CountryCode":"TUR","1":"TUR","Population":"246206","2":"246206"},{"Name":"Kahramanmaras","0":"Kahramanmaras","CountryCode":"TUR","1":"TUR","Population":"245772","2":"245772"},{"Name":"El\u00e2zig","0":"El\u00e2zig","CountryCode":"TUR","1":"TUR","Population":"228815","2":"228815"},{"Name":"Van","0":"Van","CountryCode":"TUR","1":"TUR","Population":"219319","2":"219319"},{"Name":"Sultanbeyli","0":"Sultanbeyli","CountryCode":"TUR","1":"TUR","Population":"211068","2":"211068"},{"Name":"Izmit (Kocaeli)","0":"Izmit (Kocaeli)","CountryCode":"TUR","1":"TUR","Population":"210068","2":"210068"},{"Name":"Manisa","0":"Manisa","CountryCode":"TUR","1":"TUR","Population":"207148","2":"207148"},{"Name":"Batman","0":"Batman","CountryCode":"TUR","1":"TUR","Population":"203793","2":"203793"},{"Name":"Balikesir","0":"Balikesir","CountryCode":"TUR","1":"TUR","Population":"196382","2":"196382"},{"Name":"Sakarya (Adapazari)","0":"Sakarya (Adapazari)","CountryCode":"TUR","1":"TUR","Population":"190641","2":"190641"},{"Name":"Iskenderun","0":"Iskenderun","CountryCode":"TUR","1":"TUR","Population":"153022","2":"153022"},{"Name":"Osmaniye","0":"Osmaniye","CountryCode":"TUR","1":"TUR","Population":"146003","2":"146003"},{"Name":"\u00c7orum","0":"\u00c7orum","CountryCode":"TUR","1":"TUR","Population":"145495","2":"145495"},{"Name":"K\u00fctahya","0":"K\u00fctahya","CountryCode":"TUR","1":"TUR","Population":"144761","2":"144761"},{"Name":"Hatay (Antakya)","0":"Hatay (Antakya)","CountryCode":"TUR","1":"TUR","Population":"143982","2":"143982"},{"Name":"Kirikkale","0":"Kirikkale","CountryCode":"TUR","1":"TUR","Population":"142044","2":"142044"},{"Name":"Adiyaman","0":"Adiyaman","CountryCode":"TUR","1":"TUR","Population":"141529","2":"141529"},{"Name":"Trabzon","0":"Trabzon","CountryCode":"TUR","1":"TUR","Population":"138234","2":"138234"},{"Name":"Ordu","0":"Ordu","CountryCode":"TUR","1":"TUR","Population":"133642","2":"133642"},{"Name":"Aydin","0":"Aydin","CountryCode":"TUR","1":"TUR","Population":"128651","2":"128651"},{"Name":"Usak","0":"Usak","CountryCode":"TUR","1":"TUR","Population":"128162","2":"128162"},{"Name":"Edirne","0":"Edirne","CountryCode":"TUR","1":"TUR","Population":"123383","2":"123383"},{"Name":"\u00c7orlu","0":"\u00c7orlu","CountryCode":"TUR","1":"TUR","Population":"123300","2":"123300"},{"Name":"Isparta","0":"Isparta","CountryCode":"TUR","1":"TUR","Population":"121911","2":"121911"},{"Name":"Karab\u00fck","0":"Karab\u00fck","CountryCode":"TUR","1":"TUR","Population":"118285","2":"118285"},{"Name":"Kilis","0":"Kilis","CountryCode":"TUR","1":"TUR","Population":"118245","2":"118245"},{"Name":"Alanya","0":"Alanya","CountryCode":"TUR","1":"TUR","Population":"117300","2":"117300"},{"Name":"Kiziltepe","0":"Kiziltepe","CountryCode":"TUR","1":"TUR","Population":"112000","2":"112000"},{"Name":"Zonguldak","0":"Zonguldak","CountryCode":"TUR","1":"TUR","Population":"111542","2":"111542"},{"Name":"Siirt","0":"Siirt","CountryCode":"TUR","1":"TUR","Population":"107100","2":"107100"},{"Name":"Viransehir","0":"Viransehir","CountryCode":"TUR","1":"TUR","Population":"106400","2":"106400"},{"Name":"Tekirdag","0":"Tekirdag","CountryCode":"TUR","1":"TUR","Population":"106077","2":"106077"},{"Name":"Karaman","0":"Karaman","CountryCode":"TUR","1":"TUR","Population":"104200","2":"104200"},{"Name":"Afyon","0":"Afyon","CountryCode":"TUR","1":"TUR","Population":"103984","2":"103984"},{"Name":"Aksaray","0":"Aksaray","CountryCode":"TUR","1":"TUR","Population":"102681","2":"102681"},{"Name":"Ceyhan","0":"Ceyhan","CountryCode":"TUR","1":"TUR","Population":"102412","2":"102412"},{"Name":"Erzincan","0":"Erzincan","CountryCode":"TUR","1":"TUR","Population":"102304","2":"102304"},{"Name":"Bismil","0":"Bismil","CountryCode":"TUR","1":"TUR","Population":"101400","2":"101400"},{"Name":"Nazilli","0":"Nazilli","CountryCode":"TUR","1":"TUR","Population":"99900","2":"99900"},{"Name":"Tokat","0":"Tokat","CountryCode":"TUR","1":"TUR","Population":"99500","2":"99500"},{"Name":"Kars","0":"Kars","CountryCode":"TUR","1":"TUR","Population":"93000","2":"93000"},{"Name":"Ineg\u00f6l","0":"Ineg\u00f6l","CountryCode":"TUR","1":"TUR","Population":"90500","2":"90500"},{"Name":"Bandirma","0":"Bandirma","CountryCode":"TUR","1":"TUR","Population":"90200","2":"90200"},{"Name":"Ashgabat","0":"Ashgabat","CountryCode":"TKM","1":"TKM","Population":"540600","2":"540600"},{"Name":"Ch\u00e4rjew","0":"Ch\u00e4rjew","CountryCode":"TKM","1":"TKM","Population":"189200","2":"189200"},{"Name":"Dashhowuz","0":"Dashhowuz","CountryCode":"TKM","1":"TKM","Population":"141800","2":"141800"},{"Name":"Mary","0":"Mary","CountryCode":"TKM","1":"TKM","Population":"101000","2":"101000"},{"Name":"Cockburn Town","0":"Cockburn Town","CountryCode":"TCA","1":"TCA","Population":"4800","2":"4800"},{"Name":"Funafuti","0":"Funafuti","CountryCode":"TUV","1":"TUV","Population":"4600","2":"4600"},{"Name":"Kampala","0":"Kampala","CountryCode":"UGA","1":"UGA","Population":"890800","2":"890800"},{"Name":"Kyiv","0":"Kyiv","CountryCode":"UKR","1":"UKR","Population":"2624000","2":"2624000"},{"Name":"Harkova [Harkiv]","0":"Harkova [Harkiv]","CountryCode":"UKR","1":"UKR","Population":"1500000","2":"1500000"},{"Name":"Dnipropetrovsk","0":"Dnipropetrovsk","CountryCode":"UKR","1":"UKR","Population":"1103000","2":"1103000"},{"Name":"Donetsk","0":"Donetsk","CountryCode":"UKR","1":"UKR","Population":"1050000","2":"1050000"},{"Name":"Odesa","0":"Odesa","CountryCode":"UKR","1":"UKR","Population":"1011000","2":"1011000"},{"Name":"Zaporizzja","0":"Zaporizzja","CountryCode":"UKR","1":"UKR","Population":"848000","2":"848000"},{"Name":"Lviv","0":"Lviv","CountryCode":"UKR","1":"UKR","Population":"788000","2":"788000"},{"Name":"Kryvyi Rig","0":"Kryvyi Rig","CountryCode":"UKR","1":"UKR","Population":"703000","2":"703000"},{"Name":"Mykolajiv","0":"Mykolajiv","CountryCode":"UKR","1":"UKR","Population":"508000","2":"508000"},{"Name":"Mariupol","0":"Mariupol","CountryCode":"UKR","1":"UKR","Population":"490000","2":"490000"},{"Name":"Lugansk","0":"Lugansk","CountryCode":"UKR","1":"UKR","Population":"469000","2":"469000"},{"Name":"Vinnytsja","0":"Vinnytsja","CountryCode":"UKR","1":"UKR","Population":"391000","2":"391000"},{"Name":"Makijivka","0":"Makijivka","CountryCode":"UKR","1":"UKR","Population":"384000","2":"384000"},{"Name":"Herson","0":"Herson","CountryCode":"UKR","1":"UKR","Population":"353000","2":"353000"},{"Name":"Sevastopol","0":"Sevastopol","CountryCode":"UKR","1":"UKR","Population":"348000","2":"348000"},{"Name":"Simferopol","0":"Simferopol","CountryCode":"UKR","1":"UKR","Population":"339000","2":"339000"},{"Name":"Pultava [Poltava]","0":"Pultava [Poltava]","CountryCode":"UKR","1":"UKR","Population":"313000","2":"313000"},{"Name":"T\u0161ernigiv","0":"T\u0161ernigiv","CountryCode":"UKR","1":"UKR","Population":"313000","2":"313000"},{"Name":"T\u0161erkasy","0":"T\u0161erkasy","CountryCode":"UKR","1":"UKR","Population":"309000","2":"309000"},{"Name":"Gorlivka","0":"Gorlivka","CountryCode":"UKR","1":"UKR","Population":"299000","2":"299000"},{"Name":"Zytomyr","0":"Zytomyr","CountryCode":"UKR","1":"UKR","Population":"297000","2":"297000"},{"Name":"Sumy","0":"Sumy","CountryCode":"UKR","1":"UKR","Population":"294000","2":"294000"},{"Name":"Dniprodzerzynsk","0":"Dniprodzerzynsk","CountryCode":"UKR","1":"UKR","Population":"270000","2":"270000"},{"Name":"Kirovograd","0":"Kirovograd","CountryCode":"UKR","1":"UKR","Population":"265000","2":"265000"},{"Name":"Hmelnytskyi","0":"Hmelnytskyi","CountryCode":"UKR","1":"UKR","Population":"262000","2":"262000"},{"Name":"T\u0161ernivtsi","0":"T\u0161ernivtsi","CountryCode":"UKR","1":"UKR","Population":"259000","2":"259000"},{"Name":"Rivne","0":"Rivne","CountryCode":"UKR","1":"UKR","Population":"245000","2":"245000"},{"Name":"Krement\u0161uk","0":"Krement\u0161uk","CountryCode":"UKR","1":"UKR","Population":"239000","2":"239000"},{"Name":"Ivano-Frankivsk","0":"Ivano-Frankivsk","CountryCode":"UKR","1":"UKR","Population":"237000","2":"237000"},{"Name":"Ternopil","0":"Ternopil","CountryCode":"UKR","1":"UKR","Population":"236000","2":"236000"},{"Name":"Lutsk","0":"Lutsk","CountryCode":"UKR","1":"UKR","Population":"217000","2":"217000"},{"Name":"Bila Tserkva","0":"Bila Tserkva","CountryCode":"UKR","1":"UKR","Population":"215000","2":"215000"},{"Name":"Kramatorsk","0":"Kramatorsk","CountryCode":"UKR","1":"UKR","Population":"186000","2":"186000"},{"Name":"Melitopol","0":"Melitopol","CountryCode":"UKR","1":"UKR","Population":"169000","2":"169000"},{"Name":"Kert\u0161","0":"Kert\u0161","CountryCode":"UKR","1":"UKR","Population":"162000","2":"162000"},{"Name":"Nikopol","0":"Nikopol","CountryCode":"UKR","1":"UKR","Population":"149000","2":"149000"},{"Name":"Berdjansk","0":"Berdjansk","CountryCode":"UKR","1":"UKR","Population":"130000","2":"130000"},{"Name":"Pavlograd","0":"Pavlograd","CountryCode":"UKR","1":"UKR","Population":"127000","2":"127000"},{"Name":"Sjeverodonetsk","0":"Sjeverodonetsk","CountryCode":"UKR","1":"UKR","Population":"127000","2":"127000"},{"Name":"Slovjansk","0":"Slovjansk","CountryCode":"UKR","1":"UKR","Population":"127000","2":"127000"},{"Name":"Uzgorod","0":"Uzgorod","CountryCode":"UKR","1":"UKR","Population":"127000","2":"127000"},{"Name":"Alt\u0161evsk","0":"Alt\u0161evsk","CountryCode":"UKR","1":"UKR","Population":"119000","2":"119000"},{"Name":"Lysyt\u0161ansk","0":"Lysyt\u0161ansk","CountryCode":"UKR","1":"UKR","Population":"116000","2":"116000"},{"Name":"Jevpatorija","0":"Jevpatorija","CountryCode":"UKR","1":"UKR","Population":"112000","2":"112000"},{"Name":"Kamjanets-Podilskyi","0":"Kamjanets-Podilskyi","CountryCode":"UKR","1":"UKR","Population":"109000","2":"109000"},{"Name":"Jenakijeve","0":"Jenakijeve","CountryCode":"UKR","1":"UKR","Population":"105000","2":"105000"},{"Name":"Krasnyi Lut\u0161","0":"Krasnyi Lut\u0161","CountryCode":"UKR","1":"UKR","Population":"101000","2":"101000"},{"Name":"Stahanov","0":"Stahanov","CountryCode":"UKR","1":"UKR","Population":"101000","2":"101000"},{"Name":"Oleksandrija","0":"Oleksandrija","CountryCode":"UKR","1":"UKR","Population":"99000","2":"99000"},{"Name":"Konotop","0":"Konotop","CountryCode":"UKR","1":"UKR","Population":"96000","2":"96000"},{"Name":"Kostjantynivka","0":"Kostjantynivka","CountryCode":"UKR","1":"UKR","Population":"95000","2":"95000"},{"Name":"Berdyt\u0161iv","0":"Berdyt\u0161iv","CountryCode":"UKR","1":"UKR","Population":"90000","2":"90000"},{"Name":"Izmajil","0":"Izmajil","CountryCode":"UKR","1":"UKR","Population":"90000","2":"90000"},{"Name":"\u0160ostka","0":"\u0160ostka","CountryCode":"UKR","1":"UKR","Population":"90000","2":"90000"},{"Name":"Uman","0":"Uman","CountryCode":"UKR","1":"UKR","Population":"90000","2":"90000"},{"Name":"Brovary","0":"Brovary","CountryCode":"UKR","1":"UKR","Population":"89000","2":"89000"},{"Name":"Mukat\u0161eve","0":"Mukat\u0161eve","CountryCode":"UKR","1":"UKR","Population":"89000","2":"89000"},{"Name":"Budapest","0":"Budapest","CountryCode":"HUN","1":"HUN","Population":"1811552","2":"1811552"},{"Name":"Debrecen","0":"Debrecen","CountryCode":"HUN","1":"HUN","Population":"203648","2":"203648"},{"Name":"Miskolc","0":"Miskolc","CountryCode":"HUN","1":"HUN","Population":"172357","2":"172357"},{"Name":"Szeged","0":"Szeged","CountryCode":"HUN","1":"HUN","Population":"158158","2":"158158"},{"Name":"P\u00e9cs","0":"P\u00e9cs","CountryCode":"HUN","1":"HUN","Population":"157332","2":"157332"},{"Name":"Gy\u00f6r","0":"Gy\u00f6r","CountryCode":"HUN","1":"HUN","Population":"127119","2":"127119"},{"Name":"Nyiregyh\u00e1za","0":"Nyiregyh\u00e1za","CountryCode":"HUN","1":"HUN","Population":"112419","2":"112419"},{"Name":"Kecskem\u00e9t","0":"Kecskem\u00e9t","CountryCode":"HUN","1":"HUN","Population":"105606","2":"105606"},{"Name":"Sz\u00e9kesfeh\u00e9rv\u00e1r","0":"Sz\u00e9kesfeh\u00e9rv\u00e1r","CountryCode":"HUN","1":"HUN","Population":"105119","2":"105119"},{"Name":"Montevideo","0":"Montevideo","CountryCode":"URY","1":"URY","Population":"1236000","2":"1236000"},{"Name":"Noum\u00e9a","0":"Noum\u00e9a","CountryCode":"NCL","1":"NCL","Population":"76293","2":"76293"},{"Name":"Auckland","0":"Auckland","CountryCode":"NZL","1":"NZL","Population":"381800","2":"381800"},{"Name":"Christchurch","0":"Christchurch","CountryCode":"NZL","1":"NZL","Population":"324200","2":"324200"},{"Name":"Manukau","0":"Manukau","CountryCode":"NZL","1":"NZL","Population":"281800","2":"281800"},{"Name":"North Shore","0":"North Shore","CountryCode":"NZL","1":"NZL","Population":"187700","2":"187700"},{"Name":"Waitakere","0":"Waitakere","CountryCode":"NZL","1":"NZL","Population":"170600","2":"170600"},{"Name":"Wellington","0":"Wellington","CountryCode":"NZL","1":"NZL","Population":"166700","2":"166700"},{"Name":"Dunedin","0":"Dunedin","CountryCode":"NZL","1":"NZL","Population":"119600","2":"119600"},{"Name":"Hamilton","0":"Hamilton","CountryCode":"NZL","1":"NZL","Population":"117100","2":"117100"},{"Name":"Lower Hutt","0":"Lower Hutt","CountryCode":"NZL","1":"NZL","Population":"98100","2":"98100"},{"Name":"Toskent","0":"Toskent","CountryCode":"UZB","1":"UZB","Population":"2117500","2":"2117500"},{"Name":"Namangan","0":"Namangan","CountryCode":"UZB","1":"UZB","Population":"370500","2":"370500"},{"Name":"Samarkand","0":"Samarkand","CountryCode":"UZB","1":"UZB","Population":"361800","2":"361800"},{"Name":"Andijon","0":"Andijon","CountryCode":"UZB","1":"UZB","Population":"318600","2":"318600"},{"Name":"Buhoro","0":"Buhoro","CountryCode":"UZB","1":"UZB","Population":"237100","2":"237100"},{"Name":"Karsi","0":"Karsi","CountryCode":"UZB","1":"UZB","Population":"194100","2":"194100"},{"Name":"Nukus","0":"Nukus","CountryCode":"UZB","1":"UZB","Population":"194100","2":"194100"},{"Name":"K\u00fckon","0":"K\u00fckon","CountryCode":"UZB","1":"UZB","Population":"190100","2":"190100"},{"Name":"Fargona","0":"Fargona","CountryCode":"UZB","1":"UZB","Population":"180500","2":"180500"},{"Name":"Circik","0":"Circik","CountryCode":"UZB","1":"UZB","Population":"146400","2":"146400"},{"Name":"Margilon","0":"Margilon","CountryCode":"UZB","1":"UZB","Population":"140800","2":"140800"},{"Name":"\u00dcrgenc","0":"\u00dcrgenc","CountryCode":"UZB","1":"UZB","Population":"138900","2":"138900"},{"Name":"Angren","0":"Angren","CountryCode":"UZB","1":"UZB","Population":"128000","2":"128000"},{"Name":"Cizah","0":"Cizah","CountryCode":"UZB","1":"UZB","Population":"124800","2":"124800"},{"Name":"Navoi","0":"Navoi","CountryCode":"UZB","1":"UZB","Population":"116300","2":"116300"},{"Name":"Olmalik","0":"Olmalik","CountryCode":"UZB","1":"UZB","Population":"114900","2":"114900"},{"Name":"Termiz","0":"Termiz","CountryCode":"UZB","1":"UZB","Population":"109500","2":"109500"},{"Name":"Minsk","0":"Minsk","CountryCode":"BLR","1":"BLR","Population":"1674000","2":"1674000"},{"Name":"Gomel","0":"Gomel","CountryCode":"BLR","1":"BLR","Population":"475000","2":"475000"},{"Name":"Mogiljov","0":"Mogiljov","CountryCode":"BLR","1":"BLR","Population":"356000","2":"356000"},{"Name":"Vitebsk","0":"Vitebsk","CountryCode":"BLR","1":"BLR","Population":"340000","2":"340000"},{"Name":"Grodno","0":"Grodno","CountryCode":"BLR","1":"BLR","Population":"302000","2":"302000"},{"Name":"Brest","0":"Brest","CountryCode":"BLR","1":"BLR","Population":"286000","2":"286000"},{"Name":"Bobruisk","0":"Bobruisk","CountryCode":"BLR","1":"BLR","Population":"221000","2":"221000"},{"Name":"Baranovit\u0161i","0":"Baranovit\u0161i","CountryCode":"BLR","1":"BLR","Population":"167000","2":"167000"},{"Name":"Borisov","0":"Borisov","CountryCode":"BLR","1":"BLR","Population":"151000","2":"151000"},{"Name":"Pinsk","0":"Pinsk","CountryCode":"BLR","1":"BLR","Population":"130000","2":"130000"},{"Name":"Or\u0161a","0":"Or\u0161a","CountryCode":"BLR","1":"BLR","Population":"124000","2":"124000"},{"Name":"Mozyr","0":"Mozyr","CountryCode":"BLR","1":"BLR","Population":"110000","2":"110000"},{"Name":"Novopolotsk","0":"Novopolotsk","CountryCode":"BLR","1":"BLR","Population":"106000","2":"106000"},{"Name":"Lida","0":"Lida","CountryCode":"BLR","1":"BLR","Population":"101000","2":"101000"},{"Name":"Soligorsk","0":"Soligorsk","CountryCode":"BLR","1":"BLR","Population":"101000","2":"101000"},{"Name":"Molodet\u0161no","0":"Molodet\u0161no","CountryCode":"BLR","1":"BLR","Population":"97000","2":"97000"},{"Name":"Mata-Utu","0":"Mata-Utu","CountryCode":"WLF","1":"WLF","Population":"1137","2":"1137"},{"Name":"Port-Vila","0":"Port-Vila","CountryCode":"VUT","1":"VUT","Population":"33700","2":"33700"},{"Name":"Citt\u00e0 del Vaticano","0":"Citt\u00e0 del Vaticano","CountryCode":"VAT","1":"VAT","Population":"455","2":"455"},{"Name":"Caracas","0":"Caracas","CountryCode":"VEN","1":"VEN","Population":"1975294","2":"1975294"},{"Name":"Maraca\u00edbo","0":"Maraca\u00edbo","CountryCode":"VEN","1":"VEN","Population":"1304776","2":"1304776"},{"Name":"Barquisimeto","0":"Barquisimeto","CountryCode":"VEN","1":"VEN","Population":"877239","2":"877239"},{"Name":"Valencia","0":"Valencia","CountryCode":"VEN","1":"VEN","Population":"794246","2":"794246"},{"Name":"Ciudad Guayana","0":"Ciudad Guayana","CountryCode":"VEN","1":"VEN","Population":"663713","2":"663713"},{"Name":"Petare","0":"Petare","CountryCode":"VEN","1":"VEN","Population":"488868","2":"488868"},{"Name":"Maracay","0":"Maracay","CountryCode":"VEN","1":"VEN","Population":"444443","2":"444443"},{"Name":"Barcelona","0":"Barcelona","CountryCode":"VEN","1":"VEN","Population":"322267","2":"322267"},{"Name":"Matur\u00edn","0":"Matur\u00edn","CountryCode":"VEN","1":"VEN","Population":"319726","2":"319726"},{"Name":"San Crist\u00f3bal","0":"San Crist\u00f3bal","CountryCode":"VEN","1":"VEN","Population":"319373","2":"319373"},{"Name":"Ciudad Bol\u00edvar","0":"Ciudad Bol\u00edvar","CountryCode":"VEN","1":"VEN","Population":"301107","2":"301107"},{"Name":"Cuman\u00e1","0":"Cuman\u00e1","CountryCode":"VEN","1":"VEN","Population":"293105","2":"293105"},{"Name":"M\u00e9rida","0":"M\u00e9rida","CountryCode":"VEN","1":"VEN","Population":"224887","2":"224887"},{"Name":"Cabimas","0":"Cabimas","CountryCode":"VEN","1":"VEN","Population":"221329","2":"221329"},{"Name":"Barinas","0":"Barinas","CountryCode":"VEN","1":"VEN","Population":"217831","2":"217831"},{"Name":"Turmero","0":"Turmero","CountryCode":"VEN","1":"VEN","Population":"217499","2":"217499"},{"Name":"Baruta","0":"Baruta","CountryCode":"VEN","1":"VEN","Population":"207290","2":"207290"},{"Name":"Puerto Cabello","0":"Puerto Cabello","CountryCode":"VEN","1":"VEN","Population":"187722","2":"187722"},{"Name":"Santa Ana de Coro","0":"Santa Ana de Coro","CountryCode":"VEN","1":"VEN","Population":"185766","2":"185766"},{"Name":"Los Teques","0":"Los Teques","CountryCode":"VEN","1":"VEN","Population":"178784","2":"178784"},{"Name":"Punto Fijo","0":"Punto Fijo","CountryCode":"VEN","1":"VEN","Population":"167215","2":"167215"},{"Name":"Guarenas","0":"Guarenas","CountryCode":"VEN","1":"VEN","Population":"165889","2":"165889"},{"Name":"Acarigua","0":"Acarigua","CountryCode":"VEN","1":"VEN","Population":"158954","2":"158954"},{"Name":"Puerto La Cruz","0":"Puerto La Cruz","CountryCode":"VEN","1":"VEN","Population":"155700","2":"155700"},{"Name":"Ciudad Losada","0":"Ciudad Losada","CountryCode":"VEN","1":"VEN","Population":"134501","2":"134501"},{"Name":"Guacara","0":"Guacara","CountryCode":"VEN","1":"VEN","Population":"131334","2":"131334"},{"Name":"Valera","0":"Valera","CountryCode":"VEN","1":"VEN","Population":"130281","2":"130281"},{"Name":"Guanare","0":"Guanare","CountryCode":"VEN","1":"VEN","Population":"125621","2":"125621"},{"Name":"Car\u00fapano","0":"Car\u00fapano","CountryCode":"VEN","1":"VEN","Population":"119639","2":"119639"},{"Name":"Catia La Mar","0":"Catia La Mar","CountryCode":"VEN","1":"VEN","Population":"117012","2":"117012"},{"Name":"El Tigre","0":"El Tigre","CountryCode":"VEN","1":"VEN","Population":"116256","2":"116256"},{"Name":"Guatire","0":"Guatire","CountryCode":"VEN","1":"VEN","Population":"109121","2":"109121"},{"Name":"Calabozo","0":"Calabozo","CountryCode":"VEN","1":"VEN","Population":"107146","2":"107146"},{"Name":"Pozuelos","0":"Pozuelos","CountryCode":"VEN","1":"VEN","Population":"105690","2":"105690"},{"Name":"Ciudad Ojeda","0":"Ciudad Ojeda","CountryCode":"VEN","1":"VEN","Population":"99354","2":"99354"},{"Name":"Ocumare del Tuy","0":"Ocumare del Tuy","CountryCode":"VEN","1":"VEN","Population":"97168","2":"97168"},{"Name":"Valle de la Pascua","0":"Valle de la Pascua","CountryCode":"VEN","1":"VEN","Population":"95927","2":"95927"},{"Name":"Araure","0":"Araure","CountryCode":"VEN","1":"VEN","Population":"94269","2":"94269"},{"Name":"San Fernando de Apure","0":"San Fernando de Apure","CountryCode":"VEN","1":"VEN","Population":"93809","2":"93809"},{"Name":"San Felipe","0":"San Felipe","CountryCode":"VEN","1":"VEN","Population":"90940","2":"90940"},{"Name":"El Lim\u00f3n","0":"El Lim\u00f3n","CountryCode":"VEN","1":"VEN","Population":"90000","2":"90000"},{"Name":"Moscow","0":"Moscow","CountryCode":"RUS","1":"RUS","Population":"8389200","2":"8389200"},{"Name":"St Petersburg","0":"St Petersburg","CountryCode":"RUS","1":"RUS","Population":"4694000","2":"4694000"},{"Name":"Novosibirsk","0":"Novosibirsk","CountryCode":"RUS","1":"RUS","Population":"1398800","2":"1398800"},{"Name":"Nizni Novgorod","0":"Nizni Novgorod","CountryCode":"RUS","1":"RUS","Population":"1357000","2":"1357000"},{"Name":"Jekaterinburg","0":"Jekaterinburg","CountryCode":"RUS","1":"RUS","Population":"1266300","2":"1266300"},{"Name":"Samara","0":"Samara","CountryCode":"RUS","1":"RUS","Population":"1156100","2":"1156100"},{"Name":"Omsk","0":"Omsk","CountryCode":"RUS","1":"RUS","Population":"1148900","2":"1148900"},{"Name":"Kazan","0":"Kazan","CountryCode":"RUS","1":"RUS","Population":"1101000","2":"1101000"},{"Name":"Ufa","0":"Ufa","CountryCode":"RUS","1":"RUS","Population":"1091200","2":"1091200"},{"Name":"T\u0161eljabinsk","0":"T\u0161eljabinsk","CountryCode":"RUS","1":"RUS","Population":"1083200","2":"1083200"},{"Name":"Rostov-na-Donu","0":"Rostov-na-Donu","CountryCode":"RUS","1":"RUS","Population":"1012700","2":"1012700"},{"Name":"Perm","0":"Perm","CountryCode":"RUS","1":"RUS","Population":"1009700","2":"1009700"},{"Name":"Volgograd","0":"Volgograd","CountryCode":"RUS","1":"RUS","Population":"993400","2":"993400"},{"Name":"Voronez","0":"Voronez","CountryCode":"RUS","1":"RUS","Population":"907700","2":"907700"},{"Name":"Krasnojarsk","0":"Krasnojarsk","CountryCode":"RUS","1":"RUS","Population":"875500","2":"875500"},{"Name":"Saratov","0":"Saratov","CountryCode":"RUS","1":"RUS","Population":"874000","2":"874000"},{"Name":"Toljatti","0":"Toljatti","CountryCode":"RUS","1":"RUS","Population":"722900","2":"722900"},{"Name":"Uljanovsk","0":"Uljanovsk","CountryCode":"RUS","1":"RUS","Population":"667400","2":"667400"},{"Name":"Izevsk","0":"Izevsk","CountryCode":"RUS","1":"RUS","Population":"652800","2":"652800"},{"Name":"Krasnodar","0":"Krasnodar","CountryCode":"RUS","1":"RUS","Population":"639000","2":"639000"},{"Name":"Jaroslavl","0":"Jaroslavl","CountryCode":"RUS","1":"RUS","Population":"616700","2":"616700"},{"Name":"Habarovsk","0":"Habarovsk","CountryCode":"RUS","1":"RUS","Population":"609400","2":"609400"},{"Name":"Vladivostok","0":"Vladivostok","CountryCode":"RUS","1":"RUS","Population":"606200","2":"606200"},{"Name":"Irkutsk","0":"Irkutsk","CountryCode":"RUS","1":"RUS","Population":"593700","2":"593700"},{"Name":"Barnaul","0":"Barnaul","CountryCode":"RUS","1":"RUS","Population":"580100","2":"580100"},{"Name":"Novokuznetsk","0":"Novokuznetsk","CountryCode":"RUS","1":"RUS","Population":"561600","2":"561600"},{"Name":"Penza","0":"Penza","CountryCode":"RUS","1":"RUS","Population":"532200","2":"532200"},{"Name":"Rjazan","0":"Rjazan","CountryCode":"RUS","1":"RUS","Population":"529900","2":"529900"},{"Name":"Orenburg","0":"Orenburg","CountryCode":"RUS","1":"RUS","Population":"523600","2":"523600"},{"Name":"Lipetsk","0":"Lipetsk","CountryCode":"RUS","1":"RUS","Population":"521000","2":"521000"},{"Name":"Nabereznyje T\u0161elny","0":"Nabereznyje T\u0161elny","CountryCode":"RUS","1":"RUS","Population":"514700","2":"514700"},{"Name":"Tula","0":"Tula","CountryCode":"RUS","1":"RUS","Population":"506100","2":"506100"},{"Name":"Tjumen","0":"Tjumen","CountryCode":"RUS","1":"RUS","Population":"503400","2":"503400"},{"Name":"Kemerovo","0":"Kemerovo","CountryCode":"RUS","1":"RUS","Population":"492700","2":"492700"},{"Name":"Astrahan","0":"Astrahan","CountryCode":"RUS","1":"RUS","Population":"486100","2":"486100"},{"Name":"Tomsk","0":"Tomsk","CountryCode":"RUS","1":"RUS","Population":"482100","2":"482100"},{"Name":"Kirov","0":"Kirov","CountryCode":"RUS","1":"RUS","Population":"466200","2":"466200"},{"Name":"Ivanovo","0":"Ivanovo","CountryCode":"RUS","1":"RUS","Population":"459200","2":"459200"},{"Name":"T\u0161eboksary","0":"T\u0161eboksary","CountryCode":"RUS","1":"RUS","Population":"459200","2":"459200"},{"Name":"Brjansk","0":"Brjansk","CountryCode":"RUS","1":"RUS","Population":"457400","2":"457400"},{"Name":"Tver","0":"Tver","CountryCode":"RUS","1":"RUS","Population":"454900","2":"454900"},{"Name":"Kursk","0":"Kursk","CountryCode":"RUS","1":"RUS","Population":"443500","2":"443500"},{"Name":"Magnitogorsk","0":"Magnitogorsk","CountryCode":"RUS","1":"RUS","Population":"427900","2":"427900"},{"Name":"Kaliningrad","0":"Kaliningrad","CountryCode":"RUS","1":"RUS","Population":"424400","2":"424400"},{"Name":"Nizni Tagil","0":"Nizni Tagil","CountryCode":"RUS","1":"RUS","Population":"390900","2":"390900"},{"Name":"Murmansk","0":"Murmansk","CountryCode":"RUS","1":"RUS","Population":"376300","2":"376300"},{"Name":"Ulan-Ude","0":"Ulan-Ude","CountryCode":"RUS","1":"RUS","Population":"370400","2":"370400"},{"Name":"Kurgan","0":"Kurgan","CountryCode":"RUS","1":"RUS","Population":"364700","2":"364700"},{"Name":"Arkangeli","0":"Arkangeli","CountryCode":"RUS","1":"RUS","Population":"361800","2":"361800"},{"Name":"Sot\u0161i","0":"Sot\u0161i","CountryCode":"RUS","1":"RUS","Population":"358600","2":"358600"},{"Name":"Smolensk","0":"Smolensk","CountryCode":"RUS","1":"RUS","Population":"353400","2":"353400"},{"Name":"Orjol","0":"Orjol","CountryCode":"RUS","1":"RUS","Population":"344500","2":"344500"},{"Name":"Stavropol","0":"Stavropol","CountryCode":"RUS","1":"RUS","Population":"343300","2":"343300"},{"Name":"Belgorod","0":"Belgorod","CountryCode":"RUS","1":"RUS","Population":"342000","2":"342000"},{"Name":"Kaluga","0":"Kaluga","CountryCode":"RUS","1":"RUS","Population":"339300","2":"339300"},{"Name":"Vladimir","0":"Vladimir","CountryCode":"RUS","1":"RUS","Population":"337100","2":"337100"},{"Name":"Mahat\u0161kala","0":"Mahat\u0161kala","CountryCode":"RUS","1":"RUS","Population":"332800","2":"332800"},{"Name":"T\u0161erepovets","0":"T\u0161erepovets","CountryCode":"RUS","1":"RUS","Population":"324400","2":"324400"},{"Name":"Saransk","0":"Saransk","CountryCode":"RUS","1":"RUS","Population":"314800","2":"314800"},{"Name":"Tambov","0":"Tambov","CountryCode":"RUS","1":"RUS","Population":"312000","2":"312000"},{"Name":"Vladikavkaz","0":"Vladikavkaz","CountryCode":"RUS","1":"RUS","Population":"310100","2":"310100"},{"Name":"T\u0161ita","0":"T\u0161ita","CountryCode":"RUS","1":"RUS","Population":"309900","2":"309900"},{"Name":"Vologda","0":"Vologda","CountryCode":"RUS","1":"RUS","Population":"302500","2":"302500"},{"Name":"Veliki Novgorod","0":"Veliki Novgorod","CountryCode":"RUS","1":"RUS","Population":"299500","2":"299500"},{"Name":"Komsomolsk-na-Amure","0":"Komsomolsk-na-Amure","CountryCode":"RUS","1":"RUS","Population":"291600","2":"291600"},{"Name":"Kostroma","0":"Kostroma","CountryCode":"RUS","1":"RUS","Population":"288100","2":"288100"},{"Name":"Volzski","0":"Volzski","CountryCode":"RUS","1":"RUS","Population":"286900","2":"286900"},{"Name":"Taganrog","0":"Taganrog","CountryCode":"RUS","1":"RUS","Population":"284400","2":"284400"},{"Name":"Petroskoi","0":"Petroskoi","CountryCode":"RUS","1":"RUS","Population":"282100","2":"282100"},{"Name":"Bratsk","0":"Bratsk","CountryCode":"RUS","1":"RUS","Population":"277600","2":"277600"},{"Name":"Dzerzinsk","0":"Dzerzinsk","CountryCode":"RUS","1":"RUS","Population":"277100","2":"277100"},{"Name":"Surgut","0":"Surgut","CountryCode":"RUS","1":"RUS","Population":"274900","2":"274900"},{"Name":"Orsk","0":"Orsk","CountryCode":"RUS","1":"RUS","Population":"273900","2":"273900"},{"Name":"Sterlitamak","0":"Sterlitamak","CountryCode":"RUS","1":"RUS","Population":"265200","2":"265200"},{"Name":"Angarsk","0":"Angarsk","CountryCode":"RUS","1":"RUS","Population":"264700","2":"264700"},{"Name":"Jo\u0161kar-Ola","0":"Jo\u0161kar-Ola","CountryCode":"RUS","1":"RUS","Population":"249200","2":"249200"},{"Name":"Rybinsk","0":"Rybinsk","CountryCode":"RUS","1":"RUS","Population":"239600","2":"239600"},{"Name":"Prokopjevsk","0":"Prokopjevsk","CountryCode":"RUS","1":"RUS","Population":"237300","2":"237300"},{"Name":"Niznevartovsk","0":"Niznevartovsk","CountryCode":"RUS","1":"RUS","Population":"233900","2":"233900"},{"Name":"Nalt\u0161ik","0":"Nalt\u0161ik","CountryCode":"RUS","1":"RUS","Population":"233400","2":"233400"},{"Name":"Syktyvkar","0":"Syktyvkar","CountryCode":"RUS","1":"RUS","Population":"229700","2":"229700"},{"Name":"Severodvinsk","0":"Severodvinsk","CountryCode":"RUS","1":"RUS","Population":"229300","2":"229300"},{"Name":"Bijsk","0":"Bijsk","CountryCode":"RUS","1":"RUS","Population":"225000","2":"225000"},{"Name":"Niznekamsk","0":"Niznekamsk","CountryCode":"RUS","1":"RUS","Population":"223400","2":"223400"},{"Name":"Blagove\u0161t\u0161ensk","0":"Blagove\u0161t\u0161ensk","CountryCode":"RUS","1":"RUS","Population":"222000","2":"222000"},{"Name":"\u0160ahty","0":"\u0160ahty","CountryCode":"RUS","1":"RUS","Population":"221800","2":"221800"},{"Name":"Staryi Oskol","0":"Staryi Oskol","CountryCode":"RUS","1":"RUS","Population":"213800","2":"213800"},{"Name":"Zelenograd","0":"Zelenograd","CountryCode":"RUS","1":"RUS","Population":"207100","2":"207100"},{"Name":"Balakovo","0":"Balakovo","CountryCode":"RUS","1":"RUS","Population":"206000","2":"206000"},{"Name":"Novorossijsk","0":"Novorossijsk","CountryCode":"RUS","1":"RUS","Population":"203300","2":"203300"},{"Name":"Pihkova","0":"Pihkova","CountryCode":"RUS","1":"RUS","Population":"201500","2":"201500"},{"Name":"Zlatoust","0":"Zlatoust","CountryCode":"RUS","1":"RUS","Population":"196900","2":"196900"},{"Name":"Jakutsk","0":"Jakutsk","CountryCode":"RUS","1":"RUS","Population":"195400","2":"195400"},{"Name":"Podolsk","0":"Podolsk","CountryCode":"RUS","1":"RUS","Population":"194300","2":"194300"},{"Name":"Petropavlovsk-Kamt\u0161atski","0":"Petropavlovsk-Kamt\u0161atski","CountryCode":"RUS","1":"RUS","Population":"194100","2":"194100"},{"Name":"Kamensk-Uralski","0":"Kamensk-Uralski","CountryCode":"RUS","1":"RUS","Population":"190600","2":"190600"},{"Name":"Engels","0":"Engels","CountryCode":"RUS","1":"RUS","Population":"189000","2":"189000"},{"Name":"Syzran","0":"Syzran","CountryCode":"RUS","1":"RUS","Population":"186900","2":"186900"},{"Name":"Grozny","0":"Grozny","CountryCode":"RUS","1":"RUS","Population":"186000","2":"186000"},{"Name":"Novot\u0161erkassk","0":"Novot\u0161erkassk","CountryCode":"RUS","1":"RUS","Population":"184400","2":"184400"},{"Name":"Berezniki","0":"Berezniki","CountryCode":"RUS","1":"RUS","Population":"181900","2":"181900"},{"Name":"Juzno-Sahalinsk","0":"Juzno-Sahalinsk","CountryCode":"RUS","1":"RUS","Population":"179200","2":"179200"},{"Name":"Volgodonsk","0":"Volgodonsk","CountryCode":"RUS","1":"RUS","Population":"178200","2":"178200"},{"Name":"Abakan","0":"Abakan","CountryCode":"RUS","1":"RUS","Population":"169200","2":"169200"},{"Name":"Maikop","0":"Maikop","CountryCode":"RUS","1":"RUS","Population":"167300","2":"167300"},{"Name":"Miass","0":"Miass","CountryCode":"RUS","1":"RUS","Population":"166200","2":"166200"},{"Name":"Armavir","0":"Armavir","CountryCode":"RUS","1":"RUS","Population":"164900","2":"164900"},{"Name":"Ljubertsy","0":"Ljubertsy","CountryCode":"RUS","1":"RUS","Population":"163900","2":"163900"},{"Name":"Rubtsovsk","0":"Rubtsovsk","CountryCode":"RUS","1":"RUS","Population":"162600","2":"162600"},{"Name":"Kovrov","0":"Kovrov","CountryCode":"RUS","1":"RUS","Population":"159900","2":"159900"},{"Name":"Nahodka","0":"Nahodka","CountryCode":"RUS","1":"RUS","Population":"157700","2":"157700"},{"Name":"Ussurijsk","0":"Ussurijsk","CountryCode":"RUS","1":"RUS","Population":"157300","2":"157300"},{"Name":"Salavat","0":"Salavat","CountryCode":"RUS","1":"RUS","Population":"156800","2":"156800"},{"Name":"Myti\u0161t\u0161i","0":"Myti\u0161t\u0161i","CountryCode":"RUS","1":"RUS","Population":"155700","2":"155700"},{"Name":"Kolomna","0":"Kolomna","CountryCode":"RUS","1":"RUS","Population":"150700","2":"150700"},{"Name":"Elektrostal","0":"Elektrostal","CountryCode":"RUS","1":"RUS","Population":"147000","2":"147000"},{"Name":"Murom","0":"Murom","CountryCode":"RUS","1":"RUS","Population":"142400","2":"142400"},{"Name":"Kolpino","0":"Kolpino","CountryCode":"RUS","1":"RUS","Population":"141200","2":"141200"},{"Name":"Norilsk","0":"Norilsk","CountryCode":"RUS","1":"RUS","Population":"140800","2":"140800"},{"Name":"Almetjevsk","0":"Almetjevsk","CountryCode":"RUS","1":"RUS","Population":"140700","2":"140700"},{"Name":"Novomoskovsk","0":"Novomoskovsk","CountryCode":"RUS","1":"RUS","Population":"138100","2":"138100"},{"Name":"Dimitrovgrad","0":"Dimitrovgrad","CountryCode":"RUS","1":"RUS","Population":"137000","2":"137000"},{"Name":"Pervouralsk","0":"Pervouralsk","CountryCode":"RUS","1":"RUS","Population":"136100","2":"136100"},{"Name":"Himki","0":"Himki","CountryCode":"RUS","1":"RUS","Population":"133700","2":"133700"},{"Name":"Bala\u0161iha","0":"Bala\u0161iha","CountryCode":"RUS","1":"RUS","Population":"132900","2":"132900"},{"Name":"Nevinnomyssk","0":"Nevinnomyssk","CountryCode":"RUS","1":"RUS","Population":"132600","2":"132600"},{"Name":"Pjatigorsk","0":"Pjatigorsk","CountryCode":"RUS","1":"RUS","Population":"132500","2":"132500"},{"Name":"Korolev","0":"Korolev","CountryCode":"RUS","1":"RUS","Population":"132400","2":"132400"},{"Name":"Serpuhov","0":"Serpuhov","CountryCode":"RUS","1":"RUS","Population":"132000","2":"132000"},{"Name":"Odintsovo","0":"Odintsovo","CountryCode":"RUS","1":"RUS","Population":"127400","2":"127400"},{"Name":"Orehovo-Zujevo","0":"Orehovo-Zujevo","CountryCode":"RUS","1":"RUS","Population":"124900","2":"124900"},{"Name":"Kamy\u0161in","0":"Kamy\u0161in","CountryCode":"RUS","1":"RUS","Population":"124600","2":"124600"},{"Name":"Novot\u0161eboksarsk","0":"Novot\u0161eboksarsk","CountryCode":"RUS","1":"RUS","Population":"123400","2":"123400"},{"Name":"T\u0161erkessk","0":"T\u0161erkessk","CountryCode":"RUS","1":"RUS","Population":"121700","2":"121700"},{"Name":"At\u0161insk","0":"At\u0161insk","CountryCode":"RUS","1":"RUS","Population":"121600","2":"121600"},{"Name":"Magadan","0":"Magadan","CountryCode":"RUS","1":"RUS","Population":"121000","2":"121000"},{"Name":"Mit\u0161urinsk","0":"Mit\u0161urinsk","CountryCode":"RUS","1":"RUS","Population":"120700","2":"120700"},{"Name":"Kislovodsk","0":"Kislovodsk","CountryCode":"RUS","1":"RUS","Population":"120400","2":"120400"},{"Name":"Jelets","0":"Jelets","CountryCode":"RUS","1":"RUS","Population":"119400","2":"119400"},{"Name":"Seversk","0":"Seversk","CountryCode":"RUS","1":"RUS","Population":"118600","2":"118600"},{"Name":"Noginsk","0":"Noginsk","CountryCode":"RUS","1":"RUS","Population":"117200","2":"117200"},{"Name":"Velikije Luki","0":"Velikije Luki","CountryCode":"RUS","1":"RUS","Population":"116300","2":"116300"},{"Name":"Novokuiby\u0161evsk","0":"Novokuiby\u0161evsk","CountryCode":"RUS","1":"RUS","Population":"116200","2":"116200"},{"Name":"Neftekamsk","0":"Neftekamsk","CountryCode":"RUS","1":"RUS","Population":"115700","2":"115700"},{"Name":"Leninsk-Kuznetski","0":"Leninsk-Kuznetski","CountryCode":"RUS","1":"RUS","Population":"113800","2":"113800"},{"Name":"Oktjabrski","0":"Oktjabrski","CountryCode":"RUS","1":"RUS","Population":"111500","2":"111500"},{"Name":"Sergijev Posad","0":"Sergijev Posad","CountryCode":"RUS","1":"RUS","Population":"111100","2":"111100"},{"Name":"Arzamas","0":"Arzamas","CountryCode":"RUS","1":"RUS","Population":"110700","2":"110700"},{"Name":"Kiseljovsk","0":"Kiseljovsk","CountryCode":"RUS","1":"RUS","Population":"110000","2":"110000"},{"Name":"Novotroitsk","0":"Novotroitsk","CountryCode":"RUS","1":"RUS","Population":"109600","2":"109600"},{"Name":"Obninsk","0":"Obninsk","CountryCode":"RUS","1":"RUS","Population":"108300","2":"108300"},{"Name":"Kansk","0":"Kansk","CountryCode":"RUS","1":"RUS","Population":"107400","2":"107400"},{"Name":"Glazov","0":"Glazov","CountryCode":"RUS","1":"RUS","Population":"106300","2":"106300"},{"Name":"Solikamsk","0":"Solikamsk","CountryCode":"RUS","1":"RUS","Population":"106000","2":"106000"},{"Name":"Sarapul","0":"Sarapul","CountryCode":"RUS","1":"RUS","Population":"105700","2":"105700"},{"Name":"Ust-Ilimsk","0":"Ust-Ilimsk","CountryCode":"RUS","1":"RUS","Population":"105200","2":"105200"},{"Name":"\u0160t\u0161olkovo","0":"\u0160t\u0161olkovo","CountryCode":"RUS","1":"RUS","Population":"104900","2":"104900"},{"Name":"Mezduret\u0161ensk","0":"Mezduret\u0161ensk","CountryCode":"RUS","1":"RUS","Population":"104400","2":"104400"},{"Name":"Usolje-Sibirskoje","0":"Usolje-Sibirskoje","CountryCode":"RUS","1":"RUS","Population":"103500","2":"103500"},{"Name":"Elista","0":"Elista","CountryCode":"RUS","1":"RUS","Population":"103300","2":"103300"},{"Name":"Novo\u0161ahtinsk","0":"Novo\u0161ahtinsk","CountryCode":"RUS","1":"RUS","Population":"101900","2":"101900"},{"Name":"Votkinsk","0":"Votkinsk","CountryCode":"RUS","1":"RUS","Population":"101700","2":"101700"},{"Name":"Kyzyl","0":"Kyzyl","CountryCode":"RUS","1":"RUS","Population":"101100","2":"101100"},{"Name":"Serov","0":"Serov","CountryCode":"RUS","1":"RUS","Population":"100400","2":"100400"},{"Name":"Zelenodolsk","0":"Zelenodolsk","CountryCode":"RUS","1":"RUS","Population":"100200","2":"100200"},{"Name":"Zeleznodoroznyi","0":"Zeleznodoroznyi","CountryCode":"RUS","1":"RUS","Population":"100100","2":"100100"},{"Name":"Kine\u0161ma","0":"Kine\u0161ma","CountryCode":"RUS","1":"RUS","Population":"100000","2":"100000"},{"Name":"Kuznetsk","0":"Kuznetsk","CountryCode":"RUS","1":"RUS","Population":"98200","2":"98200"},{"Name":"Uhta","0":"Uhta","CountryCode":"RUS","1":"RUS","Population":"98000","2":"98000"},{"Name":"Jessentuki","0":"Jessentuki","CountryCode":"RUS","1":"RUS","Population":"97900","2":"97900"},{"Name":"Tobolsk","0":"Tobolsk","CountryCode":"RUS","1":"RUS","Population":"97600","2":"97600"},{"Name":"Neftejugansk","0":"Neftejugansk","CountryCode":"RUS","1":"RUS","Population":"97400","2":"97400"},{"Name":"Bataisk","0":"Bataisk","CountryCode":"RUS","1":"RUS","Population":"97300","2":"97300"},{"Name":"Nojabrsk","0":"Nojabrsk","CountryCode":"RUS","1":"RUS","Population":"97300","2":"97300"},{"Name":"Bala\u0161ov","0":"Bala\u0161ov","CountryCode":"RUS","1":"RUS","Population":"97100","2":"97100"},{"Name":"Zeleznogorsk","0":"Zeleznogorsk","CountryCode":"RUS","1":"RUS","Population":"96900","2":"96900"},{"Name":"Zukovski","0":"Zukovski","CountryCode":"RUS","1":"RUS","Population":"96500","2":"96500"},{"Name":"Anzero-Sudzensk","0":"Anzero-Sudzensk","CountryCode":"RUS","1":"RUS","Population":"96100","2":"96100"},{"Name":"Bugulma","0":"Bugulma","CountryCode":"RUS","1":"RUS","Population":"94100","2":"94100"},{"Name":"Zeleznogorsk","0":"Zeleznogorsk","CountryCode":"RUS","1":"RUS","Population":"94000","2":"94000"},{"Name":"Novouralsk","0":"Novouralsk","CountryCode":"RUS","1":"RUS","Population":"93300","2":"93300"},{"Name":"Pu\u0161kin","0":"Pu\u0161kin","CountryCode":"RUS","1":"RUS","Population":"92900","2":"92900"},{"Name":"Vorkuta","0":"Vorkuta","CountryCode":"RUS","1":"RUS","Population":"92600","2":"92600"},{"Name":"Derbent","0":"Derbent","CountryCode":"RUS","1":"RUS","Population":"92300","2":"92300"},{"Name":"Kirovo-T\u0161epetsk","0":"Kirovo-T\u0161epetsk","CountryCode":"RUS","1":"RUS","Population":"91600","2":"91600"},{"Name":"Krasnogorsk","0":"Krasnogorsk","CountryCode":"RUS","1":"RUS","Population":"91000","2":"91000"},{"Name":"Klin","0":"Klin","CountryCode":"RUS","1":"RUS","Population":"90000","2":"90000"},{"Name":"T\u0161aikovski","0":"T\u0161aikovski","CountryCode":"RUS","1":"RUS","Population":"90000","2":"90000"},{"Name":"Novyi Urengoi","0":"Novyi Urengoi","CountryCode":"RUS","1":"RUS","Population":"89800","2":"89800"},{"Name":"Ho Chi Minh City","0":"Ho Chi Minh City","CountryCode":"VNM","1":"VNM","Population":"3980000","2":"3980000"},{"Name":"Hanoi","0":"Hanoi","CountryCode":"VNM","1":"VNM","Population":"1410000","2":"1410000"},{"Name":"Haiphong","0":"Haiphong","CountryCode":"VNM","1":"VNM","Population":"783133","2":"783133"},{"Name":"Da Nang","0":"Da Nang","CountryCode":"VNM","1":"VNM","Population":"382674","2":"382674"},{"Name":"Bi\u00ean Hoa","0":"Bi\u00ean Hoa","CountryCode":"VNM","1":"VNM","Population":"282095","2":"282095"},{"Name":"Nha Trang","0":"Nha Trang","CountryCode":"VNM","1":"VNM","Population":"221331","2":"221331"},{"Name":"Hue","0":"Hue","CountryCode":"VNM","1":"VNM","Population":"219149","2":"219149"},{"Name":"Can Tho","0":"Can Tho","CountryCode":"VNM","1":"VNM","Population":"215587","2":"215587"},{"Name":"Cam Pha","0":"Cam Pha","CountryCode":"VNM","1":"VNM","Population":"209086","2":"209086"},{"Name":"Nam Dinh","0":"Nam Dinh","CountryCode":"VNM","1":"VNM","Population":"171699","2":"171699"},{"Name":"Quy Nhon","0":"Quy Nhon","CountryCode":"VNM","1":"VNM","Population":"163385","2":"163385"},{"Name":"Vung Tau","0":"Vung Tau","CountryCode":"VNM","1":"VNM","Population":"145145","2":"145145"},{"Name":"Rach Gia","0":"Rach Gia","CountryCode":"VNM","1":"VNM","Population":"141132","2":"141132"},{"Name":"Long Xuyen","0":"Long Xuyen","CountryCode":"VNM","1":"VNM","Population":"132681","2":"132681"},{"Name":"Thai Nguyen","0":"Thai Nguyen","CountryCode":"VNM","1":"VNM","Population":"127643","2":"127643"},{"Name":"Hong Gai","0":"Hong Gai","CountryCode":"VNM","1":"VNM","Population":"127484","2":"127484"},{"Name":"Phan Thi\u00eat","0":"Phan Thi\u00eat","CountryCode":"VNM","1":"VNM","Population":"114236","2":"114236"},{"Name":"Cam Ranh","0":"Cam Ranh","CountryCode":"VNM","1":"VNM","Population":"114041","2":"114041"},{"Name":"Vinh","0":"Vinh","CountryCode":"VNM","1":"VNM","Population":"112455","2":"112455"},{"Name":"My Tho","0":"My Tho","CountryCode":"VNM","1":"VNM","Population":"108404","2":"108404"},{"Name":"Da Lat","0":"Da Lat","CountryCode":"VNM","1":"VNM","Population":"106409","2":"106409"},{"Name":"Buon Ma Thuot","0":"Buon Ma Thuot","CountryCode":"VNM","1":"VNM","Population":"97044","2":"97044"},{"Name":"Tallinn","0":"Tallinn","CountryCode":"EST","1":"EST","Population":"403981","2":"403981"},{"Name":"Tartu","0":"Tartu","CountryCode":"EST","1":"EST","Population":"101246","2":"101246"},{"Name":"New York","0":"New York","CountryCode":"USA","1":"USA","Population":"8008278","2":"8008278"},{"Name":"Los Angeles","0":"Los Angeles","CountryCode":"USA","1":"USA","Population":"3694820","2":"3694820"},{"Name":"Chicago","0":"Chicago","CountryCode":"USA","1":"USA","Population":"2896016","2":"2896016"},{"Name":"Houston","0":"Houston","CountryCode":"USA","1":"USA","Population":"1953631","2":"1953631"},{"Name":"Philadelphia","0":"Philadelphia","CountryCode":"USA","1":"USA","Population":"1517550","2":"1517550"},{"Name":"Phoenix","0":"Phoenix","CountryCode":"USA","1":"USA","Population":"1321045","2":"1321045"},{"Name":"San Diego","0":"San Diego","CountryCode":"USA","1":"USA","Population":"1223400","2":"1223400"},{"Name":"Dallas","0":"Dallas","CountryCode":"USA","1":"USA","Population":"1188580","2":"1188580"},{"Name":"San Antonio","0":"San Antonio","CountryCode":"USA","1":"USA","Population":"1144646","2":"1144646"},{"Name":"Detroit","0":"Detroit","CountryCode":"USA","1":"USA","Population":"951270","2":"951270"},{"Name":"San Jose","0":"San Jose","CountryCode":"USA","1":"USA","Population":"894943","2":"894943"},{"Name":"Indianapolis","0":"Indianapolis","CountryCode":"USA","1":"USA","Population":"791926","2":"791926"},{"Name":"San Francisco","0":"San Francisco","CountryCode":"USA","1":"USA","Population":"776733","2":"776733"},{"Name":"Jacksonville","0":"Jacksonville","CountryCode":"USA","1":"USA","Population":"735167","2":"735167"},{"Name":"Columbus","0":"Columbus","CountryCode":"USA","1":"USA","Population":"711470","2":"711470"},{"Name":"Austin","0":"Austin","CountryCode":"USA","1":"USA","Population":"656562","2":"656562"},{"Name":"Baltimore","0":"Baltimore","CountryCode":"USA","1":"USA","Population":"651154","2":"651154"},{"Name":"Memphis","0":"Memphis","CountryCode":"USA","1":"USA","Population":"650100","2":"650100"},{"Name":"Milwaukee","0":"Milwaukee","CountryCode":"USA","1":"USA","Population":"596974","2":"596974"},{"Name":"Boston","0":"Boston","CountryCode":"USA","1":"USA","Population":"589141","2":"589141"},{"Name":"Washington","0":"Washington","CountryCode":"USA","1":"USA","Population":"572059","2":"572059"},{"Name":"Nashville-Davidson","0":"Nashville-Davidson","CountryCode":"USA","1":"USA","Population":"569891","2":"569891"},{"Name":"El Paso","0":"El Paso","CountryCode":"USA","1":"USA","Population":"563662","2":"563662"},{"Name":"Seattle","0":"Seattle","CountryCode":"USA","1":"USA","Population":"563374","2":"563374"},{"Name":"Denver","0":"Denver","CountryCode":"USA","1":"USA","Population":"554636","2":"554636"},{"Name":"Charlotte","0":"Charlotte","CountryCode":"USA","1":"USA","Population":"540828","2":"540828"},{"Name":"Fort Worth","0":"Fort Worth","CountryCode":"USA","1":"USA","Population":"534694","2":"534694"},{"Name":"Portland","0":"Portland","CountryCode":"USA","1":"USA","Population":"529121","2":"529121"},{"Name":"Oklahoma City","0":"Oklahoma City","CountryCode":"USA","1":"USA","Population":"506132","2":"506132"},{"Name":"Tucson","0":"Tucson","CountryCode":"USA","1":"USA","Population":"486699","2":"486699"},{"Name":"New Orleans","0":"New Orleans","CountryCode":"USA","1":"USA","Population":"484674","2":"484674"},{"Name":"Las Vegas","0":"Las Vegas","CountryCode":"USA","1":"USA","Population":"478434","2":"478434"},{"Name":"Cleveland","0":"Cleveland","CountryCode":"USA","1":"USA","Population":"478403","2":"478403"},{"Name":"Long Beach","0":"Long Beach","CountryCode":"USA","1":"USA","Population":"461522","2":"461522"},{"Name":"Albuquerque","0":"Albuquerque","CountryCode":"USA","1":"USA","Population":"448607","2":"448607"},{"Name":"Kansas City","0":"Kansas City","CountryCode":"USA","1":"USA","Population":"441545","2":"441545"},{"Name":"Fresno","0":"Fresno","CountryCode":"USA","1":"USA","Population":"427652","2":"427652"},{"Name":"Virginia Beach","0":"Virginia Beach","CountryCode":"USA","1":"USA","Population":"425257","2":"425257"},{"Name":"Atlanta","0":"Atlanta","CountryCode":"USA","1":"USA","Population":"416474","2":"416474"},{"Name":"Sacramento","0":"Sacramento","CountryCode":"USA","1":"USA","Population":"407018","2":"407018"},{"Name":"Oakland","0":"Oakland","CountryCode":"USA","1":"USA","Population":"399484","2":"399484"},{"Name":"Mesa","0":"Mesa","CountryCode":"USA","1":"USA","Population":"396375","2":"396375"},{"Name":"Tulsa","0":"Tulsa","CountryCode":"USA","1":"USA","Population":"393049","2":"393049"},{"Name":"Omaha","0":"Omaha","CountryCode":"USA","1":"USA","Population":"390007","2":"390007"},{"Name":"Minneapolis","0":"Minneapolis","CountryCode":"USA","1":"USA","Population":"382618","2":"382618"},{"Name":"Honolulu","0":"Honolulu","CountryCode":"USA","1":"USA","Population":"371657","2":"371657"},{"Name":"Miami","0":"Miami","CountryCode":"USA","1":"USA","Population":"362470","2":"362470"},{"Name":"Colorado Springs","0":"Colorado Springs","CountryCode":"USA","1":"USA","Population":"360890","2":"360890"},{"Name":"Saint Louis","0":"Saint Louis","CountryCode":"USA","1":"USA","Population":"348189","2":"348189"},{"Name":"Wichita","0":"Wichita","CountryCode":"USA","1":"USA","Population":"344284","2":"344284"},{"Name":"Santa Ana","0":"Santa Ana","CountryCode":"USA","1":"USA","Population":"337977","2":"337977"},{"Name":"Pittsburgh","0":"Pittsburgh","CountryCode":"USA","1":"USA","Population":"334563","2":"334563"},{"Name":"Arlington","0":"Arlington","CountryCode":"USA","1":"USA","Population":"332969","2":"332969"},{"Name":"Cincinnati","0":"Cincinnati","CountryCode":"USA","1":"USA","Population":"331285","2":"331285"},{"Name":"Anaheim","0":"Anaheim","CountryCode":"USA","1":"USA","Population":"328014","2":"328014"},{"Name":"Toledo","0":"Toledo","CountryCode":"USA","1":"USA","Population":"313619","2":"313619"},{"Name":"Tampa","0":"Tampa","CountryCode":"USA","1":"USA","Population":"303447","2":"303447"},{"Name":"Buffalo","0":"Buffalo","CountryCode":"USA","1":"USA","Population":"292648","2":"292648"},{"Name":"Saint Paul","0":"Saint Paul","CountryCode":"USA","1":"USA","Population":"287151","2":"287151"},{"Name":"Corpus Christi","0":"Corpus Christi","CountryCode":"USA","1":"USA","Population":"277454","2":"277454"},{"Name":"Aurora","0":"Aurora","CountryCode":"USA","1":"USA","Population":"276393","2":"276393"},{"Name":"Raleigh","0":"Raleigh","CountryCode":"USA","1":"USA","Population":"276093","2":"276093"},{"Name":"Newark","0":"Newark","CountryCode":"USA","1":"USA","Population":"273546","2":"273546"},{"Name":"Lexington-Fayette","0":"Lexington-Fayette","CountryCode":"USA","1":"USA","Population":"260512","2":"260512"},{"Name":"Anchorage","0":"Anchorage","CountryCode":"USA","1":"USA","Population":"260283","2":"260283"},{"Name":"Louisville","0":"Louisville","CountryCode":"USA","1":"USA","Population":"256231","2":"256231"},{"Name":"Riverside","0":"Riverside","CountryCode":"USA","1":"USA","Population":"255166","2":"255166"},{"Name":"Saint Petersburg","0":"Saint Petersburg","CountryCode":"USA","1":"USA","Population":"248232","2":"248232"},{"Name":"Bakersfield","0":"Bakersfield","CountryCode":"USA","1":"USA","Population":"247057","2":"247057"},{"Name":"Stockton","0":"Stockton","CountryCode":"USA","1":"USA","Population":"243771","2":"243771"},{"Name":"Birmingham","0":"Birmingham","CountryCode":"USA","1":"USA","Population":"242820","2":"242820"},{"Name":"Jersey City","0":"Jersey City","CountryCode":"USA","1":"USA","Population":"240055","2":"240055"},{"Name":"Norfolk","0":"Norfolk","CountryCode":"USA","1":"USA","Population":"234403","2":"234403"},{"Name":"Baton Rouge","0":"Baton Rouge","CountryCode":"USA","1":"USA","Population":"227818","2":"227818"},{"Name":"Hialeah","0":"Hialeah","CountryCode":"USA","1":"USA","Population":"226419","2":"226419"},{"Name":"Lincoln","0":"Lincoln","CountryCode":"USA","1":"USA","Population":"225581","2":"225581"},{"Name":"Greensboro","0":"Greensboro","CountryCode":"USA","1":"USA","Population":"223891","2":"223891"},{"Name":"Plano","0":"Plano","CountryCode":"USA","1":"USA","Population":"222030","2":"222030"},{"Name":"Rochester","0":"Rochester","CountryCode":"USA","1":"USA","Population":"219773","2":"219773"},{"Name":"Glendale","0":"Glendale","CountryCode":"USA","1":"USA","Population":"218812","2":"218812"},{"Name":"Akron","0":"Akron","CountryCode":"USA","1":"USA","Population":"217074","2":"217074"},{"Name":"Garland","0":"Garland","CountryCode":"USA","1":"USA","Population":"215768","2":"215768"},{"Name":"Madison","0":"Madison","CountryCode":"USA","1":"USA","Population":"208054","2":"208054"},{"Name":"Fort Wayne","0":"Fort Wayne","CountryCode":"USA","1":"USA","Population":"205727","2":"205727"},{"Name":"Fremont","0":"Fremont","CountryCode":"USA","1":"USA","Population":"203413","2":"203413"},{"Name":"Scottsdale","0":"Scottsdale","CountryCode":"USA","1":"USA","Population":"202705","2":"202705"},{"Name":"Montgomery","0":"Montgomery","CountryCode":"USA","1":"USA","Population":"201568","2":"201568"},{"Name":"Shreveport","0":"Shreveport","CountryCode":"USA","1":"USA","Population":"200145","2":"200145"},{"Name":"Augusta-Richmond County","0":"Augusta-Richmond County","CountryCode":"USA","1":"USA","Population":"199775","2":"199775"},{"Name":"Lubbock","0":"Lubbock","CountryCode":"USA","1":"USA","Population":"199564","2":"199564"},{"Name":"Chesapeake","0":"Chesapeake","CountryCode":"USA","1":"USA","Population":"199184","2":"199184"},{"Name":"Mobile","0":"Mobile","CountryCode":"USA","1":"USA","Population":"198915","2":"198915"},{"Name":"Des Moines","0":"Des Moines","CountryCode":"USA","1":"USA","Population":"198682","2":"198682"},{"Name":"Grand Rapids","0":"Grand Rapids","CountryCode":"USA","1":"USA","Population":"197800","2":"197800"},{"Name":"Richmond","0":"Richmond","CountryCode":"USA","1":"USA","Population":"197790","2":"197790"},{"Name":"Yonkers","0":"Yonkers","CountryCode":"USA","1":"USA","Population":"196086","2":"196086"},{"Name":"Spokane","0":"Spokane","CountryCode":"USA","1":"USA","Population":"195629","2":"195629"},{"Name":"Glendale","0":"Glendale","CountryCode":"USA","1":"USA","Population":"194973","2":"194973"},{"Name":"Tacoma","0":"Tacoma","CountryCode":"USA","1":"USA","Population":"193556","2":"193556"},{"Name":"Irving","0":"Irving","CountryCode":"USA","1":"USA","Population":"191615","2":"191615"},{"Name":"Huntington Beach","0":"Huntington Beach","CountryCode":"USA","1":"USA","Population":"189594","2":"189594"},{"Name":"Modesto","0":"Modesto","CountryCode":"USA","1":"USA","Population":"188856","2":"188856"},{"Name":"Durham","0":"Durham","CountryCode":"USA","1":"USA","Population":"187035","2":"187035"},{"Name":"Columbus","0":"Columbus","CountryCode":"USA","1":"USA","Population":"186291","2":"186291"},{"Name":"Orlando","0":"Orlando","CountryCode":"USA","1":"USA","Population":"185951","2":"185951"},{"Name":"Boise City","0":"Boise City","CountryCode":"USA","1":"USA","Population":"185787","2":"185787"},{"Name":"Winston-Salem","0":"Winston-Salem","CountryCode":"USA","1":"USA","Population":"185776","2":"185776"},{"Name":"San Bernardino","0":"San Bernardino","CountryCode":"USA","1":"USA","Population":"185401","2":"185401"},{"Name":"Jackson","0":"Jackson","CountryCode":"USA","1":"USA","Population":"184256","2":"184256"},{"Name":"Little Rock","0":"Little Rock","CountryCode":"USA","1":"USA","Population":"183133","2":"183133"},{"Name":"Salt Lake City","0":"Salt Lake City","CountryCode":"USA","1":"USA","Population":"181743","2":"181743"},{"Name":"Reno","0":"Reno","CountryCode":"USA","1":"USA","Population":"180480","2":"180480"},{"Name":"Newport News","0":"Newport News","CountryCode":"USA","1":"USA","Population":"180150","2":"180150"},{"Name":"Chandler","0":"Chandler","CountryCode":"USA","1":"USA","Population":"176581","2":"176581"},{"Name":"Laredo","0":"Laredo","CountryCode":"USA","1":"USA","Population":"176576","2":"176576"},{"Name":"Henderson","0":"Henderson","CountryCode":"USA","1":"USA","Population":"175381","2":"175381"},{"Name":"Arlington","0":"Arlington","CountryCode":"USA","1":"USA","Population":"174838","2":"174838"},{"Name":"Knoxville","0":"Knoxville","CountryCode":"USA","1":"USA","Population":"173890","2":"173890"},{"Name":"Amarillo","0":"Amarillo","CountryCode":"USA","1":"USA","Population":"173627","2":"173627"},{"Name":"Providence","0":"Providence","CountryCode":"USA","1":"USA","Population":"173618","2":"173618"},{"Name":"Chula Vista","0":"Chula Vista","CountryCode":"USA","1":"USA","Population":"173556","2":"173556"},{"Name":"Worcester","0":"Worcester","CountryCode":"USA","1":"USA","Population":"172648","2":"172648"},{"Name":"Oxnard","0":"Oxnard","CountryCode":"USA","1":"USA","Population":"170358","2":"170358"},{"Name":"Dayton","0":"Dayton","CountryCode":"USA","1":"USA","Population":"166179","2":"166179"},{"Name":"Garden Grove","0":"Garden Grove","CountryCode":"USA","1":"USA","Population":"165196","2":"165196"},{"Name":"Oceanside","0":"Oceanside","CountryCode":"USA","1":"USA","Population":"161029","2":"161029"},{"Name":"Tempe","0":"Tempe","CountryCode":"USA","1":"USA","Population":"158625","2":"158625"},{"Name":"Huntsville","0":"Huntsville","CountryCode":"USA","1":"USA","Population":"158216","2":"158216"},{"Name":"Ontario","0":"Ontario","CountryCode":"USA","1":"USA","Population":"158007","2":"158007"},{"Name":"Chattanooga","0":"Chattanooga","CountryCode":"USA","1":"USA","Population":"155554","2":"155554"},{"Name":"Fort Lauderdale","0":"Fort Lauderdale","CountryCode":"USA","1":"USA","Population":"152397","2":"152397"},{"Name":"Springfield","0":"Springfield","CountryCode":"USA","1":"USA","Population":"152082","2":"152082"},{"Name":"Springfield","0":"Springfield","CountryCode":"USA","1":"USA","Population":"151580","2":"151580"},{"Name":"Santa Clarita","0":"Santa Clarita","CountryCode":"USA","1":"USA","Population":"151088","2":"151088"},{"Name":"Salinas","0":"Salinas","CountryCode":"USA","1":"USA","Population":"151060","2":"151060"},{"Name":"Tallahassee","0":"Tallahassee","CountryCode":"USA","1":"USA","Population":"150624","2":"150624"},{"Name":"Rockford","0":"Rockford","CountryCode":"USA","1":"USA","Population":"150115","2":"150115"},{"Name":"Pomona","0":"Pomona","CountryCode":"USA","1":"USA","Population":"149473","2":"149473"},{"Name":"Metairie","0":"Metairie","CountryCode":"USA","1":"USA","Population":"149428","2":"149428"},{"Name":"Paterson","0":"Paterson","CountryCode":"USA","1":"USA","Population":"149222","2":"149222"},{"Name":"Overland Park","0":"Overland Park","CountryCode":"USA","1":"USA","Population":"149080","2":"149080"},{"Name":"Santa Rosa","0":"Santa Rosa","CountryCode":"USA","1":"USA","Population":"147595","2":"147595"},{"Name":"Syracuse","0":"Syracuse","CountryCode":"USA","1":"USA","Population":"147306","2":"147306"},{"Name":"Kansas City","0":"Kansas City","CountryCode":"USA","1":"USA","Population":"146866","2":"146866"},{"Name":"Hampton","0":"Hampton","CountryCode":"USA","1":"USA","Population":"146437","2":"146437"},{"Name":"Lakewood","0":"Lakewood","CountryCode":"USA","1":"USA","Population":"144126","2":"144126"},{"Name":"Vancouver","0":"Vancouver","CountryCode":"USA","1":"USA","Population":"143560","2":"143560"},{"Name":"Irvine","0":"Irvine","CountryCode":"USA","1":"USA","Population":"143072","2":"143072"},{"Name":"Aurora","0":"Aurora","CountryCode":"USA","1":"USA","Population":"142990","2":"142990"},{"Name":"Moreno Valley","0":"Moreno Valley","CountryCode":"USA","1":"USA","Population":"142381","2":"142381"},{"Name":"Pasadena","0":"Pasadena","CountryCode":"USA","1":"USA","Population":"141674","2":"141674"},{"Name":"Hayward","0":"Hayward","CountryCode":"USA","1":"USA","Population":"140030","2":"140030"},{"Name":"Brownsville","0":"Brownsville","CountryCode":"USA","1":"USA","Population":"139722","2":"139722"},{"Name":"Bridgeport","0":"Bridgeport","CountryCode":"USA","1":"USA","Population":"139529","2":"139529"},{"Name":"Hollywood","0":"Hollywood","CountryCode":"USA","1":"USA","Population":"139357","2":"139357"},{"Name":"Warren","0":"Warren","CountryCode":"USA","1":"USA","Population":"138247","2":"138247"},{"Name":"Torrance","0":"Torrance","CountryCode":"USA","1":"USA","Population":"137946","2":"137946"},{"Name":"Eugene","0":"Eugene","CountryCode":"USA","1":"USA","Population":"137893","2":"137893"},{"Name":"Pembroke Pines","0":"Pembroke Pines","CountryCode":"USA","1":"USA","Population":"137427","2":"137427"},{"Name":"Salem","0":"Salem","CountryCode":"USA","1":"USA","Population":"136924","2":"136924"},{"Name":"Pasadena","0":"Pasadena","CountryCode":"USA","1":"USA","Population":"133936","2":"133936"},{"Name":"Escondido","0":"Escondido","CountryCode":"USA","1":"USA","Population":"133559","2":"133559"},{"Name":"Sunnyvale","0":"Sunnyvale","CountryCode":"USA","1":"USA","Population":"131760","2":"131760"},{"Name":"Savannah","0":"Savannah","CountryCode":"USA","1":"USA","Population":"131510","2":"131510"},{"Name":"Fontana","0":"Fontana","CountryCode":"USA","1":"USA","Population":"128929","2":"128929"},{"Name":"Orange","0":"Orange","CountryCode":"USA","1":"USA","Population":"128821","2":"128821"},{"Name":"Naperville","0":"Naperville","CountryCode":"USA","1":"USA","Population":"128358","2":"128358"},{"Name":"Alexandria","0":"Alexandria","CountryCode":"USA","1":"USA","Population":"128283","2":"128283"},{"Name":"Rancho Cucamonga","0":"Rancho Cucamonga","CountryCode":"USA","1":"USA","Population":"127743","2":"127743"},{"Name":"Grand Prairie","0":"Grand Prairie","CountryCode":"USA","1":"USA","Population":"127427","2":"127427"},{"Name":"East Los Angeles","0":"East Los Angeles","CountryCode":"USA","1":"USA","Population":"126379","2":"126379"},{"Name":"Fullerton","0":"Fullerton","CountryCode":"USA","1":"USA","Population":"126003","2":"126003"},{"Name":"Corona","0":"Corona","CountryCode":"USA","1":"USA","Population":"124966","2":"124966"},{"Name":"Flint","0":"Flint","CountryCode":"USA","1":"USA","Population":"124943","2":"124943"},{"Name":"Paradise","0":"Paradise","CountryCode":"USA","1":"USA","Population":"124682","2":"124682"},{"Name":"Mesquite","0":"Mesquite","CountryCode":"USA","1":"USA","Population":"124523","2":"124523"},{"Name":"Sterling Heights","0":"Sterling Heights","CountryCode":"USA","1":"USA","Population":"124471","2":"124471"},{"Name":"Sioux Falls","0":"Sioux Falls","CountryCode":"USA","1":"USA","Population":"123975","2":"123975"},{"Name":"New Haven","0":"New Haven","CountryCode":"USA","1":"USA","Population":"123626","2":"123626"},{"Name":"Topeka","0":"Topeka","CountryCode":"USA","1":"USA","Population":"122377","2":"122377"},{"Name":"Concord","0":"Concord","CountryCode":"USA","1":"USA","Population":"121780","2":"121780"},{"Name":"Evansville","0":"Evansville","CountryCode":"USA","1":"USA","Population":"121582","2":"121582"},{"Name":"Hartford","0":"Hartford","CountryCode":"USA","1":"USA","Population":"121578","2":"121578"},{"Name":"Fayetteville","0":"Fayetteville","CountryCode":"USA","1":"USA","Population":"121015","2":"121015"},{"Name":"Cedar Rapids","0":"Cedar Rapids","CountryCode":"USA","1":"USA","Population":"120758","2":"120758"},{"Name":"Elizabeth","0":"Elizabeth","CountryCode":"USA","1":"USA","Population":"120568","2":"120568"},{"Name":"Lansing","0":"Lansing","CountryCode":"USA","1":"USA","Population":"119128","2":"119128"},{"Name":"Lancaster","0":"Lancaster","CountryCode":"USA","1":"USA","Population":"118718","2":"118718"},{"Name":"Fort Collins","0":"Fort Collins","CountryCode":"USA","1":"USA","Population":"118652","2":"118652"},{"Name":"Coral Springs","0":"Coral Springs","CountryCode":"USA","1":"USA","Population":"117549","2":"117549"},{"Name":"Stamford","0":"Stamford","CountryCode":"USA","1":"USA","Population":"117083","2":"117083"},{"Name":"Thousand Oaks","0":"Thousand Oaks","CountryCode":"USA","1":"USA","Population":"117005","2":"117005"},{"Name":"Vallejo","0":"Vallejo","CountryCode":"USA","1":"USA","Population":"116760","2":"116760"},{"Name":"Palmdale","0":"Palmdale","CountryCode":"USA","1":"USA","Population":"116670","2":"116670"},{"Name":"Columbia","0":"Columbia","CountryCode":"USA","1":"USA","Population":"116278","2":"116278"},{"Name":"El Monte","0":"El Monte","CountryCode":"USA","1":"USA","Population":"115965","2":"115965"},{"Name":"Abilene","0":"Abilene","CountryCode":"USA","1":"USA","Population":"115930","2":"115930"},{"Name":"North Las Vegas","0":"North Las Vegas","CountryCode":"USA","1":"USA","Population":"115488","2":"115488"},{"Name":"Ann Arbor","0":"Ann Arbor","CountryCode":"USA","1":"USA","Population":"114024","2":"114024"},{"Name":"Beaumont","0":"Beaumont","CountryCode":"USA","1":"USA","Population":"113866","2":"113866"},{"Name":"Waco","0":"Waco","CountryCode":"USA","1":"USA","Population":"113726","2":"113726"},{"Name":"Macon","0":"Macon","CountryCode":"USA","1":"USA","Population":"113336","2":"113336"},{"Name":"Independence","0":"Independence","CountryCode":"USA","1":"USA","Population":"113288","2":"113288"},{"Name":"Peoria","0":"Peoria","CountryCode":"USA","1":"USA","Population":"112936","2":"112936"},{"Name":"Inglewood","0":"Inglewood","CountryCode":"USA","1":"USA","Population":"112580","2":"112580"},{"Name":"Springfield","0":"Springfield","CountryCode":"USA","1":"USA","Population":"111454","2":"111454"},{"Name":"Simi Valley","0":"Simi Valley","CountryCode":"USA","1":"USA","Population":"111351","2":"111351"},{"Name":"Lafayette","0":"Lafayette","CountryCode":"USA","1":"USA","Population":"110257","2":"110257"},{"Name":"Gilbert","0":"Gilbert","CountryCode":"USA","1":"USA","Population":"109697","2":"109697"},{"Name":"Carrollton","0":"Carrollton","CountryCode":"USA","1":"USA","Population":"109576","2":"109576"},{"Name":"Bellevue","0":"Bellevue","CountryCode":"USA","1":"USA","Population":"109569","2":"109569"},{"Name":"West Valley City","0":"West Valley City","CountryCode":"USA","1":"USA","Population":"108896","2":"108896"},{"Name":"Clarksville","0":"Clarksville","CountryCode":"USA","1":"USA","Population":"108787","2":"108787"},{"Name":"Costa Mesa","0":"Costa Mesa","CountryCode":"USA","1":"USA","Population":"108724","2":"108724"},{"Name":"Peoria","0":"Peoria","CountryCode":"USA","1":"USA","Population":"108364","2":"108364"},{"Name":"South Bend","0":"South Bend","CountryCode":"USA","1":"USA","Population":"107789","2":"107789"},{"Name":"Downey","0":"Downey","CountryCode":"USA","1":"USA","Population":"107323","2":"107323"},{"Name":"Waterbury","0":"Waterbury","CountryCode":"USA","1":"USA","Population":"107271","2":"107271"},{"Name":"Manchester","0":"Manchester","CountryCode":"USA","1":"USA","Population":"107006","2":"107006"},{"Name":"Allentown","0":"Allentown","CountryCode":"USA","1":"USA","Population":"106632","2":"106632"},{"Name":"McAllen","0":"McAllen","CountryCode":"USA","1":"USA","Population":"106414","2":"106414"},{"Name":"Joliet","0":"Joliet","CountryCode":"USA","1":"USA","Population":"106221","2":"106221"},{"Name":"Lowell","0":"Lowell","CountryCode":"USA","1":"USA","Population":"105167","2":"105167"},{"Name":"Provo","0":"Provo","CountryCode":"USA","1":"USA","Population":"105166","2":"105166"},{"Name":"West Covina","0":"West Covina","CountryCode":"USA","1":"USA","Population":"105080","2":"105080"},{"Name":"Wichita Falls","0":"Wichita Falls","CountryCode":"USA","1":"USA","Population":"104197","2":"104197"},{"Name":"Erie","0":"Erie","CountryCode":"USA","1":"USA","Population":"103717","2":"103717"},{"Name":"Daly City","0":"Daly City","CountryCode":"USA","1":"USA","Population":"103621","2":"103621"},{"Name":"Citrus Heights","0":"Citrus Heights","CountryCode":"USA","1":"USA","Population":"103455","2":"103455"},{"Name":"Norwalk","0":"Norwalk","CountryCode":"USA","1":"USA","Population":"103298","2":"103298"},{"Name":"Gary","0":"Gary","CountryCode":"USA","1":"USA","Population":"102746","2":"102746"},{"Name":"Berkeley","0":"Berkeley","CountryCode":"USA","1":"USA","Population":"102743","2":"102743"},{"Name":"Santa Clara","0":"Santa Clara","CountryCode":"USA","1":"USA","Population":"102361","2":"102361"},{"Name":"Green Bay","0":"Green Bay","CountryCode":"USA","1":"USA","Population":"102313","2":"102313"},{"Name":"Cape Coral","0":"Cape Coral","CountryCode":"USA","1":"USA","Population":"102286","2":"102286"},{"Name":"Arvada","0":"Arvada","CountryCode":"USA","1":"USA","Population":"102153","2":"102153"},{"Name":"Pueblo","0":"Pueblo","CountryCode":"USA","1":"USA","Population":"102121","2":"102121"},{"Name":"Sandy","0":"Sandy","CountryCode":"USA","1":"USA","Population":"101853","2":"101853"},{"Name":"Athens-Clarke County","0":"Athens-Clarke County","CountryCode":"USA","1":"USA","Population":"101489","2":"101489"},{"Name":"Cambridge","0":"Cambridge","CountryCode":"USA","1":"USA","Population":"101355","2":"101355"},{"Name":"Westminster","0":"Westminster","CountryCode":"USA","1":"USA","Population":"100940","2":"100940"},{"Name":"San Buenaventura","0":"San Buenaventura","CountryCode":"USA","1":"USA","Population":"100916","2":"100916"},{"Name":"Portsmouth","0":"Portsmouth","CountryCode":"USA","1":"USA","Population":"100565","2":"100565"},{"Name":"Livonia","0":"Livonia","CountryCode":"USA","1":"USA","Population":"100545","2":"100545"},{"Name":"Burbank","0":"Burbank","CountryCode":"USA","1":"USA","Population":"100316","2":"100316"},{"Name":"Clearwater","0":"Clearwater","CountryCode":"USA","1":"USA","Population":"99936","2":"99936"},{"Name":"Midland","0":"Midland","CountryCode":"USA","1":"USA","Population":"98293","2":"98293"},{"Name":"Davenport","0":"Davenport","CountryCode":"USA","1":"USA","Population":"98256","2":"98256"},{"Name":"Mission Viejo","0":"Mission Viejo","CountryCode":"USA","1":"USA","Population":"98049","2":"98049"},{"Name":"Miami Beach","0":"Miami Beach","CountryCode":"USA","1":"USA","Population":"97855","2":"97855"},{"Name":"Sunrise Manor","0":"Sunrise Manor","CountryCode":"USA","1":"USA","Population":"95362","2":"95362"},{"Name":"New Bedford","0":"New Bedford","CountryCode":"USA","1":"USA","Population":"94780","2":"94780"},{"Name":"El Cajon","0":"El Cajon","CountryCode":"USA","1":"USA","Population":"94578","2":"94578"},{"Name":"Norman","0":"Norman","CountryCode":"USA","1":"USA","Population":"94193","2":"94193"},{"Name":"Richmond","0":"Richmond","CountryCode":"USA","1":"USA","Population":"94100","2":"94100"},{"Name":"Albany","0":"Albany","CountryCode":"USA","1":"USA","Population":"93994","2":"93994"},{"Name":"Brockton","0":"Brockton","CountryCode":"USA","1":"USA","Population":"93653","2":"93653"},{"Name":"Roanoke","0":"Roanoke","CountryCode":"USA","1":"USA","Population":"93357","2":"93357"},{"Name":"Billings","0":"Billings","CountryCode":"USA","1":"USA","Population":"92988","2":"92988"},{"Name":"Compton","0":"Compton","CountryCode":"USA","1":"USA","Population":"92864","2":"92864"},{"Name":"Gainesville","0":"Gainesville","CountryCode":"USA","1":"USA","Population":"92291","2":"92291"},{"Name":"Fairfield","0":"Fairfield","CountryCode":"USA","1":"USA","Population":"92256","2":"92256"},{"Name":"Arden-Arcade","0":"Arden-Arcade","CountryCode":"USA","1":"USA","Population":"92040","2":"92040"},{"Name":"San Mateo","0":"San Mateo","CountryCode":"USA","1":"USA","Population":"91799","2":"91799"},{"Name":"Visalia","0":"Visalia","CountryCode":"USA","1":"USA","Population":"91762","2":"91762"},{"Name":"Boulder","0":"Boulder","CountryCode":"USA","1":"USA","Population":"91238","2":"91238"},{"Name":"Cary","0":"Cary","CountryCode":"USA","1":"USA","Population":"91213","2":"91213"},{"Name":"Santa Monica","0":"Santa Monica","CountryCode":"USA","1":"USA","Population":"91084","2":"91084"},{"Name":"Fall River","0":"Fall River","CountryCode":"USA","1":"USA","Population":"90555","2":"90555"},{"Name":"Kenosha","0":"Kenosha","CountryCode":"USA","1":"USA","Population":"89447","2":"89447"},{"Name":"Elgin","0":"Elgin","CountryCode":"USA","1":"USA","Population":"89408","2":"89408"},{"Name":"Odessa","0":"Odessa","CountryCode":"USA","1":"USA","Population":"89293","2":"89293"},{"Name":"Carson","0":"Carson","CountryCode":"USA","1":"USA","Population":"89089","2":"89089"},{"Name":"Charleston","0":"Charleston","CountryCode":"USA","1":"USA","Population":"89063","2":"89063"},{"Name":"Charlotte Amalie","0":"Charlotte Amalie","CountryCode":"VIR","1":"VIR","Population":"13000","2":"13000"},{"Name":"Harare","0":"Harare","CountryCode":"ZWE","1":"ZWE","Population":"1410000","2":"1410000"},{"Name":"Bulawayo","0":"Bulawayo","CountryCode":"ZWE","1":"ZWE","Population":"621742","2":"621742"},{"Name":"Chitungwiza","0":"Chitungwiza","CountryCode":"ZWE","1":"ZWE","Population":"274912","2":"274912"},{"Name":"Mount Darwin","0":"Mount Darwin","CountryCode":"ZWE","1":"ZWE","Population":"164362","2":"164362"},{"Name":"Mutare","0":"Mutare","CountryCode":"ZWE","1":"ZWE","Population":"131367","2":"131367"},{"Name":"Gweru","0":"Gweru","CountryCode":"ZWE","1":"ZWE","Population":"128037","2":"128037"},{"Name":"Gaza","0":"Gaza","CountryCode":"PSE","1":"PSE","Population":"353632","2":"353632"},{"Name":"Khan Yunis","0":"Khan Yunis","CountryCode":"PSE","1":"PSE","Population":"123175","2":"123175"},{"Name":"Hebron","0":"Hebron","CountryCode":"PSE","1":"PSE","Population":"119401","2":"119401"},{"Name":"Jabaliya","0":"Jabaliya","CountryCode":"PSE","1":"PSE","Population":"113901","2":"113901"},{"Name":"Nablus","0":"Nablus","CountryCode":"PSE","1":"PSE","Population":"100231","2":"100231"},{"Name":"Rafah","0":"Rafah","CountryCode":"PSE","1":"PSE","Population":"92020","2":"92020"}] \ No newline at end of file diff --git a/cypress-api/index.js b/cypress-api/index.js new file mode 100644 index 0000000..ad9a254 --- /dev/null +++ b/cypress-api/index.js @@ -0,0 +1,17 @@ +import http from 'http'; +import * as records from './data.json' assert { type: "json" }; + +/** + * A small server for E2E tests + */ +http + .createServer((req, res) => { + const qs = new URLSearchParams(req.url.split('?')[1]) + const response = qs.get('q') ? records.default.filter(record => record["Name"].toLowerCase().lastIndexOf(qs.get('q').toLowerCase()) === 0) : records.default; + res.setHeader('Content-Type', 'application/json'); + res.setHeader('Access-Control-Allow-Origin', '*'); + res.end(JSON.stringify(response)); + }) + .listen(3000, (err) => { + console.log('server is listening on port 3000'); + }); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 6866257..178ef0c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,6 +20,7 @@ "jest-junit": "^16.0.0", "jsdom": "^24.0.0", "node-sass": "^9.0.0", + "nodemon": "^3.1.0", "prettier": "^3.2.5", "stylelint": "^16.2.1", "vitepress": "^1.0.0-rc.45", @@ -8419,6 +8420,12 @@ "node": ">= 4" } }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -11321,6 +11328,55 @@ "node": ">=16" } }, + "node_modules/nodemon": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.0.tgz", + "integrity": "sha512-xqlktYlDMCepBJd43ZQhjWwMw2obW/JRvkrLxq5RCNcuDDX1DbcPT+qT1IlIIdf+DhnWs90JpTMe+Y5KxOchvA==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/nodemon/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/nopt": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", @@ -12146,6 +12202,12 @@ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", "dev": true }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -13156,6 +13218,18 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -14302,6 +14376,33 @@ "node": ">=0.6" } }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/touch/node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, "node_modules/tough-cookie": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", @@ -14554,6 +14655,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", diff --git a/package.json b/package.json index 08f230c..882ef4b 100755 --- a/package.json +++ b/package.json @@ -50,10 +50,12 @@ "build": "mkdir -p dist && cp -r src/index.html dist/ & npm run build:css && npm run build:js", "build:css": "node-sass ./src/sass/kompleter.scss ./dist/css/kompleter.min.css --output-style compressed", "build:js": "webpack", + "ci:api": "nodemon ./cypress-api/index --ignore dist --ignore node_modules --ignore reports --ignore cypress --ignore docs", + "ci:dev": "webpack serve --hot --mode development --config ./webpack.config.js", + "ci:test": "nyc --reporter=lcov --report-dir=./reports/lcov-coverage npm run test -- --coverage", "cypress:open": "cypress open", "cypress:run": "cypress run --browser chrome ./cypress", "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js ./test/**.spec.js", - "teste": "node --experimental-vm-modules node_modules/jest/bin/jest.js ./test/index.spec.js", "dev": "webpack-dashboard -- webpack serve --hot --mode development --config ./webpack.config.js", "prod": "webpack-dashboard -- webpack --mode production --config ./webpack.config.prod.js", "docs:dev": "vitepress dev docs", From 7a0b028f32ec4eb2e80353691724440df035cc2a Mon Sep 17 00:00:00 2001 From: Steve Date: Thu, 14 Mar 2024 23:49:09 +0100 Subject: [PATCH 25/48] fix: add nyc --- package-lock.json | 615 ++++++++++++++++++++++++++++++++++++++-------- package.json | 3 +- 2 files changed, 510 insertions(+), 108 deletions(-) diff --git a/package-lock.json b/package-lock.json index 178ef0c..8d1b59a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "jest-junit": "^16.0.0", "jsdom": "^24.0.0", "node-sass": "^9.0.0", - "nodemon": "^3.1.0", + "nyc": "^15.1.0", "prettier": "^3.2.5", "stylelint": "^16.2.1", "vitepress": "^1.0.0-rc.45", @@ -4400,6 +4400,18 @@ "node": ">= 8" } }, + "node_modules/append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, + "dependencies": { + "default-require-extensions": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/aproba": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", @@ -4426,6 +4438,12 @@ } ] }, + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "dev": true + }, "node_modules/are-we-there-yet": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", @@ -5100,6 +5118,57 @@ "node": ">=6" } }, + "node_modules/caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, + "dependencies": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/caching-transform/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caching-transform/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/caching-transform/node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, "node_modules/call-bind": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", @@ -5494,6 +5563,12 @@ "node": ">=4.0.0" } }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, "node_modules/compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", @@ -6009,6 +6084,21 @@ "node": ">=10.17.0" } }, + "node_modules/default-require-extensions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", + "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", + "dev": true, + "dependencies": { + "strip-bom": "^4.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/defaults": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", @@ -6570,6 +6660,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, "node_modules/esbuild": { "version": "0.20.1", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.1.tgz", @@ -7368,6 +7464,47 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-cache-dir/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-cache-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -7458,6 +7595,19 @@ "is-callable": "^1.1.3" } }, + "node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -7505,6 +7655,26 @@ "node": ">= 0.6" } }, + "node_modules/fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", @@ -8074,6 +8244,31 @@ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true }, + "node_modules/hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, + "dependencies": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hasha/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -8420,12 +8615,6 @@ "node": ">= 4" } }, - "node_modules/ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", - "dev": true - }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -9089,6 +9278,18 @@ "node": ">=8" } }, + "node_modules/istanbul-lib-hook": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "dev": true, + "dependencies": { + "append-transform": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/istanbul-lib-instrument": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", @@ -9105,6 +9306,35 @@ "node": ">=10" } }, + "node_modules/istanbul-lib-processinfo": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", + "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", + "dev": true, + "dependencies": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.3", + "istanbul-lib-coverage": "^3.2.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/istanbul-lib-report": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", @@ -10462,6 +10692,12 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", + "dev": true + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -11293,6 +11529,18 @@ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", "dev": true }, + "node_modules/node-preload": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "dev": true, + "dependencies": { + "process-on-spawn": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/node-releases": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", @@ -11328,55 +11576,6 @@ "node": ">=16" } }, - "node_modules/nodemon": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.0.tgz", - "integrity": "sha512-xqlktYlDMCepBJd43ZQhjWwMw2obW/JRvkrLxq5RCNcuDDX1DbcPT+qT1IlIIdf+DhnWs90JpTMe+Y5KxOchvA==", - "dev": true, - "dependencies": { - "chokidar": "^3.5.2", - "debug": "^4", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^7.5.3", - "simple-update-notifier": "^2.0.0", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" - } - }, - "node_modules/nodemon/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/nodemon/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/nopt": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", @@ -11449,6 +11648,170 @@ "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", "dev": true }, + "node_modules/nyc": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", + "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", + "dev": true, + "dependencies": { + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^2.0.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "bin": { + "nyc": "bin/nyc.js" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/nyc/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/nyc/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/nyc/node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nyc/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/nyc/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/nyc/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -11685,6 +12048,21 @@ "node": ">=6" } }, + "node_modules/package-hash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", @@ -12121,6 +12499,18 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, + "node_modules/process-on-spawn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", + "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", + "dev": true, + "dependencies": { + "fromentries": "^1.2.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -12202,12 +12592,6 @@ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", "dev": true }, - "node_modules/pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "dev": true - }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -12557,6 +12941,18 @@ "node": ">= 0.10" } }, + "node_modules/release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", + "dev": true, + "dependencies": { + "es6-error": "^4.0.1" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/request-progress": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", @@ -13218,18 +13614,6 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "node_modules/simple-update-notifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", - "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", - "dev": true, - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -13505,6 +13889,47 @@ "source-map": "^0.6.0" } }, + "node_modules/spawn-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "dev": true, + "dependencies": { + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/spawn-wrap/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/spawn-wrap/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/spawndamnit": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/spawndamnit/-/spawndamnit-2.0.0.tgz", @@ -14376,33 +14801,6 @@ "node": ">=0.6" } }, - "node_modules/touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "dependencies": { - "nopt": "~1.0.10" - }, - "bin": { - "nodetouch": "bin/nodetouch.js" - } - }, - "node_modules/touch/node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "*" - } - }, "node_modules/tough-cookie": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", @@ -14627,6 +15025,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, "node_modules/uglify-js": { "version": "3.17.4", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", @@ -14655,12 +15062,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "dev": true - }, "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", diff --git a/package.json b/package.json index 882ef4b..a9fc786 100755 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "build": "mkdir -p dist && cp -r src/index.html dist/ & npm run build:css && npm run build:js", "build:css": "node-sass ./src/sass/kompleter.scss ./dist/css/kompleter.min.css --output-style compressed", "build:js": "webpack", - "ci:api": "nodemon ./cypress-api/index --ignore dist --ignore node_modules --ignore reports --ignore cypress --ignore docs", + "ci:api": "nodemon ./cypress-api/index --ignore dist --ignore node_modules --ignore reports --ignore cypress --ignore docs", "ci:dev": "webpack serve --hot --mode development --config ./webpack.config.js", "ci:test": "nyc --reporter=lcov --report-dir=./reports/lcov-coverage npm run test -- --coverage", "cypress:open": "cypress open", @@ -74,6 +74,7 @@ "jest-junit": "^16.0.0", "jsdom": "^24.0.0", "node-sass": "^9.0.0", + "nyc": "^15.1.0", "prettier": "^3.2.5", "stylelint": "^16.2.1", "vitepress": "^1.0.0-rc.45", From df5953267f25385df2b151b0bf8384bd248f9d50 Mon Sep 17 00:00:00 2001 From: Steve Date: Thu, 14 Mar 2024 23:52:13 +0100 Subject: [PATCH 26/48] fix: webpack serve before cypress --- .github/workflows/build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 46acc93..89d835f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -79,11 +79,11 @@ jobs: with: name: build-files path: dist - - name: Run local servers - run: npm run ci:api & npm run ci:dev + - name: Run local API + run: npm run ci:api env: CI: true - name: Run E2E tests - run: npm run cypress:run + run: npm run ci:dev && npm run cypress:run env: CI: true \ No newline at end of file From 5a5ff9dd2a34e0565e293ad68162842b639b7d0d Mon Sep 17 00:00:00 2001 From: Steve Date: Fri, 15 Mar 2024 00:05:54 +0100 Subject: [PATCH 27/48] fix: lcov file path and nodemon --- .github/workflows/build.yml | 2 +- .../827755bf-7a37-42f9-b3f0-fb681d4ad440.json | 1 + .../c844f1cd-502f-40c2-804d-2cc19775a0fd.json | 1 + .../827755bf-7a37-42f9-b3f0-fb681d4ad440.json | 1 + .../c844f1cd-502f-40c2-804d-2cc19775a0fd.json | 1 + .nyc_output/processinfo/index.json | 1 + jest.config.js | 2 +- package-lock.json | 615 +++--------------- package.json | 4 +- 9 files changed, 116 insertions(+), 512 deletions(-) create mode 100644 .nyc_output/827755bf-7a37-42f9-b3f0-fb681d4ad440.json create mode 100644 .nyc_output/c844f1cd-502f-40c2-804d-2cc19775a0fd.json create mode 100644 .nyc_output/processinfo/827755bf-7a37-42f9-b3f0-fb681d4ad440.json create mode 100644 .nyc_output/processinfo/c844f1cd-502f-40c2-804d-2cc19775a0fd.json create mode 100644 .nyc_output/processinfo/index.json diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 89d835f..4f40b28 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -53,7 +53,7 @@ jobs: uses: coverallsapp/github-action@v2 with: github-token: ${{ secrets.GITHUB_TOKEN }} - path-to-lcov: ./coverage/lcov.info + path-to-lcov: ./build/code-coverage/lcov.info e2e-tests: name: E2E Tests runs-on: ubuntu-latest diff --git a/.nyc_output/827755bf-7a37-42f9-b3f0-fb681d4ad440.json b/.nyc_output/827755bf-7a37-42f9-b3f0-fb681d4ad440.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/.nyc_output/827755bf-7a37-42f9-b3f0-fb681d4ad440.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/.nyc_output/c844f1cd-502f-40c2-804d-2cc19775a0fd.json b/.nyc_output/c844f1cd-502f-40c2-804d-2cc19775a0fd.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/.nyc_output/c844f1cd-502f-40c2-804d-2cc19775a0fd.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/.nyc_output/processinfo/827755bf-7a37-42f9-b3f0-fb681d4ad440.json b/.nyc_output/processinfo/827755bf-7a37-42f9-b3f0-fb681d4ad440.json new file mode 100644 index 0000000..64bf3f0 --- /dev/null +++ b/.nyc_output/processinfo/827755bf-7a37-42f9-b3f0-fb681d4ad440.json @@ -0,0 +1 @@ +{"parent":null,"pid":18321,"argv":["/home/steve/.nvm/versions/node/v18.19.0/bin/node","/home/steve/.nvm/versions/node/v18.19.0/bin/npm","run","test","--","--coverage"],"execArgv":[],"cwd":"/var/www/kompletr","time":1710457343415,"ppid":18310,"coverageFilename":"/var/www/kompletr/.nyc_output/827755bf-7a37-42f9-b3f0-fb681d4ad440.json","externalId":"","uuid":"827755bf-7a37-42f9-b3f0-fb681d4ad440","files":[]} \ No newline at end of file diff --git a/.nyc_output/processinfo/c844f1cd-502f-40c2-804d-2cc19775a0fd.json b/.nyc_output/processinfo/c844f1cd-502f-40c2-804d-2cc19775a0fd.json new file mode 100644 index 0000000..af843e5 --- /dev/null +++ b/.nyc_output/processinfo/c844f1cd-502f-40c2-804d-2cc19775a0fd.json @@ -0,0 +1 @@ +{"parent":"827755bf-7a37-42f9-b3f0-fb681d4ad440","pid":18333,"argv":["/home/steve/.nvm/versions/node/v18.19.0/bin/node","/var/www/kompletr/node_modules/jest/bin/jest.js","./test/animation.spec.js","./test/broadcaster.spec.js","./test/cache.spec.js","./test/configuration.spec.js","./test/dom.spec.js","./test/index.spec.js","./test/kompletr.spec.js","./test/properties.spec.js","--coverage"],"execArgv":["--experimental-vm-modules"],"cwd":"/var/www/kompletr","time":1710457343729,"ppid":18332,"coverageFilename":"/var/www/kompletr/.nyc_output/c844f1cd-502f-40c2-804d-2cc19775a0fd.json","externalId":"","uuid":"c844f1cd-502f-40c2-804d-2cc19775a0fd","files":[]} \ No newline at end of file diff --git a/.nyc_output/processinfo/index.json b/.nyc_output/processinfo/index.json new file mode 100644 index 0000000..5b3a846 --- /dev/null +++ b/.nyc_output/processinfo/index.json @@ -0,0 +1 @@ +{"processes":{"827755bf-7a37-42f9-b3f0-fb681d4ad440":{"parent":null,"children":["c844f1cd-502f-40c2-804d-2cc19775a0fd"]},"c844f1cd-502f-40c2-804d-2cc19775a0fd":{"parent":"827755bf-7a37-42f9-b3f0-fb681d4ad440","children":[]}},"files":{},"externalIds":{}} \ No newline at end of file diff --git a/jest.config.js b/jest.config.js index ee6cc20..b6e36ae 100644 --- a/jest.config.js +++ b/jest.config.js @@ -22,7 +22,7 @@ export default { // coverageProvider: 'v8', collectCoverage: true, coverageDirectory: 'build/code-coverage', - coverageReporters: ['cobertura', 'text'], + coverageReporters: ['text', 'lcov'], collectCoverageFrom: [ 'src/**/*.js' ], diff --git a/package-lock.json b/package-lock.json index 8d1b59a..178ef0c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "jest-junit": "^16.0.0", "jsdom": "^24.0.0", "node-sass": "^9.0.0", - "nyc": "^15.1.0", + "nodemon": "^3.1.0", "prettier": "^3.2.5", "stylelint": "^16.2.1", "vitepress": "^1.0.0-rc.45", @@ -4400,18 +4400,6 @@ "node": ">= 8" } }, - "node_modules/append-transform": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", - "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", - "dev": true, - "dependencies": { - "default-require-extensions": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/aproba": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", @@ -4438,12 +4426,6 @@ } ] }, - "node_modules/archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", - "dev": true - }, "node_modules/are-we-there-yet": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", @@ -5118,57 +5100,6 @@ "node": ">=6" } }, - "node_modules/caching-transform": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", - "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", - "dev": true, - "dependencies": { - "hasha": "^5.0.0", - "make-dir": "^3.0.0", - "package-hash": "^4.0.0", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/caching-transform/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caching-transform/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/caching-transform/node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, "node_modules/call-bind": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", @@ -5563,12 +5494,6 @@ "node": ">=4.0.0" } }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, "node_modules/compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", @@ -6084,21 +6009,6 @@ "node": ">=10.17.0" } }, - "node_modules/default-require-extensions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", - "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", - "dev": true, - "dependencies": { - "strip-bom": "^4.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/defaults": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", @@ -6660,12 +6570,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true - }, "node_modules/esbuild": { "version": "0.20.1", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.1.tgz", @@ -7464,47 +7368,6 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-cache-dir/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-cache-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", @@ -7595,19 +7458,6 @@ "is-callable": "^1.1.3" } }, - "node_modules/foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -7655,26 +7505,6 @@ "node": ">= 0.6" } }, - "node_modules/fromentries": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", @@ -8244,31 +8074,6 @@ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true }, - "node_modules/hasha": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", - "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", - "dev": true, - "dependencies": { - "is-stream": "^2.0.0", - "type-fest": "^0.8.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/hasha/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -8615,6 +8420,12 @@ "node": ">= 4" } }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -9278,18 +9089,6 @@ "node": ">=8" } }, - "node_modules/istanbul-lib-hook": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", - "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", - "dev": true, - "dependencies": { - "append-transform": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/istanbul-lib-instrument": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", @@ -9306,35 +9105,6 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-processinfo": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", - "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", - "dev": true, - "dependencies": { - "archy": "^1.0.0", - "cross-spawn": "^7.0.3", - "istanbul-lib-coverage": "^3.2.0", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-processinfo/node_modules/p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/istanbul-lib-report": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", @@ -10692,12 +10462,6 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "node_modules/lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", - "dev": true - }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -11529,18 +11293,6 @@ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", "dev": true }, - "node_modules/node-preload": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", - "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", - "dev": true, - "dependencies": { - "process-on-spawn": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/node-releases": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", @@ -11576,6 +11328,55 @@ "node": ">=16" } }, + "node_modules/nodemon": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.0.tgz", + "integrity": "sha512-xqlktYlDMCepBJd43ZQhjWwMw2obW/JRvkrLxq5RCNcuDDX1DbcPT+qT1IlIIdf+DhnWs90JpTMe+Y5KxOchvA==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/nodemon/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/nopt": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", @@ -11648,170 +11449,6 @@ "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", "dev": true }, - "node_modules/nyc": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", - "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", - "dev": true, - "dependencies": { - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "caching-transform": "^4.0.0", - "convert-source-map": "^1.7.0", - "decamelize": "^1.2.0", - "find-cache-dir": "^3.2.0", - "find-up": "^4.1.0", - "foreground-child": "^2.0.0", - "get-package-type": "^0.1.0", - "glob": "^7.1.6", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-hook": "^3.0.0", - "istanbul-lib-instrument": "^4.0.0", - "istanbul-lib-processinfo": "^2.0.2", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "make-dir": "^3.0.0", - "node-preload": "^0.2.1", - "p-map": "^3.0.0", - "process-on-spawn": "^1.0.0", - "resolve-from": "^5.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "spawn-wrap": "^2.0.0", - "test-exclude": "^6.0.0", - "yargs": "^15.0.2" - }, - "bin": { - "nyc": "bin/nyc.js" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/nyc/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/nyc/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/nyc/node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/nyc/node_modules/p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/nyc/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/nyc/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -12048,21 +11685,6 @@ "node": ">=6" } }, - "node_modules/package-hash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", - "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.15", - "hasha": "^5.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", @@ -12499,18 +12121,6 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "node_modules/process-on-spawn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", - "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", - "dev": true, - "dependencies": { - "fromentries": "^1.2.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -12592,6 +12202,12 @@ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", "dev": true }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -12941,18 +12557,6 @@ "node": ">= 0.10" } }, - "node_modules/release-zalgo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", - "dev": true, - "dependencies": { - "es6-error": "^4.0.1" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/request-progress": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", @@ -13614,6 +13218,18 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -13889,47 +13505,6 @@ "source-map": "^0.6.0" } }, - "node_modules/spawn-wrap": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", - "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", - "dev": true, - "dependencies": { - "foreground-child": "^2.0.0", - "is-windows": "^1.0.2", - "make-dir": "^3.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "which": "^2.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/spawn-wrap/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/spawn-wrap/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/spawndamnit": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/spawndamnit/-/spawndamnit-2.0.0.tgz", @@ -14801,6 +14376,33 @@ "node": ">=0.6" } }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/touch/node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, "node_modules/tough-cookie": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", @@ -15025,15 +14627,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, "node_modules/uglify-js": { "version": "3.17.4", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", @@ -15062,6 +14655,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", diff --git a/package.json b/package.json index a9fc786..97a2fd6 100755 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "build:js": "webpack", "ci:api": "nodemon ./cypress-api/index --ignore dist --ignore node_modules --ignore reports --ignore cypress --ignore docs", "ci:dev": "webpack serve --hot --mode development --config ./webpack.config.js", - "ci:test": "nyc --reporter=lcov --report-dir=./reports/lcov-coverage npm run test -- --coverage", + "ci:test": "node --experimental-vm-modules node_modules/jest/bin/jest.js ./test/**.spec.js -- --coverage", "cypress:open": "cypress open", "cypress:run": "cypress run --browser chrome ./cypress", "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js ./test/**.spec.js", @@ -74,7 +74,7 @@ "jest-junit": "^16.0.0", "jsdom": "^24.0.0", "node-sass": "^9.0.0", - "nyc": "^15.1.0", + "nodemon": "^3.1.0", "prettier": "^3.2.5", "stylelint": "^16.2.1", "vitepress": "^1.0.0-rc.45", From 68a00666510c12827cdb0b0a115a68e9fb9897f4 Mon Sep 17 00:00:00 2001 From: Steve Date: Fri, 15 Mar 2024 00:12:10 +0100 Subject: [PATCH 28/48] fix: loop on nodemon --- .github/workflows/build.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4f40b28..8e96adc 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -79,11 +79,7 @@ jobs: with: name: build-files path: dist - - name: Run local API - run: npm run ci:api - env: - CI: true - name: Run E2E tests - run: npm run ci:dev && npm run cypress:run + run: npm run ci:api && npm run ci:dev && npm run cypress:run env: CI: true \ No newline at end of file From 0bc054f23d018514960a215dd63e87ee2476cb1c Mon Sep 17 00:00:00 2001 From: Steve Date: Fri, 15 Mar 2024 00:24:40 +0100 Subject: [PATCH 29/48] fix: loop on nodemon --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 97a2fd6..10dc81c 100755 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "build": "mkdir -p dist && cp -r src/index.html dist/ & npm run build:css && npm run build:js", "build:css": "node-sass ./src/sass/kompleter.scss ./dist/css/kompleter.min.css --output-style compressed", "build:js": "webpack", - "ci:api": "nodemon ./cypress-api/index --ignore dist --ignore node_modules --ignore reports --ignore cypress --ignore docs", + "ci:api": "node ./cypress-api/index.js", "ci:dev": "webpack serve --hot --mode development --config ./webpack.config.js", "ci:test": "node --experimental-vm-modules node_modules/jest/bin/jest.js ./test/**.spec.js -- --coverage", "cypress:open": "cypress open", From d1447fe4676a98f5b7d2eb721c47e0bab130d9d7 Mon Sep 17 00:00:00 2001 From: Steve Date: Fri, 15 Mar 2024 00:47:26 +0100 Subject: [PATCH 30/48] fix: load json directly --- .github/workflows/build.yml | 2 +- src/index.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8e96adc..9b25bac 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -80,6 +80,6 @@ jobs: name: build-files path: dist - name: Run E2E tests - run: npm run ci:api && npm run ci:dev && npm run cypress:run + run: npm run ci:dev && npm run cypress:run env: CI: true \ No newline at end of file diff --git a/src/index.html b/src/index.html index e1cddda..294b53b 100644 --- a/src/index.html +++ b/src/index.html @@ -74,7 +74,7 @@

Kømpletr

headers.append('content-type', 'application/x-www-form-urlencoded'); headers.append('method', 'GET'); - fetch(`http://localhost:3000/api`, headers) + fetch(`../cypress-api/data.json`, headers) .then(result => result.json()) .then(data => { input.kompletr({ From 48bad3b4fe5db999242e090ba7c4c0f7079bd9cb Mon Sep 17 00:00:00 2001 From: Steve Date: Fri, 15 Mar 2024 00:50:57 +0100 Subject: [PATCH 31/48] fix: load json directly --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 10dc81c..1a287e5 100755 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "build:css": "node-sass ./src/sass/kompleter.scss ./dist/css/kompleter.min.css --output-style compressed", "build:js": "webpack", "ci:api": "node ./cypress-api/index.js", - "ci:dev": "webpack serve --hot --mode development --config ./webpack.config.js", + "ci:dev": "webpack serve --config ./webpack.config.js", "ci:test": "node --experimental-vm-modules node_modules/jest/bin/jest.js ./test/**.spec.js -- --coverage", "cypress:open": "cypress open", "cypress:run": "cypress run --browser chrome ./cypress", From 6b4e032c25b55de982e8cd186c49b9949a3acba4 Mon Sep 17 00:00:00 2001 From: Steve Date: Fri, 15 Mar 2024 00:57:16 +0100 Subject: [PATCH 32/48] chore: dev config webpack ci --- package.json | 2 +- src/js/dom.js | 2 -- webpack.config.dev.js | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 webpack.config.dev.js diff --git a/package.json b/package.json index 1a287e5..0a9098d 100755 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "build:css": "node-sass ./src/sass/kompleter.scss ./dist/css/kompleter.min.css --output-style compressed", "build:js": "webpack", "ci:api": "node ./cypress-api/index.js", - "ci:dev": "webpack serve --config ./webpack.config.js", + "ci:dev": "webpack serve --config ./webpack.config.dev.js", "ci:test": "node --experimental-vm-modules node_modules/jest/bin/jest.js ./test/**.spec.js -- --coverage", "cypress:open": "cypress open", "cypress:run": "cypress run --browser chrome ./cypress", diff --git a/src/js/dom.js b/src/js/dom.js index ecf39d1..eeca185 100644 --- a/src/js/dom.js +++ b/src/js/dom.js @@ -132,8 +132,6 @@ export class DOM { throw new Error('action should be one of ["add", "remove]: ' + action + ' given.'); } - - switch (action) { case 'add': this.focused = this.result.children[pointer]; diff --git a/webpack.config.dev.js b/webpack.config.dev.js new file mode 100644 index 0000000..697bb65 --- /dev/null +++ b/webpack.config.dev.js @@ -0,0 +1,35 @@ +import path from 'path'; +import * as url from 'url'; + +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); + +export default { + entry: './src/js/index.js', + devtool: "source-map", + mode: "development", + module: { + rules: [ + { + test: /\.html$/i, + loader: "html-loader", + }, + { + test: /\.js$/i, + loader: "esbuild-loader", + }, + ], + }, + devServer: { + client: { + logging: 'log', + overlay: true, + }, + static: { + directory: path.join(__dirname, './dist'), + }, + compress: true, + port: 9000, + historyApiFallback: true, + liveReload: true, + }, +}; From f60e3fb16cb3de873cd15b8d02d09a35ad976325 Mon Sep 17 00:00:00 2001 From: Steve Date: Fri, 15 Mar 2024 10:01:46 +0100 Subject: [PATCH 33/48] chore: coverage dom module, refactoring focus method --- .github/workflows/build.yml | 2 +- cypress-api/index.js | 17 -- demo/css/kompletr.demo.min.css | 1 + {cypress-api => demo/files}/data.json | 0 demo/index.html | 109 +++++++++++++ demo/js/kompletr.min.js | 2 + demo/js/kompletr.min.js.map | 1 + package.json | 12 +- src/index.html | 6 +- src/js/dom.js | 29 ++-- src/js/kompletr.js | 3 +- .../{kompleter.scss => kompletr.demo.scss} | 0 src/sass/kompletr.scss | 154 ++++++++++++++++++ test/dom.spec.js | 42 ++++- test/kompletr.spec.js | 3 +- webpack.config.dev.js | 35 ---- 16 files changed, 326 insertions(+), 90 deletions(-) delete mode 100644 cypress-api/index.js create mode 100644 demo/css/kompletr.demo.min.css rename {cypress-api => demo/files}/data.json (100%) create mode 100644 demo/index.html create mode 100644 demo/js/kompletr.min.js create mode 100644 demo/js/kompletr.min.js.map rename src/sass/{kompleter.scss => kompletr.demo.scss} (100%) mode change 100755 => 100644 create mode 100755 src/sass/kompletr.scss delete mode 100644 webpack.config.dev.js diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9b25bac..d54fbfa 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -80,6 +80,6 @@ jobs: name: build-files path: dist - name: Run E2E tests - run: npm run ci:dev && npm run cypress:run + run: npm run ci:dev & npm run cypress:run env: CI: true \ No newline at end of file diff --git a/cypress-api/index.js b/cypress-api/index.js deleted file mode 100644 index ad9a254..0000000 --- a/cypress-api/index.js +++ /dev/null @@ -1,17 +0,0 @@ -import http from 'http'; -import * as records from './data.json' assert { type: "json" }; - -/** - * A small server for E2E tests - */ -http - .createServer((req, res) => { - const qs = new URLSearchParams(req.url.split('?')[1]) - const response = qs.get('q') ? records.default.filter(record => record["Name"].toLowerCase().lastIndexOf(qs.get('q').toLowerCase()) === 0) : records.default; - res.setHeader('Content-Type', 'application/json'); - res.setHeader('Access-Control-Allow-Origin', '*'); - res.end(JSON.stringify(response)); - }) - .listen(3000, (err) => { - console.log('server is listening on port 3000'); - }); \ No newline at end of file diff --git a/demo/css/kompletr.demo.min.css b/demo/css/kompletr.demo.min.css new file mode 100644 index 0000000..a22cb79 --- /dev/null +++ b/demo/css/kompletr.demo.min.css @@ -0,0 +1 @@ +@import url("https://fonts.googleapis.com/css?family=Open+Sans");@import url("https://fonts.googleapis.com/css?family=Thasadith");html{font-size:14px}.github-corner{position:fixed;right:0;top:0;border-bottom:0;text-decoration:none;z-index:1}.github-corner svg{height:80px;width:80px;color:#fff;fill:#333;fill:var(--theme-color, #333)}body{display:flex;flex-direction:column;margin:0;min-height:100vh;font-family:"Open Sans",sans-serif;background:#020024;background:linear-gradient(90deg, #020024 0%, #85ffbd 50%, #fffb7d 100%)}hgroup{margin:0 auto 40px auto;text-align:center}h1{margin:3rem auto 0 auto;font-family:"Thasadith",sans-serif;font-size:7rem}a{color:#333}footer{margin-top:auto;color:#333;text-align:center}.kompletr.form--search{width:30%;position:relative;margin:0 auto}@media (max-width: 480px){.kompletr.form--search{width:90%}}.kompletr .input--search,.kompletr .item--result{font-family:"Open Sans",sans-serif;font-size:100%}.kompletr .input--search{display:block;box-sizing:border-box;margin:0 auto;padding:15px 10px;width:100%;min-width:240px;max-width:600px;height:auto;font-size:1.2rem;line-height:1.5;border:none}.kompletr .input--search:focus{border:none;outline:none}.kompletr .form--search__result{position:absolute;margin:0;width:100%}.kompletr .item--result{box-sizing:border-box;width:100%;padding:15px;display:flex;flex-wrap:wrap;justify-content:space-between;border-left:none;border-right:none}.kompletr .item--result:last-child{border-bottom:none}.kompletr .item--result:hover,.kompletr .item--result.focus{cursor:pointer;-webkit-transition:all 0.2s ease-in-out ease-in-out;transition:all 0.2s ease-in-out ease-in-out}.kompletr .item--result .item--data{flex:50%}.kompletr .item--result .item--data:nth-child(even){text-align:right}.kompletr .item--result .item--data:nth-child(0){font-weight:600}.kompletr .item--result .item--data:nth-child(n+2){font-weight:normal}.kompletr.light .input--search{color:#9e9e9e;background:#fff}.kompletr.light ::placeholder{color:silver}.kompletr.light .item--result{color:#333;border-bottom:1px dashed #dfdfdf;backdrop-filter:blur(16px) saturate(180%);-webkit-backdrop-filter:blur(16px) saturate(180%);background-color:rgba(255,255,255,0.75)}.kompletr.light .item--result:hover,.kompletr.light .item--result.focus{backdrop-filter:blur(26px) saturate(120%);-webkit-backdrop-filter:blur(26px) saturate(120%);background-color:rgba(255,255,255,0.5)}.kompletr.light .item--result:hover .item--data:nth-child(n+2),.kompletr.light .item--result.focus .item--data:nth-child(n+2){color:#333}.kompletr.light .item--result .item--data:nth-child(0){color:#333}.kompletr.light .item--result .item--data:nth-child(n+2){color:#9e9e9e}.kompletr.dark .input--search{color:#fff;background:#333}.kompletr.dark ::placeholder{color:silver}.kompletr.dark .item--result{color:#fff;border-bottom:1px dashed #9e9e9e;backdrop-filter:blur(16px) saturate(180%);-webkit-backdrop-filter:blur(16px) saturate(180%);background-color:rgba(51,51,51,0.75)}.kompletr.dark .item--result:hover,.kompletr.dark .item--result.focus{backdrop-filter:blur(26px) saturate(120%);-webkit-backdrop-filter:blur(26px) saturate(120%);background-color:rgba(51,51,51,0.5)}.kompletr.dark .item--result:hover .item--data:nth-child(n+2),.kompletr.dark .item--result.focus .item--data:nth-child(n+2){color:#fff}.kompletr.dark .item--result .item--data:nth-child(0){color:#fff}.kompletr.dark .item--result .item--data:nth-child(n+2){color:#9e9e9e} diff --git a/cypress-api/data.json b/demo/files/data.json similarity index 100% rename from cypress-api/data.json rename to demo/files/data.json diff --git a/demo/index.html b/demo/index.html new file mode 100644 index 0000000..e956de9 --- /dev/null +++ b/demo/index.html @@ -0,0 +1,109 @@ + + + + + Vanilla autocomplete module - Kømpletr.js + + + + + + + + + + + + + + + + + +
+

Documentation

+ + + + +
+ +
+

Kømpletr

+ 10kb of vanilla lightweight to add highly featured and eco friendly autocomplete on your pages. +
+ + + + + + + + diff --git a/demo/js/kompletr.min.js b/demo/js/kompletr.min.js new file mode 100644 index 0000000..f94b7ce --- /dev/null +++ b/demo/js/kompletr.min.js @@ -0,0 +1,2 @@ +var t={d:function(e,s){for(var r in s)t.o(s,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:s[r]})},o:function(t,e){return Object.prototype.hasOwnProperty.call(t,e)}},e={};t.d(e,{Z:function(){return y}});const s=Object.freeze({fadeIn:"fadeIn",slideDown:"slideDown"}),r=Object.freeze({error:"kompletr.error",domDone:"kompletr.dom.done",dataDone:"kompletr.data.done",selectDone:"kompletr.select.done"}),i=Object.freeze({cache:"cache",callback:"callback",local:"local"}),o=Object.freeze({prefix:"prefix",expression:"expression"}),a=Object.freeze({light:"light",dark:"dark"});class n{constructor(){}static fadeIn(t,e,s=500){t.style.opacity=0,t.style.display=e||"block",function e(){let s=parseFloat(t.style.opacity);(s+=.1)>1||(t.style.opacity=s,requestAnimationFrame(e))}()}static fadeOut(t,e=500){t.style.opacity=1,function e(){(t.style.opacity-=.1)<0?t.style.display="none":requestAnimationFrame(e)}()}static slideUp(t,e=500){t.style.transitionProperty="height, margin, padding",t.style.transitionDuration=e+"ms",t.style.boxSizing="border-box",t.style.height=t.offsetHeight+"px",t.offsetHeight,t.style.overflow="hidden",t.style.height=0,t.style.paddingTop=0,t.style.paddingBottom=0,t.style.marginTop=0,t.style.marginBottom=0,window.setTimeout((()=>{t.style.display="none",t.style.removeProperty("height"),t.style.removeProperty("padding-top"),t.style.removeProperty("padding-bottom"),t.style.removeProperty("margin-top"),t.style.removeProperty("margin-bottom"),t.style.removeProperty("overflow"),t.style.removeProperty("transition-duration"),t.style.removeProperty("transition-property")}),e)}static slideDown(t,e=500){t.style.removeProperty("display"),console.log(t);let s=window.getComputedStyle(t).display;"none"===s&&(s="block"),t.style.display=s;let r=t.offsetHeight;t.style.overflow="hidden",t.style.height=0,t.style.paddingTop=0,t.style.paddingBottom=0,t.style.marginTop=0,t.style.marginBottom=0,t.offsetHeight,t.style.boxSizing="border-box",t.style.transitionProperty="height, margin, padding",t.style.transitionDuration=e+"ms",t.style.height=r+"px",t.style.removeProperty("padding-top"),t.style.removeProperty("padding-bottom"),t.style.removeProperty("margin-top"),t.style.removeProperty("margin-bottom"),window.setTimeout((()=>{t.style.removeProperty("height"),t.style.removeProperty("overflow"),t.style.removeProperty("transition-duration"),t.style.removeProperty("transition-property")}),e)}static animateBack(t,e=s.fadeIn,r=500){return n[{fadeIn:"fadeOut",slideDown:"slideUp"}[e]](t,r)}}class l{broadcaster=null;cache=null;callbacks={};configuration=null;dom=null;props=null;constructor({configuration:t,properties:e,dom:s,cache:i,broadcaster:o,onKeyup:a,onSelect:n,onError:l}){try{this.configuration=t,this.broadcaster=o,this.props=e,this.dom=s,this.cache=i,this.broadcaster.subscribe(r.error,this.error),this.broadcaster.subscribe(r.dataDone,this.showResults),this.broadcaster.subscribe(r.domDone,this.bindResults),this.broadcaster.subscribe(r.selectDone,this.closeTheShop),this.broadcaster.listen(this.dom.input,"keyup",this.suggest),this.broadcaster.listen(this.dom.body,"click",this.closeTheShop),(a||n||l)&&(this.callbacks=Object.assign(this.callbacks,{onKeyup:a,onSelect:n,onError:l}))}catch(t){o.trigger(r.error,t)}}closeTheShop=t=>{if(t.srcElement===this.dom.input)return!0;n.animateBack(this.dom.result,this.configuration.animationType,this.configuration.animationDuration),this.resetPointer()};resetPointer=()=>{this.props.pointer=-1};error=t=>{console.error(`[kompletr] An error has occured -> ${t.stack}`),n.fadeIn(this.dom.result),this.callbacks.onError&&this.callbacks.onError(t)};showResults=async({from:t,data:e})=>{this.props.data=e,e=this.props.data.map(((t,e)=>({idx:e,data:t}))),this.callbacks.onKeyup||(e=e.filter((t=>{const e="string"==typeof t.data?t.data:t.data[this.configuration.propToMapAsValue];return"prefix"===this.configuration.filterOn?0===e.toLowerCase().lastIndexOf(this.dom.input.value.toLowerCase(),0):-1!==e.toLowerCase().lastIndexOf(this.dom.input.value.toLowerCase())}))),this.cache&&t!==i.cache&&this.cache.set({string:this.dom.input.value,data:e}),this.dom.buildResults(e.slice(0,this.configuration.maxResults),this.configuration.fieldsToDisplay)};bindResults=()=>{if(n[this.configuration.animationType](this.dom.result,this.configuration.animationDuration),this.dom.result?.children?.length)for(let t=0;t{this.broadcaster.listen(this.dom.result.children[t],"click",(()=>{this.dom.focused=this.dom.result.children[t],this.select(this.dom.focused.id)}))})(t)};suggest=t=>{if(this.dom.input.value.length{try{this.cache&&await this.cache.isValid(t)?this.cache.get(t,(t=>{this.broadcaster.trigger(r.dataDone,{from:i.cache,data:t})})):this.callbacks.onKeyup?this.callbacks.onKeyup(t,(t=>{this.broadcaster.trigger(r.dataDone,{from:i.callback,data:t})})):this.broadcaster.trigger(r.dataDone,{from:i.local,data:this.props.data})}catch(t){this.broadcaster.trigger(r.error,t)}};navigate=t=>(38==t||40==t)&&!(this.props.pointer<-1||this.props.pointer>this.dom.result.children.length-1)&&(38===t&&this.props.pointer>=-1?this.props.pointer--:40===t&&this.props.pointer{this.dom.input.value="object"==typeof this.props.data[t]?this.props.data[t][this.configuration.propToMapAsValue]:this.props.data[t],this.callbacks.onSelect(this.props.data[t]),this.broadcaster.trigger(r.selectDone)}}class h{_animationType=s.fadeIn;_animationDuration=500;_multiple=!1;_theme=a.light;_fieldsToDisplay=[];_maxResults=10;_startQueriyngFromChar=2;_propToMapAsValue="";_filterOn=o.prefix;_cache=0;get animationType(){return this._animationType}set animationType(t){const e=Object.keys(s);if(!e.includes(t))throw new Error(`animation.type should be one of ${e.toString()}`);this._animationType=t}get animationDuration(){return this._animationDuration}set animationDuration(t){if(isNaN(parseInt(t,10)))throw new Error("animation.duration should be an integer");this._animationDuration=t}get multiple(){return this._multiple}set multiple(t){this._multiple=t}get theme(){return this._theme}set theme(t){const e=Object.keys(a);if(!e.includes(t))throw new Error(`theme should be one of ${e.toString()}, ${t} given`);this._theme=t}get fieldsToDisplay(){return this._fieldsToDisplay}set fieldsToDisplay(t){this._fieldsToDisplay=t}get maxResults(){return this._maxResults}set maxResults(t){this._maxResults=t}get startQueriyngFromChar(){return this._startQueriyngFromChar}set startQueriyngFromChar(t){this._startQueriyngFromChar=t}get propToMapAsValue(){return this._propToMapAsValue}set propToMapAsValue(t){this._propToMapAsValue=t}get filterOn(){return this._filterOn}set filterOn(t){const e=Object.keys(o);if(!e.includes(t))throw new Error(`filterOn should be one of ${e.toString()}, ${t} given`);this._filterOn=t}get cache(){return this._cache}set cache(t){if(isNaN(parseInt(t,10)))throw new Error("cache should be an integer");this._cache=t}constructor(t){if(void 0!==t){if("object"!=typeof t)throw new Error("options should be an object");this._theme=t?.theme||this._theme,this._animationType=t?.animationType||this._animationType,this._animationDuration=t?.animationDuration||this._animationDuration,this._multiple=t?.multiple||this._multiple,this._fieldsToDisplay=t?.fieldsToDisplay||this._fieldsToDisplay,this._maxResults=t?.maxResults||this._maxResults,this._startQueriyngFromChar=t?.startQueriyngFromChar||this._startQueriyngFromChar,this._propToMapAsValue=t?.propToMapAsValue||this._propToMapAsValue,this._filterOn=t?.filterOn||this._filterOn,this._cache=t?.cache||this._cache}}}class c{_name=null;_duration=null;_braodcaster=null;constructor(t,e=0,s="kompletr.cache"){if(!window.caches)return!1;this._broadcaster=t,this._name=s,this._duration=e}get(t,e){window.caches.open(this._name).then((s=>{s.match(t).then((async t=>{e(await t.json())}))})).catch((t=>{this._broadcaster.trigger(r.error,t)}))}set({string:t,data:e}){window.caches.open(this._name).then((s=>{const r=new Headers;r.set("Content-Type","application/json"),r.set("Cache-Control",`max-age=${this._duration}`),s.put(`/${t}`,new Response(JSON.stringify(e),{headers:r}))})).catch((t=>{this._broadcaster.trigger(r.error,t)}))}async isValid(t){try{const e=await window.caches.open(this._name);return!!await e.match(`/${t}`)}catch(t){this._broadcaster.trigger(r.error,t)}}}class u{subscribers=[];constructor(){}subscribe(t,e){if(!Object.values(r).includes(t))throw new Error(`Event should be one of ${Object.keys(r)}: ${t} given.`);this.subscribers.push({type:t,handler:e})}listen(t,e,s){t.addEventListener(e,s)}trigger(t,e={}){if(!Object.values(r).includes(t))throw new Error(`Event should be one of ${Object.keys(r)}: ${t} given.`);this.subscribers.filter((e=>e.type===t)).forEach((t=>t.handler(e)))}}class p{_data=null;get data(){return this._data}set data(t){if(!Array.isArray(t))throw new Error(`data must be an array (${t.toString()} given)`);this._data=t}_pointer=null;get pointer(){return this._pointer}set pointer(t){if(isNaN(parseInt(t,10)))throw new Error(`pointer must be an integer (${t.toString()} given)`);this._pointer=t}_previousValue=null;get previousValue(){return this._previousValue}set previousValue(t){this._previousValue=t}constructor(t=[]){this._data=t}}class d{_body=null;get body(){return this._body}set body(t){this._body=t}_input=null;get input(){return this._input}set input(t){if(input instanceof HTMLInputElement==0)throw new Error(`input should be an HTMLInputElement instance: ${input} given.`);this._input=t}_focused=null;get focused(){return this._focused}set focused(t){this._focused=t}_result=null;get result(){return this._result}set result(t){this._result=t}_broadcaster=null;constructor(t,e,s={theme:"light"}){this._body=document.getElementsByTagName("body")[0],this._input=t instanceof HTMLInputElement?t:document.getElementById(t),this._input.setAttribute("class",`${this._input.getAttribute("class")} input--search`),this._result=this.build("div",[{id:"kpl-result"},{class:"form--search__result"}]),this._input.parentElement.setAttribute("class",`${this._input.parentElement.getAttribute("class")} kompletr ${s.theme}`),this._input.parentElement.appendChild(this._result),this._broadcaster=e}build(t,e=[]){const s=document.createElement(t);return e.forEach((t=>{s.setAttribute(Object.keys(t)[0],Object.values(t)[0])})),s}focus(t,e){if(!["add","remove"].includes(e))throw new Error('action should be one of ["add", "remove]: '+e+" given.");switch(e){case"add":this.focused=this.result.children[t],this.result.children[t].className+=" focus";break;case"remove":this.focused=null,Array.from(this.result.children).forEach((t=>{(t=>{t.className="item--result"})(t)}))}}buildResults(t,e){let s="";s=t&&t.length?t.reduce(((t,s)=>{switch(t+=`
`,typeof s.data){case"string":t+=`${s.data}`;break;case"object":let r=Array.isArray(e)&&e.length?e:Object.keys(s.data);for(let e=0;e${s.data[r[e]]}`}return t+"
"}),""):'
Not found
',this.result.innerHTML=s,this._broadcaster.trigger(r.domDone)}}const m=function({data:t,options:e,onKeyup:s,onSelect:r,onError:i}){const o=new u,a=new h(e),n=new p(t),m=new d(this,o,a),y=a.cache?new c(o,a.cache):null;new l({configuration:a,properties:n,dom:m,cache:y,broadcaster:o,onKeyup:s,onSelect:r,onError:i})};window.HTMLInputElement.prototype.kompletr=m;var y=m,g=e.Z;export{g as default}; +//# sourceMappingURL=kompletr.min.js.map \ No newline at end of file diff --git a/demo/js/kompletr.min.js.map b/demo/js/kompletr.min.js.map new file mode 100644 index 0000000..0f54687 --- /dev/null +++ b/demo/js/kompletr.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"kompletr.min.js","mappings":"AACA,IAAIA,EAAsB,CCA1BA,EAAwB,SAASC,EAASC,GACzC,IAAI,IAAIC,KAAOD,EACXF,EAAoBI,EAAEF,EAAYC,KAASH,EAAoBI,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAG3E,ECPAH,EAAwB,SAASS,EAAKC,GAAQ,OAAOL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,EAAO,G,qCCMtG,MAAMI,EAAYT,OAAOU,OAAO,CAC9BC,OAAQ,SACRC,UAAW,cAUP,EAAQZ,OAAOU,OAAO,CAC1BG,MAAO,iBACPC,QAAS,oBACTC,SAAU,qBACVC,WAAY,yBASRC,EAASjB,OAAOU,OAAO,CAC3BQ,MAAO,QACPC,SAAU,WACVC,MAAO,UASHC,EAAmBrB,OAAOU,OAAO,CACrCY,OAAQ,SACRC,WAAY,eASRC,EAAQxB,OAAOU,OAAO,CAC1Be,MAAO,QACPC,KAAM,SCnDD,MAAMC,EACX,WAAAC,GAAe,CAaf,aAAOjB,CAAOkB,EAASC,EAASC,EAAW,KACzCF,EAAQG,MAAMC,QAAU,EACxBJ,EAAQG,MAAMF,QAAUA,GAAW,QACnC,SAAUI,IACR,IAAIC,EAAQC,WAAWP,EAAQG,MAAMC,UAC9BE,GAAS,IAAM,IACpBN,EAAQG,MAAMC,QAAUE,EACxBE,sBAAsBH,GAEzB,CAND,EAOF,CAYA,cAAOI,CAAQT,EAASE,EAAW,KACjCF,EAAQG,MAAMC,QAAU,EACxB,SAAUC,KACHL,EAAQG,MAAMC,SAAW,IAAM,EAClCJ,EAAQG,MAAMF,QAAU,OAExBO,sBAAsBH,EAEzB,CAND,EAOF,CAUA,cAAOK,CAAQV,EAASE,EAAW,KACjCF,EAAQG,MAAMQ,mBAAqB,0BACnCX,EAAQG,MAAMS,mBAAqBV,EAAW,KAC9CF,EAAQG,MAAMU,UAAY,aAC1Bb,EAAQG,MAAMW,OAASd,EAAQe,aAAe,KAC9Cf,EAAQe,aACRf,EAAQG,MAAMa,SAAW,SACzBhB,EAAQG,MAAMW,OAAS,EACvBd,EAAQG,MAAMc,WAAa,EAC3BjB,EAAQG,MAAMe,cAAgB,EAC9BlB,EAAQG,MAAMgB,UAAY,EAC1BnB,EAAQG,MAAMiB,aAAe,EAC7BC,OAAOC,YAAY,KACjBtB,EAAQG,MAAMF,QAAU,OACxBD,EAAQG,MAAMoB,eAAe,UAC7BvB,EAAQG,MAAMoB,eAAe,eAC7BvB,EAAQG,MAAMoB,eAAe,kBAC7BvB,EAAQG,MAAMoB,eAAe,cAC7BvB,EAAQG,MAAMoB,eAAe,iBAC7BvB,EAAQG,MAAMoB,eAAe,YAC7BvB,EAAQG,MAAMoB,eAAe,uBAC7BvB,EAAQG,MAAMoB,eAAe,sBAAsB,GAClDrB,EACL,CAUA,gBAAOnB,CAAUiB,EAASE,EAAW,KACnCF,EAAQG,MAAMoB,eAAe,WAC7BC,QAAQC,IAAIzB,GACZ,IAAIC,EAAUoB,OAAOK,iBAAiB1B,GAASC,QAC/B,SAAZA,IAAoBA,EAAU,SAClCD,EAAQG,MAAMF,QAAUA,EACxB,IAAIa,EAASd,EAAQe,aACrBf,EAAQG,MAAMa,SAAW,SACzBhB,EAAQG,MAAMW,OAAS,EACvBd,EAAQG,MAAMc,WAAa,EAC3BjB,EAAQG,MAAMe,cAAgB,EAC9BlB,EAAQG,MAAMgB,UAAY,EAC1BnB,EAAQG,MAAMiB,aAAe,EAC7BpB,EAAQe,aACRf,EAAQG,MAAMU,UAAY,aAC1Bb,EAAQG,MAAMQ,mBAAqB,0BACnCX,EAAQG,MAAMS,mBAAqBV,EAAW,KAC9CF,EAAQG,MAAMW,OAASA,EAAS,KAChCd,EAAQG,MAAMoB,eAAe,eAC7BvB,EAAQG,MAAMoB,eAAe,kBAC7BvB,EAAQG,MAAMoB,eAAe,cAC7BvB,EAAQG,MAAMoB,eAAe,iBAC7BF,OAAOC,YAAY,KACjBtB,EAAQG,MAAMoB,eAAe,UAC7BvB,EAAQG,MAAMoB,eAAe,YAC7BvB,EAAQG,MAAMoB,eAAe,uBAC7BvB,EAAQG,MAAMoB,eAAe,sBAAsB,GACnDrB,EACJ,CAWA,kBAAOyB,CAAY3B,EAAS4B,EAAOhD,EAAUE,OAASoB,EAAW,KAK/D,OAAOJ,EAJY,CACjBhB,OAAQ,UACRC,UAAW,WAEe6C,IAAO5B,EAASE,EAC9C,EC/Ha,MAAM2B,EACnBC,YAAc,KAKdzC,MAAQ,KAKR0C,UAAY,CAAC,EAKbC,cAAgB,KAKhBC,IAAM,KAKNC,MAAQ,KAER,WAAAnC,EAAY,cAAEiC,EAAa,WAAEG,EAAU,IAAEF,EAAG,MAAE5C,EAAK,YAAEyC,EAAW,QAAEM,EAAO,SAAEC,EAAQ,QAAEC,IACnF,IACEC,KAAKP,cAAgBA,EACrBO,KAAKT,YAAcA,EACnBS,KAAKL,MAAQC,EACbI,KAAKN,IAAMA,EACXM,KAAKlD,MAAQA,EAEbkD,KAAKT,YAAYU,UAAU,EAAMxD,MAAOuD,KAAKvD,OAC7CuD,KAAKT,YAAYU,UAAU,EAAMtD,SAAUqD,KAAKE,aAChDF,KAAKT,YAAYU,UAAU,EAAMvD,QAASsD,KAAKG,aAC/CH,KAAKT,YAAYU,UAAU,EAAMrD,WAAYoD,KAAKI,cAElDJ,KAAKT,YAAYc,OAAOL,KAAKN,IAAIY,MAAO,QAASN,KAAKO,SACtDP,KAAKT,YAAYc,OAAOL,KAAKN,IAAIc,KAAM,QAASR,KAAKI,eAElDP,GAAWC,GAAYC,KACxBC,KAAKR,UAAY5D,OAAO6E,OAAOT,KAAKR,UAAW,CAAEK,UAASC,WAAUC,YAExE,CAAE,MAAMW,GACNnB,EAAYoB,QAAQ,EAAMlE,MAAOiE,EACnC,CACF,CAEAN,aAAgBM,IACd,GAAIA,EAAEE,aAAeZ,KAAKN,IAAIY,MAC5B,OAAO,EAET/C,EAAU6B,YAAYY,KAAKN,IAAImB,OAAQb,KAAKP,cAAcqB,cAAed,KAAKP,cAAcsB,mBAC5Ff,KAAKgB,cAAc,EAGrBA,aAAe,KACbhB,KAAKL,MAAMsB,SAAW,CAAC,EAGzBxE,MAASiE,IACPzB,QAAQxC,MAAM,sCAAsCiE,EAAEQ,SACtD3D,EAAUhB,OAAOyD,KAAKN,IAAImB,QAC1Bb,KAAKR,UAAUO,SAAWC,KAAKR,UAAUO,QAAQW,EAAE,EAQrDR,YAAciB,OAASC,OAAMC,WAC3BrB,KAAKL,MAAM0B,KAAOA,EAElBA,EAAOrB,KAAKL,MAAM0B,KAAKC,KAAI,CAACC,EAAQC,KAAQ,CAAGA,MAAKH,KAAME,MAErDvB,KAAKR,UAAUK,UAClBwB,EAAOA,EAAKI,QAAQF,IAClB,MAAMxD,EAA+B,iBAAhBwD,EAAOF,KAAoBE,EAAOF,KAAOE,EAAOF,KAAKrB,KAAKP,cAAciC,kBAC7F,MAAoC,WAAhC1B,KAAKP,cAAckC,SAC6D,IAA3E5D,EAAM6D,cAAcC,YAAY7B,KAAKN,IAAIY,MAAMvC,MAAM6D,cAAe,IAEG,IAAzE7D,EAAM6D,cAAcC,YAAY7B,KAAKN,IAAIY,MAAMvC,MAAM6D,cAAqB,KAIjF5B,KAAKlD,OAASsE,IAASvE,EAAOC,OAChCkD,KAAKlD,MAAMgF,IAAI,CAAEC,OAAQ/B,KAAKN,IAAIY,MAAMvC,MAAOsD,SAGjDrB,KAAKN,IAAIsC,aAAaX,EAAKY,MAAM,EAAGjC,KAAKP,cAAcyC,YAAalC,KAAKP,cAAc0C,gBAAgB,EAMzGhC,YAAc,KAEZ,GADA5C,EAAUyC,KAAKP,cAAcqB,eAAed,KAAKN,IAAImB,OAAQb,KAAKP,cAAcsB,mBAC7Ef,KAAKN,IAAImB,QAAQuB,UAAUC,OAC5B,IAAI,IAAIC,EAAI,EAAGA,EAAItC,KAAKN,IAAImB,OAAOuB,SAASC,OAAQC,IAClD,CAAEA,IACOtC,KAAKT,YAAYc,OAAOL,KAAKN,IAAImB,OAAOuB,SAASE,GAAI,SAAS,KACnEtC,KAAKN,IAAI6C,QAAUvC,KAAKN,IAAImB,OAAOuB,SAASE,GAC5CtC,KAAKwC,OAAOxC,KAAKN,IAAI6C,QAAQE,GAAG,GAEnC,EALD,CAKGH,EAEP,EAMF/B,QAAWG,IACT,GAAIV,KAAKN,IAAIY,MAAMvC,MAAMsE,OAASrC,KAAKP,cAAciD,sBACnD,OAGF,MAAMC,EAAUjC,EAAEiC,QAElB,OAAQA,GACN,KAAK,GACH3C,KAAKwC,OAAOxC,KAAKN,IAAI6C,QAAQE,IAC7B,MACF,KAAK,GACL,KAAK,GACHzC,KAAK4C,SAASD,GACd,MACF,QACM3C,KAAKN,IAAIY,MAAMvC,QAAUiC,KAAKL,MAAMkD,eACtC7C,KAAK8C,QAAQ9C,KAAKN,IAAIY,MAAMvC,OAE9BiC,KAAKgB,eAET,EAeF8B,QAAU3B,MAAOpD,IACf,IACMiC,KAAKlD,aAAekD,KAAKlD,MAAMiG,QAAQhF,GACzCiC,KAAKlD,MAAMf,IAAIgC,GAAQsD,IACrBrB,KAAKT,YAAYoB,QAAQ,EAAMhE,SAAU,CAAEyE,KAAMvE,EAAOC,MAAOuE,KAAMA,GAAO,IAErErB,KAAKR,UAAUK,QACxBG,KAAKR,UAAUK,QAAQ9B,GAAQsD,IAC7BrB,KAAKT,YAAYoB,QAAQ,EAAMhE,SAAU,CAAEyE,KAAMvE,EAAOE,SAAUsE,KAAMA,GAAO,IAGjFrB,KAAKT,YAAYoB,QAAQ,EAAMhE,SAAU,CAAEyE,KAAMvE,EAAOG,MAAOqE,KAAMrB,KAAKL,MAAM0B,MAEpF,CAAE,MAAMX,GACNV,KAAKT,YAAYoB,QAAQ,EAAMlE,MAAOiE,EACxC,GAUFkC,SAAYD,IACK,IAAXA,GAA4B,IAAXA,MAIlB3C,KAAKL,MAAMsB,SAAW,GAAKjB,KAAKL,MAAMsB,QAAUjB,KAAKN,IAAImB,OAAOuB,SAASC,OAAS,KAIrE,KAAZM,GAAkB3C,KAAKL,MAAMsB,UAAY,EAC3CjB,KAAKL,MAAMsB,UACU,KAAZ0B,GAAkB3C,KAAKL,MAAMsB,QAAUjB,KAAKN,IAAImB,OAAOuB,SAASC,OAAS,GAClFrC,KAAKL,MAAMsB,UAGbjB,KAAKN,IAAIsD,MAAMhD,KAAKL,MAAMsB,QAAS,eACnCjB,KAAKN,IAAIsD,MAAMhD,KAAKL,MAAMsB,QAAS,QAYrCuB,OAAS,CAAChB,EAAM,KACdxB,KAAKN,IAAIY,MAAMvC,MAAwC,iBAAzBiC,KAAKL,MAAM0B,KAAKG,GAAoBxB,KAAKL,MAAM0B,KAAKG,GAAKxB,KAAKP,cAAciC,kBAAoB1B,KAAKL,MAAM0B,KAAKG,GAC9IxB,KAAKR,UAAUM,SAASE,KAAKL,MAAM0B,KAAKG,IACxCxB,KAAKT,YAAYoB,QAAQ,EAAM/D,WAAW,ECvNvC,MAAMqG,EAKXC,eAAiB7G,EAAUE,OAM3B4G,mBAAqB,IAOrBC,WAAY,EAMZC,OAASjG,EAAMC,MAOfiG,iBAAmB,GAMnBC,YAAc,GAMdC,uBAAyB,EAOzBC,kBAAoB,GAOpBC,UAAYzG,EAAiBC,OAO7ByG,OAAS,EAKT,iBAAI7C,GACF,OAAOd,KAAKkD,cACd,CAEA,iBAAIpC,CAAc/C,GAChB,MAAM6F,EAAQhI,OAAOiI,KAAKxH,GAC1B,IAAKuH,EAAME,SAAS/F,GAClB,MAAM,IAAIgG,MAAM,mCAAmCH,EAAMI,cAE3DhE,KAAKkD,eAAiBnF,CACxB,CAKA,qBAAIgD,GACF,OAAOf,KAAKmD,kBACd,CAEA,qBAAIpC,CAAkBhD,GACpB,GAAIkG,MAAMC,SAASnG,EAAO,KACxB,MAAM,IAAIgG,MAAM,2CAElB/D,KAAKmD,mBAAqBpF,CAC5B,CAKA,YAAIoG,GACF,OAAOnE,KAAKoD,SACd,CAEA,YAAIe,CAASpG,GACXiC,KAAKoD,UAAYrF,CACnB,CAKA,SAAIX,GACF,OAAO4C,KAAKqD,MACd,CAEA,SAAIjG,CAAMW,GACR,MAAM6F,EAAQhI,OAAOiI,KAAKzG,GAC1B,IAAKwG,EAAME,SAAS/F,GAClB,MAAM,IAAIgG,MAAM,0BAA0BH,EAAMI,eAAejG,WAEjEiC,KAAKqD,OAAStF,CAChB,CAKA,mBAAIoE,GACF,OAAOnC,KAAKsD,gBACd,CAEA,mBAAInB,CAAgBpE,GAClBiC,KAAKsD,iBAAmBvF,CAC1B,CAKA,cAAImE,GACF,OAAOlC,KAAKuD,WACd,CAEA,cAAIrB,CAAWnE,GACbiC,KAAKuD,YAAcxF,CACrB,CAKA,yBAAI2E,GACF,OAAO1C,KAAKwD,sBACd,CAEA,yBAAId,CAAsB3E,GACxBiC,KAAKwD,uBAAyBzF,CAChC,CAKA,oBAAI2D,GACF,OAAO1B,KAAKyD,iBACd,CAEA,oBAAI/B,CAAiB3D,GACnBiC,KAAKyD,kBAAoB1F,CAC3B,CAKA,YAAI4D,GACF,OAAO3B,KAAK0D,SACd,CAEA,YAAI/B,CAAS5D,GACX,MAAM6F,EAAQhI,OAAOiI,KAAK5G,GAC1B,IAAK2G,EAAME,SAAS/F,GAClB,MAAM,IAAIgG,MAAM,6BAA6BH,EAAMI,eAAejG,WAEpEiC,KAAK0D,UAAY3F,CACnB,CAKA,SAAIjB,GACF,OAAOkD,KAAK2D,MACd,CAEA,SAAI7G,CAAMiB,GACR,GAAIkG,MAAMC,SAASnG,EAAO,KACxB,MAAM,IAAIgG,MAAM,8BAElB/D,KAAK2D,OAAS5F,CAChB,CAEA,WAAAP,CAAY4G,GACV,QAAgBC,IAAZD,EAAJ,CACA,GAAuB,iBAAZA,EACT,MAAM,IAAIL,MAAM,+BAElB/D,KAAKqD,OAASe,GAAShH,OAAS4C,KAAKqD,OACrCrD,KAAKkD,eAAiBkB,GAAStD,eAAiBd,KAAKkD,eACrDlD,KAAKmD,mBAAqBiB,GAASrD,mBAAqBf,KAAKmD,mBAC7DnD,KAAKoD,UAAYgB,GAASD,UAAYnE,KAAKoD,UAC3CpD,KAAKsD,iBAAmBc,GAASjC,iBAAmBnC,KAAKsD,iBACzDtD,KAAKuD,YAAca,GAASlC,YAAclC,KAAKuD,YAC/CvD,KAAKwD,uBAAyBY,GAAS1B,uBAAyB1C,KAAKwD,uBACrExD,KAAKyD,kBAAoBW,GAAS1C,kBAAoB1B,KAAKyD,kBAC3DzD,KAAK0D,UAAYU,GAASzC,UAAY3B,KAAK0D,UAC3C1D,KAAK2D,OAASS,GAAStH,OAASkD,KAAK2D,MAbJ,CAcnC,EC9MK,MAAMW,EAKXC,MAAQ,KAKRC,UAAY,KAKZC,aAAe,KAEf,WAAAjH,CAAY+B,EAAa5B,EAAW,EAAG+G,EAAO,kBAC5C,IAAK5F,OAAO6F,OACV,OAAO,EAET3E,KAAK4E,aAAerF,EACpBS,KAAKuE,MAAQG,EACb1E,KAAKwE,UAAY7G,CACnB,CAaA,GAAA5B,CAAIgG,EAAQ8C,GACV/F,OAAO6F,OAAOG,KAAK9E,KAAKuE,OACrBQ,MAAKjI,IACJA,EAAMkI,MAAMjD,GACTgD,MAAK5D,MAAOE,IACXwD,QAAWxD,EAAK4D,OAAO,GACvB,IAELC,OAAMxE,IACLV,KAAK4E,aAAajE,QAAQ,EAAMlE,MAAOiE,EAAE,GAE/C,CAWA,GAAAoB,EAAI,OAAEC,EAAM,KAAEV,IACZvC,OAAO6F,OAAOG,KAAK9E,KAAKuE,OACrBQ,MAAKjI,IACJ,MAAMqI,EAAU,IAAIC,QACpBD,EAAQrD,IAAI,eAAgB,oBAC5BqD,EAAQrD,IAAI,gBAAiB,WAAW9B,KAAKwE,aAC7C1H,EAAMuI,IAAI,IAAItD,IAAU,IAAIuD,SAASC,KAAKC,UAAUnE,GAAO,CAAE8D,YAAW,IAEzED,OAAMxE,IACLV,KAAK4E,aAAajE,QAAQ,EAAMlE,MAAOiE,EAAE,GAE/C,CASA,aAAMqC,CAAQhB,GACZ,IACE,MAAMjF,QAAcgC,OAAO6F,OAAOG,KAAK9E,KAAKuE,OAE5C,cADuBzH,EAAMkI,MAAM,IAAIjD,IAKzC,CAAE,MAAMrB,GACNV,KAAK4E,aAAajE,QAAQ,EAAMlE,MAAOiE,EACzC,CACF,EC7FK,MAAM+E,EACXC,YAAc,GAEd,WAAAlI,GAAe,CAUf,SAAAyC,CAAUZ,EAAMsG,GACd,IAAK/J,OAAOgK,OAAO,GAAO9B,SAASzE,GACjC,MAAM,IAAI0E,MAAM,0BAA0BnI,OAAOiI,KAAK,OAAWxE,YAEnEW,KAAK0F,YAAYG,KAAK,CAAExG,OAAMsG,WAChC,CASA,MAAAtF,CAAO5C,EAAS4B,EAAMsG,GACpBlI,EAAQqI,iBAAiBzG,EAAMsG,EACjC,CAUA,OAAAhF,CAAQtB,EAAM0G,EAAS,CAAC,GACtB,IAAKnK,OAAOgK,OAAO,GAAO9B,SAASzE,GACjC,MAAM,IAAI0E,MAAM,0BAA0BnI,OAAOiI,KAAK,OAAWxE,YAGnEW,KAAK0F,YACFjE,QAAOuE,GAAcA,EAAW3G,OAASA,IACzC4G,SAAQD,GAAcA,EAAWL,QAAQI,IAC9C,ECjDK,MAAMG,EAKXC,MAAQ,KAER,QAAI9E,GACF,OAAOrB,KAAKmG,KACd,CAEA,QAAI9E,CAAKtD,GACP,IAAKqI,MAAMC,QAAQtI,GACjB,MAAM,IAAIgG,MAAM,0BAA0BhG,EAAMiG,qBAElDhE,KAAKmG,MAAQpI,CACf,CAKAuI,SAAW,KAEX,WAAIrF,GACF,OAAOjB,KAAKsG,QACd,CAEA,WAAIrF,CAAQlD,GACV,GAAIkG,MAAMC,SAASnG,EAAO,KACxB,MAAM,IAAIgG,MAAM,+BAA+BhG,EAAMiG,qBAEvDhE,KAAKsG,SAAWvI,CAClB,CAKAwI,eAAiB,KAEjB,iBAAI1D,GACF,OAAO7C,KAAKuG,cACd,CAEA,iBAAI1D,CAAc9E,GAChBiC,KAAKuG,eAAiBxI,CACxB,CAEA,WAAAP,CAAY6D,EAAO,IACjBrB,KAAKmG,MAAQ9E,CACf,EC/CK,MAAMmF,EAKXC,MAAQ,KAER,QAAIjG,GACF,OAAOR,KAAKyG,KACd,CAEA,QAAIjG,CAAKzC,GACPiC,KAAKyG,MAAQ1I,CACf,CAKA2I,OAAS,KAET,SAAIpG,GACF,OAAON,KAAK0G,MACd,CAEA,SAAIpG,CAAMvC,GACR,GAAIuC,iBAAiBqG,kBAAqB,EACxC,MAAM,IAAI5C,MAAM,iDAAiDzD,gBAEnEN,KAAK0G,OAAS3I,CAChB,CAKA6I,SAAW,KAEX,WAAIrE,GACF,OAAOvC,KAAK4G,QACd,CAEA,WAAIrE,CAAQxE,GACViC,KAAK4G,SAAW7I,CAClB,CAKA8I,QAAU,KAEV,UAAIhG,GACF,OAAOb,KAAK6G,OACd,CAEA,UAAIhG,CAAO9C,GACTiC,KAAK6G,QAAU9I,CACjB,CAEA6G,aAAe,KAIf,WAAApH,CAAY8C,EAAOf,EAAa6E,EAAU,CAAEhH,MAAO,UACjD4C,KAAKyG,MAAQK,SAASC,qBAAqB,QAAQ,GAEnD/G,KAAK0G,OAASpG,aAAiBqG,iBAAmBrG,EAAQwG,SAASE,eAAe1G,GAClFN,KAAK0G,OAAOO,aAAa,QAAS,GAAGjH,KAAK0G,OAAOQ,aAAa,0BAE9DlH,KAAK6G,QAAU7G,KAAKmH,MAAM,MAAO,CAAE,CAAE1E,GAAI,cAAgB,CAAE2E,MAAO,0BAElEpH,KAAK0G,OAAOW,cAAcJ,aAAa,QAAS,GAAGjH,KAAK0G,OAAOW,cAAcH,aAAa,qBAAqB9C,EAAQhH,SACvH4C,KAAK0G,OAAOW,cAAcC,YAAYtH,KAAK6G,SAG3C7G,KAAK4E,aAAerF,CACtB,CAUA,KAAA4H,CAAM1J,EAAS8J,EAAa,IAC1B,MAAMC,EAAcV,SAASW,cAAchK,GAI3C,OAHA8J,EAAWtB,SAAQyB,IACjBF,EAAYP,aAAarL,OAAOiI,KAAK6D,GAAW,GAAI9L,OAAOgK,OAAO8B,GAAW,GAAG,IAE3EF,CACR,CASD,KAAAxE,CAAM/B,EAAS0G,GACb,IAAK,CAAC,MAAO,UAAU7D,SAAS6D,GAC9B,MAAM,IAAI5D,MAAM,6CAA+C4D,EAAS,WAG1E,OAAQA,GACN,IAAK,MACH3H,KAAKuC,QAAUvC,KAAKa,OAAOuB,SAASnB,GACpCjB,KAAKa,OAAOuB,SAASnB,GAAS2G,WAAa,SAC3C,MACF,IAAK,SACH5H,KAAKuC,QAAU,KACf6D,MAAMhF,KAAKpB,KAAKa,OAAOuB,UAAU6D,SAAQpF,IACvC,CAAEA,IACAA,EAAO+G,UAAY,cACpB,EAFD,CAEG/G,EAAM,IAIjB,CAOA,YAAAmB,CAAaX,EAAMc,GACjB,IAAI0F,EAAO,GAGTA,EADCxG,GAAQA,EAAKgB,OACPhB,EACJyG,QAAO,CAACD,EAAME,KAEb,OADAF,GAAQ,YAAYE,EAAQvG,oCACbuG,EAAQ1G,MACrB,IAAK,SACHwG,GAAQ,4BAA4BE,EAAQ1G,cAC5C,MACF,IAAK,SACH,IAAIzB,EAAawG,MAAMC,QAAQlE,IAAoBA,EAAgBE,OAASF,EAAiBvG,OAAOiI,KAAKkE,EAAQ1G,MACjH,IAAI,IAAI2G,EAAI,EAAGA,EAAIpI,EAAWyC,OAAQ2F,IACpCH,GAAQ,4BAA4BE,EAAQ1G,KAAKzB,EAAWoI,aAKlE,OADAH,EAAQ,QACG,GACV,IAGE,4CAGT7H,KAAKa,OAAOoH,UAAYJ,EACxB7H,KAAK4E,aAAajE,QAAQ,EAAMjE,QAClC,EC3IF,MAAMwL,EAAW,UAAS,KAAE7G,EAAI,QAAE+C,EAAO,QAAEvE,EAAO,SAAEC,EAAQ,QAAEC,IAC5D,MAAMR,EAAc,IAAIkG,EAElBhG,EAAgB,IAAIwD,EAAcmB,GAClCxE,EAAa,IAAIsG,EAAW7E,GAE5B3B,EAAM,IAAI8G,EAAIxG,KAAMT,EAAaE,GACjC3C,EAAQ2C,EAAc3C,MAAQ,IAAIwH,EAAM/E,EAAaE,EAAc3C,OAAS,KAElF,IAAIwC,EAAS,CAAEG,gBAAeG,aAAYF,MAAK5C,QAAOyC,cAAaM,UAASC,WAAUC,WACxF,EAEAjB,OAAO6H,iBAAiBzK,UAAUgM,SAAWA,EAE7C,Q","sources":["webpack://kompletr/webpack/bootstrap","webpack://kompletr/webpack/runtime/define property getters","webpack://kompletr/webpack/runtime/hasOwnProperty shorthand","webpack://kompletr/./src/js/enums.js","webpack://kompletr/./src/js/animation.js","webpack://kompletr/./src/js/kompletr.js","webpack://kompletr/./src/js/configuration.js","webpack://kompletr/./src/js/cache.js","webpack://kompletr/./src/js/broadcaster.js","webpack://kompletr/./src/js/properties.js","webpack://kompletr/./src/js/dom.js","webpack://kompletr/./src/js/index.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","/**\n * Enum representing different animation types.\n * \n * @enum {string}\n * @readonly\n */\nconst animation = Object.freeze({\n fadeIn: 'fadeIn',\n slideDown: 'slideDown',\n});\n\n\n/**\n * Enum representing different custom events.\n * \n * @enum {string}\n * @readonly\n */\nconst event = Object.freeze({\n error: 'kompletr.error',\n domDone: 'kompletr.dom.done',\n dataDone: 'kompletr.data.done',\n selectDone: 'kompletr.select.done'\n});\n\n/**\n * Enum representing the origin of a value.\n * \n * @enum {string}\n * @readonly\n */\nconst origin = Object.freeze({\n cache: 'cache',\n callback: 'callback',\n local: 'local',\n});\n\n/**\n * Enum representing the search expression options.\n * \n * @enum {string}\n * @readonly\n */\nconst searchExpression = Object.freeze({\n prefix: 'prefix',\n expression: 'expression',\n});\n\n/**\n * Enum representing the theme options.\n *\n * @enum {string}\n * @readonly\n */\nconst theme = Object.freeze({\n light: 'light',\n dark: 'dark',\n});\n\nexport { animation, event, origin, searchExpression, theme }","import { animation } from \"./enums.js\";\n\n/**\n * Represents an Animation class that provides various animation effects.\n */\nexport class Animation {\n constructor() {}\n\n /**\n * Apply a fadeIn animation effect to the target HTML element.\n * \n * @param {HTMLElement} element - The target HTML element.\n * @param {String} display - The CSS3 display property value.\n * @param {Number} duration - The duration of the animation in milliseconds.\n * \n * @returns {Void}\n * \n * @todo Manage duration\n */\n static fadeIn(element, display, duration = 500) {\n element.style.opacity = 0;\n element.style.display = display || 'block';\n (function fade(){\n let value = parseFloat(element.style.opacity);\n if (!((value += .1) > 1)) {\n element.style.opacity = value;\n requestAnimationFrame(fade);\n }\n })();\n };\n\n /**\n * Apply a fadeOut animation effect to the target HTML element.\n * \n * @param {HTMLElement} element - The target HTML element.\n * @param {Number} duration - The duration of the animation in milliseconds.\n * \n * @returns {Void}\n * \n * @todo Manage duration\n */\n static fadeOut(element, duration = 500) {\n element.style.opacity = 1;\n (function fade() {\n if ((element.style.opacity -= .1) < 0) {\n element.style.display = 'none';\n } else {\n requestAnimationFrame(fade);\n }\n })();\n };\n\n /**\n * Apply a slideUp animation effect to the target HTML element.\n * \n * @param {HTMLElement} element - The target HTML element.\n * @param {Number} duration - The duration of the animation in milliseconds.\n * \n * @returns {Void}\n */\n static slideUp(element, duration = 500) {\n element.style.transitionProperty = 'height, margin, padding';\n element.style.transitionDuration = duration + 'ms';\n element.style.boxSizing = 'border-box';\n element.style.height = element.offsetHeight + 'px';\n element.offsetHeight;\n element.style.overflow = 'hidden';\n element.style.height = 0;\n element.style.paddingTop = 0;\n element.style.paddingBottom = 0;\n element.style.marginTop = 0;\n element.style.marginBottom = 0;\n window.setTimeout( () => {\n element.style.display = 'none';\n element.style.removeProperty('height');\n element.style.removeProperty('padding-top');\n element.style.removeProperty('padding-bottom');\n element.style.removeProperty('margin-top');\n element.style.removeProperty('margin-bottom');\n element.style.removeProperty('overflow');\n element.style.removeProperty('transition-duration');\n element.style.removeProperty('transition-property');\n }, duration);\n };\n\n /**\n * Apply a slideDown animation effect to the target HTML element.\n * \n * @param {HTMLElement} element - The target HTML element.\n * @param {Number} duration - The duration of the animation in milliseconds.\n * \n * @returns {Void}\n */\n static slideDown(element, duration = 500) {\n element.style.removeProperty('display');\n console.log(element)\n let display = window.getComputedStyle(element).display;\n if (display === 'none') display = 'block';\n element.style.display = display;\n let height = element.offsetHeight;\n element.style.overflow = 'hidden';\n element.style.height = 0;\n element.style.paddingTop = 0;\n element.style.paddingBottom = 0;\n element.style.marginTop = 0;\n element.style.marginBottom = 0;\n element.offsetHeight;\n element.style.boxSizing = 'border-box';\n element.style.transitionProperty = \"height, margin, padding\";\n element.style.transitionDuration = duration + 'ms';\n element.style.height = height + 'px';\n element.style.removeProperty('padding-top');\n element.style.removeProperty('padding-bottom');\n element.style.removeProperty('margin-top');\n element.style.removeProperty('margin-bottom');\n window.setTimeout( () => {\n element.style.removeProperty('height');\n element.style.removeProperty('overflow');\n element.style.removeProperty('transition-duration');\n element.style.removeProperty('transition-property');\n },duration);\n };\n\n /**\n * Apply the opposite animation effect to a given element.\n * \n * @param {HTMLElement} element - The element to animate.\n * @param {string} [type=animation.fadeIn] - The animation to apply. By default, it's 'fadeIn'.\n * @param {number} [duration=500] - The duration of the animation in milliseconds. By default, it's 500.\n * \n * @return {Object} Returns the result of the Animation function with the opposite animation, the element, and the duration as parameters.\n */\n static animateBack(element, type = animation.fadeIn , duration = 500) {\n const animations = {\n fadeIn: 'fadeOut',\n slideDown: 'slideUp'\n };\n return Animation[animations[type]](element, duration);\n }\n};","\nimport { Animation } from './animation.js';\nimport { event, origin } from './enums.js';\n\n/**\n * @summary Kømpletr.js is a library providing features dedicated to autocomplete fields.\n * \n * @author Steve Lebleu \n * \n * @see https://github.com/steve-lebleu/kompletr\n */\nexport default class Kompletr {\n broadcaster = null;\n\n /**\n * \n */\n cache = null;\n\n /**\n * \n */\n callbacks = {};\n\n /**\n * \n */\n configuration = null;\n\n /**\n * \n */\n dom = null;\n\n /**\n * \n */\n props = null;\n\n constructor({ configuration, properties, dom, cache, broadcaster, onKeyup, onSelect, onError }) {\n try {\n this.configuration = configuration;\n this.broadcaster = broadcaster;\n this.props = properties;\n this.dom = dom;\n this.cache = cache;\n\n this.broadcaster.subscribe(event.error, this.error);\n this.broadcaster.subscribe(event.dataDone, this.showResults);\n this.broadcaster.subscribe(event.domDone, this.bindResults);\n this.broadcaster.subscribe(event.selectDone, this.closeTheShop);\n\n this.broadcaster.listen(this.dom.input, 'keyup', this.suggest);\n this.broadcaster.listen(this.dom.body, 'click', this.closeTheShop); // TODO: validate this because it can be called many times if many kompletr instances\n\n if(onKeyup || onSelect || onError) {\n this.callbacks = Object.assign(this.callbacks, { onKeyup, onSelect, onError });\n }\n } catch(e) {\n broadcaster.trigger(event.error, e);\n }\n }\n\n closeTheShop = (e) => {\n if (e.srcElement === this.dom.input) {\n return true;\n }\n Animation.animateBack(this.dom.result, this.configuration.animationType, this.configuration.animationDuration);\n this.resetPointer();\n }\n\n resetPointer = () => {\n this.props.pointer = -1;\n }\n\n error = (e) => {\n console.error(`[kompletr] An error has occured -> ${e.stack}`);\n Animation.fadeIn(this.dom.result);\n this.callbacks.onError && this.callbacks.onError(e);\n }\n\n /**\n * @description CustomEvent 'this.request.done' listener\n * \n * @todo Check something else to determine if we filter or not -> currently just the presence of onKeyup callback\n */\n showResults = async ({ from, data }) => {\n this.props.data = data;\n\n data = this.props.data.map((record, idx) => ({ idx, data: record }) ); // TODO: Check if we can avoid this step\n\n if (!this.callbacks.onKeyup) {\n data = data.filter((record) => {\n const value = typeof record.data === 'string' ? record.data : record.data[this.configuration.propToMapAsValue];\n if (this.configuration.filterOn === 'prefix') {\n return value.toLowerCase().lastIndexOf(this.dom.input.value.toLowerCase(), 0) === 0;\n }\n return value.toLowerCase().lastIndexOf(this.dom.input.value.toLowerCase()) !== -1;\n });\n }\n\n if (this.cache && from !== origin.cache) {\n this.cache.set({ string: this.dom.input.value, data });\n }\n\n this.dom.buildResults(data.slice(0, this.configuration.maxResults), this.configuration.fieldsToDisplay);\n }\n\n /**\n * @description CustomEvent 'kompletr.dom.done' listener\n */\n bindResults = () => { \n Animation[this.configuration.animationType](this.dom.result, this.configuration.animationDuration); // TODO this is not really bindResult\n if(this.dom.result?.children?.length) {\n for(let i = 0; i < this.dom.result.children.length; i++) {\n ((i) => {\n return this.broadcaster.listen(this.dom.result.children[i], 'click', () => {\n this.dom.focused = this.dom.result.children[i];\n this.select(this.dom.focused.id);\n });\n })(i)\n }\n }\n }\n\n /**\n * @description 'input.keyup' listener\n */\n suggest = (e) => {\n if (this.dom.input.value.length < this.configuration.startQueriyngFromChar) {\n return;\n }\n \n const keyCode = e.keyCode;\n\n switch (keyCode) {\n case 13: // Enter\n this.select(this.dom.focused.id);\n break;\n case 38: // Up\n case 40: // Down\n this.navigate(keyCode);\n break;\n default:\n if (this.dom.input.value !== this.props.previousValue) {\n this.hydrate(this.dom.input.value);\n }\n this.resetPointer();\n break\n }\n }\n\n /**\n * @description Manage the data hydration according to the current setup (cache, request or local data)\n * \n * @param {String} value Current input value\n * \n * @emits CustomEvent 'this.request.done' { from, data }\n * @emits CustomEvent 'this.error' { error }\n * \n * @returns {Void}\n * \n * @todo options.data could returns Promise, and same for the onKeyup callback\n */\n hydrate = async (value) => {\n try {\n if (this.cache && await this.cache.isValid(value)) {\n this.cache.get(value, (data) => {\n this.broadcaster.trigger(event.dataDone, { from: origin.cache, data: data }); \n });\n } else if (this.callbacks.onKeyup) {\n this.callbacks.onKeyup(value, (data) => {\n this.broadcaster.trigger(event.dataDone, { from: origin.callback, data: data });\n });\n } else {\n this.broadcaster.trigger(event.dataDone, { from: origin.local, data: this.props.data });\n }\n } catch(e) {\n this.broadcaster.trigger(event.error, e);\n }\n }\n\n /**\n * @description Apply visual navigation into the suggestions set\n * \n * @param {Number} keyCode The current keyCode value\n * \n * @returns {Void}\n */\n navigate = (keyCode) => {\n if (keyCode != 38 && keyCode != 40) {\n return false;\n }\n\n if(this.props.pointer < -1 || this.props.pointer > this.dom.result.children.length - 1) {\n return false;\n }\n\n if (keyCode === 38 && this.props.pointer >= -1) {\n this.props.pointer--;\n } else if (keyCode === 40 && this.props.pointer < this.dom.result.children.length - 1) {\n this.props.pointer++;\n } \n\n this.dom.focus(this.props.pointer, 'remove');\n this.dom.focus(this.props.pointer, 'add');\n }\n\n /**\n * @description Select a suggested item as user choice\n * \n * @param {Number} idx The index of the selected suggestion\n * \n * @emits CustomEvent 'this.select.done'\n * \n * @returns {Void}\n */\n select = (idx = 0) => { \n this.dom.input.value = typeof this.props.data[idx] === 'object' ? this.props.data[idx][this.configuration.propToMapAsValue] : this.props.data[idx];\n this.callbacks.onSelect(this.props.data[idx]);\n this.broadcaster.trigger(event.selectDone);\n }\n};","import { animation, searchExpression, theme } from './enums.js';\n\n/**\n * @description Represents the configuration for the Kompleter library.\n */\nexport class Configuration {\n /**\n * The type of animation for the element.\n * @type {string}\n */\n _animationType = animation.fadeIn\n \n /**\n * The duration of the animation in milliseconds.\n * @type {number}\n */\n _animationDuration = 500\n\n /**\n * Indicates whether multiple selections are allowed.\n * @type {boolean}\n * @private\n */\n _multiple = false\n \n /**\n * The theme for the kompletr options.\n * @type {string}\n */\n _theme = theme.light\n\n /**\n * Array containing the fields to be displayed.\n * @type {Array}\n * @private\n */\n _fieldsToDisplay = []\n\n /**\n * The maximum number of results to display.\n * @type {number}\n */\n _maxResults = 10\n\n /**\n * The character index from which querying should start.\n * @type {number}\n */\n _startQueriyngFromChar = 2\n\n /**\n * Represents the value of a property to be mapped.\n * @type {string}\n * @private\n */\n _propToMapAsValue = ''\n\n /**\n * The filter option used for filtering data.\n * Possible values are 'prefix', 'expression'.\n * @type {string}\n */\n _filterOn = searchExpression.prefix\n\n /**\n * Represents the cache value.\n * @type {number}\n * @private\n */\n _cache = 0\n\n /**\n * @description Type of animation between valid types\n */\n get animationType() {\n return this._animationType;\n }\n\n set animationType(value) {\n const valid = Object.keys(animation);\n if (!valid.includes(value)) {\n throw new Error(`animation.type should be one of ${valid.toString()}`);\n }\n this._animationType = value;\n }\n\n /**\n * @description Duration of some animation in ms. Default 500\n */\n get animationDuration() {\n return this._animationDuration;\n }\n\n set animationDuration(value) {\n if (isNaN(parseInt(value, 10))) {\n throw new Error(`animation.duration should be an integer`);\n }\n this._animationDuration = value;\n }\n\n /**\n * @description Enable / disable multiple choices\n */\n get multiple() {\n return this._multiple;\n }\n\n set multiple(value) {\n this._multiple = value;\n }\n\n /**\n * @description Display theme between light | dark\n */\n get theme() {\n return this._theme;\n }\n\n set theme(value) {\n const valid = Object.keys(theme);\n if (!valid.includes(value)) {\n throw new Error(`theme should be one of ${valid.toString()}, ${value} given`);\n }\n this._theme = value;\n }\n\n /**\n * @description Fields to display in each suggestion item\n */\n get fieldsToDisplay() {\n return this._fieldsToDisplay;\n }\n\n set fieldsToDisplay(value) {\n this._fieldsToDisplay = value;\n }\n \n /**\n * @description Maximum number of results to display as suggestions (can be different thant the number of results availables)\n */\n get maxResults() {\n return this._maxResults;\n }\n\n set maxResults(value) {\n this._maxResults = value;\n }\n\n /**\n * @description Input minimal value length before to fire research\n */\n get startQueriyngFromChar() {\n return this._startQueriyngFromChar;\n }\n\n set startQueriyngFromChar(value) {\n this._startQueriyngFromChar = value;\n }\n\n /**\n * @description Property to map as value\n */\n get propToMapAsValue() {\n return this._propToMapAsValue;\n }\n\n set propToMapAsValue(value) {\n this._propToMapAsValue = value;\n }\n\n /**\n * @description Apply filtering from the beginning of the word (prefix) or on the entire expression (expression)\n */\n get filterOn() {\n return this._filterOn;\n }\n\n set filterOn(value) {\n const valid = Object.keys(searchExpression);\n if (!valid.includes(value)) {\n throw new Error(`filterOn should be one of ${valid.toString()}, ${value} given`);\n }\n this._filterOn = value;\n }\n\n /**\n * @description Time life of the cache when data is retrieved from an API call\n */\n get cache() {\n return this._cache;\n }\n\n set cache(value) {\n if (isNaN(parseInt(value, 10))) {\n throw new Error(`cache should be an integer`);\n }\n this._cache = value;\n }\n\n constructor(options) {\n if (options === undefined) return;\n if (typeof options !== 'object') {\n throw new Error('options should be an object');\n };\n this._theme = options?.theme || this._theme;\n this._animationType = options?.animationType || this._animationType;\n this._animationDuration = options?.animationDuration || this._animationDuration;\n this._multiple = options?.multiple || this._multiple;\n this._fieldsToDisplay = options?.fieldsToDisplay || this._fieldsToDisplay;\n this._maxResults = options?.maxResults || this._maxResults;\n this._startQueriyngFromChar = options?.startQueriyngFromChar || this._startQueriyngFromChar;\n this._propToMapAsValue = options?.propToMapAsValue || this._propToMapAsValue;\n this._filterOn = options?.filterOn || this._filterOn;\n this._cache = options?.cache || this._cache;\n }\n}","import { event } from \"./enums.js\";\n\n/**\n * @description Kompletr simple caching mechanism implementation.\n * \n * @see https://developer.mozilla.org/en-US/docs/Web/API/Cache\n * @see https://web.dev/articles/cache-api-quick-guide\n */\nexport class Cache {\n\n /**\n * @description Cache name value\n */\n _name = null;\n\n /**\n * @description Cache timelife duration\n */\n _duration = null;\n \n /**\n * @description Broadcaster instance\n */\n _braodcaster = null;\n \n constructor(broadcaster, duration = 0, name = 'kompletr.cache') {\n if (!window.caches) {\n return false;\n }\n this._broadcaster = broadcaster;\n this._name = name;\n this._duration = duration;\n }\n\n /**\n * @description Retrieve the data stored in cache and dispatch event with\n * \n * @param {String} string Input value of the current request as string\n * @param {Function} done Callback function\n * \n * @emits CustomEvent 'kompltetr.request.done' { from, data }\n * @emits CustomEvent 'kompltetr.error' { error }\n * \n * @returns {Void}\n */\n get(string, done) {\n window.caches.open(this._name)\n .then(cache => {\n cache.match(string)\n .then(async (data) => {\n done(await data.json());\n });\n })\n .catch(e => {\n this._broadcaster.trigger(event.error, e);\n });\n }\n\n /**\n * @description Push data into the cache\n * \n * @param {Object} args { string, data }\n * \n * @emits CustomEvent 'kompltetr.error' { error }\n * \n * @returns {Void}\n */\n set({ string, data }) {\n window.caches.open(this._name)\n .then(cache => {\n const headers = new Headers();\n headers.set('Content-Type', 'application/json');\n headers.set('Cache-Control', `max-age=${this._duration}`);\n cache.put(`/${string}`, new Response(JSON.stringify(data), { headers }));\n })\n .catch(e => {\n this._broadcaster.trigger(event.error, e);\n });\n }\n\n /**\n * @description Check the cache validity regarding the current request and the cache timelife\n * \n * @param {String} string The current request value\n *\n * @returns {Promise}\n */\n async isValid(string) {\n try {\n const cache = await window.caches.open(this._name);\n const response = await cache.match(`/${string}`);\n if (!response) {\n return false;\n }\n return true;\n } catch(e) {\n this._broadcaster.trigger(event.error, e);\n }\n }\n};","import { event } from './enums.js';\n\n/**\n * Represents a Broadcaster that allows subscribing to and triggering events.\n */\nexport class Broadcaster {\n subscribers = [];\n\n constructor() {}\n\n /**\n * Subscribes to an event.\n * \n * @param {string} type - The type of event to subscribe to.\n * @param {Function} handler - The event handler function.\n * \n * @throws {Error} If the event type is not valid.\n */\n subscribe(type, handler) {\n if (!Object.values(event).includes(type)) {\n throw new Error(`Event should be one of ${Object.keys(event)}: ${type} given.`);\n }\n this.subscribers.push({ type, handler });\n }\n\n /**\n * Listens for an event on a specified element.\n * \n * @param {HTMLElement} element - The element to listen on.\n * @param {string} type - The type of event to listen for.\n * @param {Function} handler - The event handler function.\n */\n listen(element, type, handler) {\n element.addEventListener(type, handler);\n }\n\n /**\n * Triggers an event.\n * \n * @param {string} type - The type of event to trigger.\n * @param {Object} detail - Additional details to pass to the event handler.\n * \n * @throws {Error} If the event type is not valid.\n */\n trigger(type, detail = {}) {\n if (!Object.values(event).includes(type)) {\n throw new Error(`Event should be one of ${Object.keys(event)}: ${type} given.`);\n }\n \n this.subscribers\n .filter(subscriber => subscriber.type === type)\n .forEach(subscriber => subscriber.handler(detail));\n }\n}","/**\n * @description Dynamic properties of current Kompltr instance.\n */\nexport class Properties {\n\n /**\n * @description Data storage\n */\n _data = null\n\n get data() {\n return this._data;\n }\n\n set data(value) {\n if (!Array.isArray(value)) {\n throw new Error(`data must be an array (${value.toString()} given)`);\n }\n this._data = value;\n }\n\n /**\n * @description Position of the pointer inside the suggestions\n */\n _pointer = null\n\n get pointer() {\n return this._pointer;\n }\n\n set pointer(value) {\n if (isNaN(parseInt(value, 10))) {\n throw new Error(`pointer must be an integer (${value.toString()} given)`);\n }\n this._pointer = value;\n }\n\n /**\n * @description Previous input value\n */\n _previousValue = null\n\n get previousValue() {\n return this._previousValue;\n }\n\n set previousValue(value) {\n this._previousValue = value;\n }\n\n constructor(data = []) {\n this._data = data;\n }\n}","import { event } from './enums.js';\n\n/**\n * @description\n */\nexport class DOM {\n\n /**\n * @description Body tag\n */\n _body = null;\n\n get body() {\n return this._body;\n }\n\n set body(value) {\n this._body = value;\n }\n\n /**\n * @description Main input text\n */\n _input = null;\n\n get input() {\n return this._input;\n }\n\n set input(value) {\n if (input instanceof HTMLInputElement === false) {\n throw new Error(`input should be an HTMLInputElement instance: ${input} given.`);\n }\n this._input = value;\n }\n\n /**\n * @description HTMLElement in suggestions who's have the focus\n */\n _focused = null;\n\n get focused() {\n return this._focused;\n }\n\n set focused(value) {\n this._focused = value;\n }\n\n /**\n * @description HTMLElement results container\n */\n _result = null;\n\n get result() {\n return this._result;\n }\n\n set result(value) {\n this._result = value;\n }\n \n _broadcaster = null;\n\n // TODO: do better with hardcoded theme and classes\n // TODO: do bindings out of the constructor\n constructor(input, broadcaster, options = { theme: 'light' }) {\n this._body = document.getElementsByTagName('body')[0];\n \n this._input = input instanceof HTMLInputElement ? input : document.getElementById(input);\n this._input.setAttribute('class', `${this._input.getAttribute('class')} input--search`);\n \n this._result = this.build('div', [ { id: 'kpl-result' }, { class: 'form--search__result' } ]);\n\n this._input.parentElement.setAttribute('class', `${this._input.parentElement.getAttribute('class')} kompletr ${options.theme}`);\n this._input.parentElement.appendChild(this._result);\n\n\n this._broadcaster = broadcaster;\n }\n\n /**\n * @description Build an HTML element and set his attributes\n * \n * @param {String} element HTML tag to build\n * @param {Object[]} attributes Key / values pairs\n * \n * @returns {HTMLElement}\n */\n build(element, attributes = []) {\n const htmlElement = document.createElement(element);\n attributes.forEach(attribute => {\n htmlElement.setAttribute(Object.keys(attribute)[0], Object.values(attribute)[0]);\n });\n return htmlElement;\n };\n\n /**\n * @description Add / remove the focus on a HTMLElement\n * \n * @param {String} action add|remove\n *\n * @returns {Void}\n */\n focus(pointer, action) {\n if (!['add', 'remove'].includes(action)) {\n throw new Error('action should be one of [\"add\", \"remove]: ' + action + ' given.');\n }\n\n switch (action) {\n case 'add':\n this.focused = this.result.children[pointer];\n this.result.children[pointer].className += ' focus';\n break;\n case 'remove':\n this.focused = null;\n Array.from(this.result.children).forEach(result => {\n ((result) => {\n result.className = 'item--result';\n })(result)\n });\n break;\n }\n }\n\n /**\n * @description Display results according to the current input value / setup\n * \n * @returns {Void}\n */\n buildResults(data, fieldsToDisplay) {\n let html = '';\n\n if(data && data.length) {\n html = data\n .reduce((html, current) => {\n html += `
`;\n switch (typeof current.data) {\n case 'string':\n html += `${current.data}`;\n break;\n case 'object':\n let properties = Array.isArray(fieldsToDisplay) && fieldsToDisplay.length ? fieldsToDisplay: Object.keys(current.data);\n for(let j = 0; j < properties.length; j++) {\n html += `${current.data[properties[j]]}`;\n }\n break;\n }\n html += '
';\n return html;\n }, '');\n \n } else {\n html = '
Not found
';\n }\n\n this.result.innerHTML = html;\n this._broadcaster.trigger(event.domDone); // TODO here or in the handlers ?\n }\n}","import Kompletr from \"./kompletr.js\"\n\nimport { Configuration } from './configuration.js';\nimport { Cache } from './cache.js';\nimport { Broadcaster } from \"./broadcaster.js\";\nimport { Properties } from './properties.js';\nimport { DOM } from './dom.js';\n\n/**\n * Initializes the module with the provided data and options.\n *\n * @param {Object} options - The configuration options for the application.\n * @param {Object} data - The data used by the application.\n * @param {Function} onKeyup - The callback function to be executed on keyup event.\n * @param {Function} onSelect - The callback function to be executed on select event.\n * @param {Function} onError - The callback function to be executed on error event.\n * \n * @returns {void}\n */\nconst kompletr = function({ data, options, onKeyup, onSelect, onError }) {\n const broadcaster = new Broadcaster();\n\n const configuration = new Configuration(options);\n const properties = new Properties(data);\n\n const dom = new DOM(this, broadcaster, configuration);\n const cache = configuration.cache ? new Cache(broadcaster, configuration.cache) : null;\n \n new Kompletr({ configuration, properties, dom, cache, broadcaster, onKeyup, onSelect, onError });\n};\n\nwindow.HTMLInputElement.prototype.kompletr = kompletr;\n\nexport default kompletr;"],"names":["__webpack_require__","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","animation","freeze","fadeIn","slideDown","error","domDone","dataDone","selectDone","origin","cache","callback","local","searchExpression","prefix","expression","theme","light","dark","Animation","constructor","element","display","duration","style","opacity","fade","value","parseFloat","requestAnimationFrame","fadeOut","slideUp","transitionProperty","transitionDuration","boxSizing","height","offsetHeight","overflow","paddingTop","paddingBottom","marginTop","marginBottom","window","setTimeout","removeProperty","console","log","getComputedStyle","animateBack","type","Kompletr","broadcaster","callbacks","configuration","dom","props","properties","onKeyup","onSelect","onError","this","subscribe","showResults","bindResults","closeTheShop","listen","input","suggest","body","assign","e","trigger","srcElement","result","animationType","animationDuration","resetPointer","pointer","stack","async","from","data","map","record","idx","filter","propToMapAsValue","filterOn","toLowerCase","lastIndexOf","set","string","buildResults","slice","maxResults","fieldsToDisplay","children","length","i","focused","select","id","startQueriyngFromChar","keyCode","navigate","previousValue","hydrate","isValid","focus","Configuration","_animationType","_animationDuration","_multiple","_theme","_fieldsToDisplay","_maxResults","_startQueriyngFromChar","_propToMapAsValue","_filterOn","_cache","valid","keys","includes","Error","toString","isNaN","parseInt","multiple","options","undefined","Cache","_name","_duration","_braodcaster","name","caches","_broadcaster","done","open","then","match","json","catch","headers","Headers","put","Response","JSON","stringify","Broadcaster","subscribers","handler","values","push","addEventListener","detail","subscriber","forEach","Properties","_data","Array","isArray","_pointer","_previousValue","DOM","_body","_input","HTMLInputElement","_focused","_result","document","getElementsByTagName","getElementById","setAttribute","getAttribute","build","class","parentElement","appendChild","attributes","htmlElement","createElement","attribute","action","className","html","reduce","current","j","innerHTML","kompletr"],"sourceRoot":""} \ No newline at end of file diff --git a/package.json b/package.json index 0a9098d..6a93c68 100755 --- a/package.json +++ b/package.json @@ -47,14 +47,14 @@ ], "license": "ISC", "scripts": { - "build": "mkdir -p dist && cp -r src/index.html dist/ & npm run build:css && npm run build:js", - "build:css": "node-sass ./src/sass/kompleter.scss ./dist/css/kompleter.min.css --output-style compressed", + "build": "mkdir -p dist && cp -r src/index.html dist/ & npm run build:css && npm run build:js && npm run build:demo", + "build:css": "node-sass ./src/sass/kompletr.scss ./dist/css/kompletr.min.css --output-style compressed", "build:js": "webpack", - "ci:api": "node ./cypress-api/index.js", - "ci:dev": "webpack serve --config ./webpack.config.dev.js", + "build:demo": "node-sass ./src/sass/kompletr.demo.scss ./demo/css/kompletr.demo.min.css --output-style compressed", + "ci:dev": "webpack serve", + "ci:e2e": "cypress run --browser chrome ./cypress", + "ci:cy": "cypress open", "ci:test": "node --experimental-vm-modules node_modules/jest/bin/jest.js ./test/**.spec.js -- --coverage", - "cypress:open": "cypress open", - "cypress:run": "cypress run --browser chrome ./cypress", "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js ./test/**.spec.js", "dev": "webpack-dashboard -- webpack serve --hot --mode development --config ./webpack.config.js", "prod": "webpack-dashboard -- webpack --mode production --config ./webpack.config.prod.js", diff --git a/src/index.html b/src/index.html index 294b53b..14e9add 100644 --- a/src/index.html +++ b/src/index.html @@ -12,17 +12,13 @@ - - - - @@ -74,7 +70,7 @@

Kømpletr

headers.append('content-type', 'application/x-www-form-urlencoded'); headers.append('method', 'GET'); - fetch(`../cypress-api/data.json`, headers) + fetch(`./files/data.json`, headers) .then(result => result.json()) .then(data => { input.kompletr({ diff --git a/src/js/dom.js b/src/js/dom.js index eeca185..db9ebc5 100644 --- a/src/js/dom.js +++ b/src/js/dom.js @@ -127,25 +127,20 @@ export class DOM { * * @returns {Void} */ - focus(pointer, action) { - if (!['add', 'remove'].includes(action)) { - throw new Error('action should be one of ["add", "remove]: ' + action + ' given.'); + focus(pointer) { + if (isNaN(parseInt(pointer, 10)) || pointer < 0 || pointer > this.result.children.length - 1) { + throw new Error('pointer should be a valid integer in the result lenght range: ' + pointer + ' given.'); } - switch (action) { - case 'add': - this.focused = this.result.children[pointer]; - this.result.children[pointer].className += ` ${this._classes.focus}`; - break; - case 'remove': - this.focused = null; - Array.from(this.result.children).forEach(result => { - ((result) => { - result.className = this._classes.result; - })(result) - }); - break; - } + this.focused = null; + Array.from(this.result.children).forEach(result => { + ((result) => { + result.className = this._classes.result; + })(result) + }); + + this.focused = this.result.children[pointer]; + this.result.children[pointer].className += ` ${this._classes.focus}`; } /** diff --git a/src/js/kompletr.js b/src/js/kompletr.js index d38aad4..83b1d2a 100644 --- a/src/js/kompletr.js +++ b/src/js/kompletr.js @@ -211,8 +211,7 @@ export default class Kompletr { this.props.pointer++; } - this.dom.focus(this.props.pointer, 'remove'); // TODO: check if we can do better like in one step - this.dom.focus(this.props.pointer, 'add'); + this.dom.focus(this.props.pointer); } /** diff --git a/src/sass/kompleter.scss b/src/sass/kompletr.demo.scss old mode 100755 new mode 100644 similarity index 100% rename from src/sass/kompleter.scss rename to src/sass/kompletr.demo.scss diff --git a/src/sass/kompletr.scss b/src/sass/kompletr.scss new file mode 100755 index 0000000..05369b4 --- /dev/null +++ b/src/sass/kompletr.scss @@ -0,0 +1,154 @@ + +@import 'mixins'; +@import 'variables'; + +//// +// Module code +//// +/// +.kompletr { + &.form--search { + width: 30%; + position: relative; + margin: 0 auto; + @media (max-width: 480px) { + width: 90%; + } + } + + .input--search, + .item--result { + font-family: $font-base; + font-size: 100%; + } + + .input--search { + display: block; + box-sizing: border-box; + margin: 0 auto; + padding: 15px 10px; + width: 100%; + min-width: 240px; + max-width: 600px; + height: auto; + font-size: 1.2rem; + line-height: 1.5; + border: none; + &:focus { + border: none; + outline: none; + } + } + + .form--search__result { + position: absolute; + margin: 0; + width: 100%; + } + + .item--result { + box-sizing: border-box; + width: 100%; + padding: 15px; + display: flex; + flex-wrap: wrap; + justify-content: space-between; + border-left: none; + border-right: none; + + &:last-child { + border-bottom: none; + } + + &:hover, &.focus { + cursor: pointer; + @include transition(0.2s ease-in-out); + } + + & .item--data { + flex: 50%; + + &:nth-child(even) { + text-align: right; + } + + &:nth-child(0) { + font-weight: 600; + } + + &:nth-child(n+2) { + font-weight: normal; + } + } + } + + &.light { + .input--search { + color: $color-4; + background: $color-1; + } + + ::placeholder { + color: $color-2; + } + + .item--result { + color: $color-6; + border-bottom: 1px dashed $color-3; + @include backdrop(16px, 180%, 0.75); + + &:hover, &.focus { + @include backdrop(26px, 120%, 0.50); + + & .item--data:nth-child(n+2) { + color: $color-6; + } + } + + & .item--data { + &:nth-child(0) { + color: $color-6; + } + + &:nth-child(n+2) { + color: $color-4; + } + } + } + } + + &.dark { + .input--search { + color: $color-1; + background: $color-6; + } + + ::placeholder { + color: $color-2; + } + + .item--result { + color: $color-1; + border-bottom: 1px dashed $color-4; + @include backdrop(16px, 180%, 0.75, 'dark'); + + &:hover, &.focus { + @include backdrop(26px, 120%, 0.50, 'dark'); + + & .item--data:nth-child(n+2) { + color: $color-1; + } + } + + & .item--data { + &:nth-child(0) { + color: $color-1; + } + + &:nth-child(n+2) { + color: $color-4; + } + } + } + } +} \ No newline at end of file diff --git a/test/dom.spec.js b/test/dom.spec.js index 304a99f..d3c3dea 100644 --- a/test/dom.spec.js +++ b/test/dom.spec.js @@ -32,6 +32,14 @@ describe('DOM', () => { expect(dom.input).toBeDefined(); expect(dom.focused).toBeDefined(); }); + + it('should throws error when attempt to set input with something else than HTMLInputElement', () => { + try { + dom.input = 'test'; + } catch(e) { + expect(e.message).toBe('input should be an HTMLInputElement instance: test given.'); + } + }); }); describe('::build', () => { @@ -46,17 +54,24 @@ describe('DOM', () => { describe('::focus', () => { it('should manage adding and removing focus', () => { dom.result.appendChild(document.createElement('div')); - dom.focus(0, 'add'); + dom.result.appendChild(document.createElement('div')); + dom.result.appendChild(document.createElement('div')); + dom.focus(1); expect(dom.focused).toBeInstanceOf(HTMLElement); expect(dom.focused.className).toContain('focus'); - dom.focus(0, 'remove'); - expect(dom.focused).toBeNull(); - expect(dom.result.firstChild.className).not.toContain('focus'); + }); + + it('should throws error when the pointer is out of range', () => { + try { + dom.focus(-1); + } catch(e) { + expect(e.message).toBe('pointer should be a valid integer in the result lenght range: -1 given.'); + } }); }); describe('::buildResults', () => { - it('should build well formed DOM with suggestions results', () => { + it('should build well formed DOM with suggestions results as strings', () => { const data = [{ idx: '1', data: 'test' }]; dom.buildResults(data); expect(dom.result.firstChild).toBeInstanceOf(HTMLElement); @@ -66,5 +81,22 @@ describe('DOM', () => { expect(dom.result.firstChild.firstChild.textContent).toBe('test'); expect(broadcaster.trigger).toHaveBeenCalled(); }); + + it('should build well formed DOM with suggestions results as object', () => { + const data = [{ idx: '1', data: { prop: 'test'} }]; + dom.buildResults(data, ['prop']); + expect(dom.result.firstChild).toBeInstanceOf(HTMLElement); + expect(dom.result.firstChild.id).toBe('1'); + expect(dom.result.firstChild.className).toBe('item--result'); + expect(dom.result.firstChild.firstChild.className).toBe('item--data'); + expect(dom.result.firstChild.firstChild.textContent).toBe('test'); + expect(broadcaster.trigger).toHaveBeenCalled(); + }); + + it('should build with a not found when no result', () => { + dom.buildResults([]); + expect(dom.result.innerHTML).toContain('Not found'); + expect(broadcaster.trigger).toHaveBeenCalled(); + }); }); }); \ No newline at end of file diff --git a/test/kompletr.spec.js b/test/kompletr.spec.js index ddf7d79..8fa0a5a 100644 --- a/test/kompletr.spec.js +++ b/test/kompletr.spec.js @@ -312,8 +312,7 @@ describe('Kompletr', () => { instance.props.pointer = 2; instance.dom.result = { children: [1, 2, 3, 4, 5] }; instance.navigate(38); - expect(spy).toHaveBeenCalledWith(1, 'add'); - expect(spy).toHaveBeenCalledWith(1, 'remove'); + expect(spy).toHaveBeenCalledWith(1); }); }); diff --git a/webpack.config.dev.js b/webpack.config.dev.js deleted file mode 100644 index 697bb65..0000000 --- a/webpack.config.dev.js +++ /dev/null @@ -1,35 +0,0 @@ -import path from 'path'; -import * as url from 'url'; - -const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); - -export default { - entry: './src/js/index.js', - devtool: "source-map", - mode: "development", - module: { - rules: [ - { - test: /\.html$/i, - loader: "html-loader", - }, - { - test: /\.js$/i, - loader: "esbuild-loader", - }, - ], - }, - devServer: { - client: { - logging: 'log', - overlay: true, - }, - static: { - directory: path.join(__dirname, './dist'), - }, - compress: true, - port: 9000, - historyApiFallback: true, - liveReload: true, - }, -}; From f8e087069202e8544517bf568a996339ed506e33 Mon Sep 17 00:00:00 2001 From: Steve Date: Fri, 15 Mar 2024 10:06:54 +0100 Subject: [PATCH 34/48] fix: script name --- .github/workflows/build.yml | 2 +- .nyc_output/827755bf-7a37-42f9-b3f0-fb681d4ad440.json | 1 - .nyc_output/c844f1cd-502f-40c2-804d-2cc19775a0fd.json | 1 - .../processinfo/827755bf-7a37-42f9-b3f0-fb681d4ad440.json | 1 - .../processinfo/c844f1cd-502f-40c2-804d-2cc19775a0fd.json | 1 - .nyc_output/processinfo/index.json | 1 - 6 files changed, 1 insertion(+), 6 deletions(-) delete mode 100644 .nyc_output/827755bf-7a37-42f9-b3f0-fb681d4ad440.json delete mode 100644 .nyc_output/c844f1cd-502f-40c2-804d-2cc19775a0fd.json delete mode 100644 .nyc_output/processinfo/827755bf-7a37-42f9-b3f0-fb681d4ad440.json delete mode 100644 .nyc_output/processinfo/c844f1cd-502f-40c2-804d-2cc19775a0fd.json delete mode 100644 .nyc_output/processinfo/index.json diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d54fbfa..0f929f2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -80,6 +80,6 @@ jobs: name: build-files path: dist - name: Run E2E tests - run: npm run ci:dev & npm run cypress:run + run: npm run ci:dev & npm run ci:e2e env: CI: true \ No newline at end of file diff --git a/.nyc_output/827755bf-7a37-42f9-b3f0-fb681d4ad440.json b/.nyc_output/827755bf-7a37-42f9-b3f0-fb681d4ad440.json deleted file mode 100644 index 9e26dfe..0000000 --- a/.nyc_output/827755bf-7a37-42f9-b3f0-fb681d4ad440.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/.nyc_output/c844f1cd-502f-40c2-804d-2cc19775a0fd.json b/.nyc_output/c844f1cd-502f-40c2-804d-2cc19775a0fd.json deleted file mode 100644 index 9e26dfe..0000000 --- a/.nyc_output/c844f1cd-502f-40c2-804d-2cc19775a0fd.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/.nyc_output/processinfo/827755bf-7a37-42f9-b3f0-fb681d4ad440.json b/.nyc_output/processinfo/827755bf-7a37-42f9-b3f0-fb681d4ad440.json deleted file mode 100644 index 64bf3f0..0000000 --- a/.nyc_output/processinfo/827755bf-7a37-42f9-b3f0-fb681d4ad440.json +++ /dev/null @@ -1 +0,0 @@ -{"parent":null,"pid":18321,"argv":["/home/steve/.nvm/versions/node/v18.19.0/bin/node","/home/steve/.nvm/versions/node/v18.19.0/bin/npm","run","test","--","--coverage"],"execArgv":[],"cwd":"/var/www/kompletr","time":1710457343415,"ppid":18310,"coverageFilename":"/var/www/kompletr/.nyc_output/827755bf-7a37-42f9-b3f0-fb681d4ad440.json","externalId":"","uuid":"827755bf-7a37-42f9-b3f0-fb681d4ad440","files":[]} \ No newline at end of file diff --git a/.nyc_output/processinfo/c844f1cd-502f-40c2-804d-2cc19775a0fd.json b/.nyc_output/processinfo/c844f1cd-502f-40c2-804d-2cc19775a0fd.json deleted file mode 100644 index af843e5..0000000 --- a/.nyc_output/processinfo/c844f1cd-502f-40c2-804d-2cc19775a0fd.json +++ /dev/null @@ -1 +0,0 @@ -{"parent":"827755bf-7a37-42f9-b3f0-fb681d4ad440","pid":18333,"argv":["/home/steve/.nvm/versions/node/v18.19.0/bin/node","/var/www/kompletr/node_modules/jest/bin/jest.js","./test/animation.spec.js","./test/broadcaster.spec.js","./test/cache.spec.js","./test/configuration.spec.js","./test/dom.spec.js","./test/index.spec.js","./test/kompletr.spec.js","./test/properties.spec.js","--coverage"],"execArgv":["--experimental-vm-modules"],"cwd":"/var/www/kompletr","time":1710457343729,"ppid":18332,"coverageFilename":"/var/www/kompletr/.nyc_output/c844f1cd-502f-40c2-804d-2cc19775a0fd.json","externalId":"","uuid":"c844f1cd-502f-40c2-804d-2cc19775a0fd","files":[]} \ No newline at end of file diff --git a/.nyc_output/processinfo/index.json b/.nyc_output/processinfo/index.json deleted file mode 100644 index 5b3a846..0000000 --- a/.nyc_output/processinfo/index.json +++ /dev/null @@ -1 +0,0 @@ -{"processes":{"827755bf-7a37-42f9-b3f0-fb681d4ad440":{"parent":null,"children":["c844f1cd-502f-40c2-804d-2cc19775a0fd"]},"c844f1cd-502f-40c2-804d-2cc19775a0fd":{"parent":"827755bf-7a37-42f9-b3f0-fb681d4ad440","children":[]}},"files":{},"externalIds":{}} \ No newline at end of file From 7e689344fc5106d6d6e6b014d54e889ff99ee8a7 Mon Sep 17 00:00:00 2001 From: Steve Date: Fri, 15 Mar 2024 10:25:53 +0100 Subject: [PATCH 35/48] fix: add fixtures copy in build --- package.json | 2 +- test/fixtures/data.json | 1 + webpack.config.js | 4 ---- 3 files changed, 2 insertions(+), 5 deletions(-) create mode 100644 test/fixtures/data.json diff --git a/package.json b/package.json index 6a93c68..a55357f 100755 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ ], "license": "ISC", "scripts": { - "build": "mkdir -p dist && cp -r src/index.html dist/ & npm run build:css && npm run build:js && npm run build:demo", + "build": "mkdir -p dist && mkdir -p dist/files && cp -r src/index.html dist/ & cp -r test/fixtures/data.json dist/files/data.json & npm run build:css && npm run build:js && npm run build:demo", "build:css": "node-sass ./src/sass/kompletr.scss ./dist/css/kompletr.min.css --output-style compressed", "build:js": "webpack", "build:demo": "node-sass ./src/sass/kompletr.demo.scss ./demo/css/kompletr.demo.min.css --output-style compressed", diff --git a/test/fixtures/data.json b/test/fixtures/data.json new file mode 100644 index 0000000..d06d2d5 --- /dev/null +++ b/test/fixtures/data.json @@ -0,0 +1 @@ +[{"Name":"Kabul","0":"Kabul","CountryCode":"AFG","1":"AFG","Population":"1780000","2":"1780000"},{"Name":"Qandahar","0":"Qandahar","CountryCode":"AFG","1":"AFG","Population":"237500","2":"237500"},{"Name":"Herat","0":"Herat","CountryCode":"AFG","1":"AFG","Population":"186800","2":"186800"},{"Name":"Mazar-e-Sharif","0":"Mazar-e-Sharif","CountryCode":"AFG","1":"AFG","Population":"127800","2":"127800"},{"Name":"Amsterdam","0":"Amsterdam","CountryCode":"NLD","1":"NLD","Population":"731200","2":"731200"},{"Name":"Rotterdam","0":"Rotterdam","CountryCode":"NLD","1":"NLD","Population":"593321","2":"593321"},{"Name":"Haag","0":"Haag","CountryCode":"NLD","1":"NLD","Population":"440900","2":"440900"},{"Name":"Utrecht","0":"Utrecht","CountryCode":"NLD","1":"NLD","Population":"234323","2":"234323"},{"Name":"Eindhoven","0":"Eindhoven","CountryCode":"NLD","1":"NLD","Population":"201843","2":"201843"},{"Name":"Tilburg","0":"Tilburg","CountryCode":"NLD","1":"NLD","Population":"193238","2":"193238"},{"Name":"Groningen","0":"Groningen","CountryCode":"NLD","1":"NLD","Population":"172701","2":"172701"},{"Name":"Breda","0":"Breda","CountryCode":"NLD","1":"NLD","Population":"160398","2":"160398"},{"Name":"Apeldoorn","0":"Apeldoorn","CountryCode":"NLD","1":"NLD","Population":"153491","2":"153491"},{"Name":"Nijmegen","0":"Nijmegen","CountryCode":"NLD","1":"NLD","Population":"152463","2":"152463"},{"Name":"Enschede","0":"Enschede","CountryCode":"NLD","1":"NLD","Population":"149544","2":"149544"},{"Name":"Haarlem","0":"Haarlem","CountryCode":"NLD","1":"NLD","Population":"148772","2":"148772"},{"Name":"Almere","0":"Almere","CountryCode":"NLD","1":"NLD","Population":"142465","2":"142465"},{"Name":"Arnhem","0":"Arnhem","CountryCode":"NLD","1":"NLD","Population":"138020","2":"138020"},{"Name":"Zaanstad","0":"Zaanstad","CountryCode":"NLD","1":"NLD","Population":"135621","2":"135621"},{"Name":"\u00b4s-Hertogenbosch","0":"\u00b4s-Hertogenbosch","CountryCode":"NLD","1":"NLD","Population":"129170","2":"129170"},{"Name":"Amersfoort","0":"Amersfoort","CountryCode":"NLD","1":"NLD","Population":"126270","2":"126270"},{"Name":"Maastricht","0":"Maastricht","CountryCode":"NLD","1":"NLD","Population":"122087","2":"122087"},{"Name":"Dordrecht","0":"Dordrecht","CountryCode":"NLD","1":"NLD","Population":"119811","2":"119811"},{"Name":"Leiden","0":"Leiden","CountryCode":"NLD","1":"NLD","Population":"117196","2":"117196"},{"Name":"Haarlemmermeer","0":"Haarlemmermeer","CountryCode":"NLD","1":"NLD","Population":"110722","2":"110722"},{"Name":"Zoetermeer","0":"Zoetermeer","CountryCode":"NLD","1":"NLD","Population":"110214","2":"110214"},{"Name":"Emmen","0":"Emmen","CountryCode":"NLD","1":"NLD","Population":"105853","2":"105853"},{"Name":"Zwolle","0":"Zwolle","CountryCode":"NLD","1":"NLD","Population":"105819","2":"105819"},{"Name":"Ede","0":"Ede","CountryCode":"NLD","1":"NLD","Population":"101574","2":"101574"},{"Name":"Delft","0":"Delft","CountryCode":"NLD","1":"NLD","Population":"95268","2":"95268"},{"Name":"Heerlen","0":"Heerlen","CountryCode":"NLD","1":"NLD","Population":"95052","2":"95052"},{"Name":"Alkmaar","0":"Alkmaar","CountryCode":"NLD","1":"NLD","Population":"92713","2":"92713"},{"Name":"Willemstad","0":"Willemstad","CountryCode":"ANT","1":"ANT","Population":"2345","2":"2345"},{"Name":"Tirana","0":"Tirana","CountryCode":"ALB","1":"ALB","Population":"270000","2":"270000"},{"Name":"Alger","0":"Alger","CountryCode":"DZA","1":"DZA","Population":"2168000","2":"2168000"},{"Name":"Oran","0":"Oran","CountryCode":"DZA","1":"DZA","Population":"609823","2":"609823"},{"Name":"Constantine","0":"Constantine","CountryCode":"DZA","1":"DZA","Population":"443727","2":"443727"},{"Name":"Annaba","0":"Annaba","CountryCode":"DZA","1":"DZA","Population":"222518","2":"222518"},{"Name":"Batna","0":"Batna","CountryCode":"DZA","1":"DZA","Population":"183377","2":"183377"},{"Name":"S\u00e9tif","0":"S\u00e9tif","CountryCode":"DZA","1":"DZA","Population":"179055","2":"179055"},{"Name":"Sidi Bel Abb\u00e8s","0":"Sidi Bel Abb\u00e8s","CountryCode":"DZA","1":"DZA","Population":"153106","2":"153106"},{"Name":"Skikda","0":"Skikda","CountryCode":"DZA","1":"DZA","Population":"128747","2":"128747"},{"Name":"Biskra","0":"Biskra","CountryCode":"DZA","1":"DZA","Population":"128281","2":"128281"},{"Name":"Blida (el-Boulaida)","0":"Blida (el-Boulaida)","CountryCode":"DZA","1":"DZA","Population":"127284","2":"127284"},{"Name":"B\u00e9ja\u00efa","0":"B\u00e9ja\u00efa","CountryCode":"DZA","1":"DZA","Population":"117162","2":"117162"},{"Name":"Mostaganem","0":"Mostaganem","CountryCode":"DZA","1":"DZA","Population":"115212","2":"115212"},{"Name":"T\u00e9bessa","0":"T\u00e9bessa","CountryCode":"DZA","1":"DZA","Population":"112007","2":"112007"},{"Name":"Tlemcen (Tilimsen)","0":"Tlemcen (Tilimsen)","CountryCode":"DZA","1":"DZA","Population":"110242","2":"110242"},{"Name":"B\u00e9char","0":"B\u00e9char","CountryCode":"DZA","1":"DZA","Population":"107311","2":"107311"},{"Name":"Tiaret","0":"Tiaret","CountryCode":"DZA","1":"DZA","Population":"100118","2":"100118"},{"Name":"Ech-Chleff (el-Asnam)","0":"Ech-Chleff (el-Asnam)","CountryCode":"DZA","1":"DZA","Population":"96794","2":"96794"},{"Name":"Gharda\u00efa","0":"Gharda\u00efa","CountryCode":"DZA","1":"DZA","Population":"89415","2":"89415"},{"Name":"Tafuna","0":"Tafuna","CountryCode":"ASM","1":"ASM","Population":"5200","2":"5200"},{"Name":"Fagatogo","0":"Fagatogo","CountryCode":"ASM","1":"ASM","Population":"2323","2":"2323"},{"Name":"Andorra la Vella","0":"Andorra la Vella","CountryCode":"AND","1":"AND","Population":"21189","2":"21189"},{"Name":"Luanda","0":"Luanda","CountryCode":"AGO","1":"AGO","Population":"2022000","2":"2022000"},{"Name":"Huambo","0":"Huambo","CountryCode":"AGO","1":"AGO","Population":"163100","2":"163100"},{"Name":"Lobito","0":"Lobito","CountryCode":"AGO","1":"AGO","Population":"130000","2":"130000"},{"Name":"Benguela","0":"Benguela","CountryCode":"AGO","1":"AGO","Population":"128300","2":"128300"},{"Name":"Namibe","0":"Namibe","CountryCode":"AGO","1":"AGO","Population":"118200","2":"118200"},{"Name":"South Hill","0":"South Hill","CountryCode":"AIA","1":"AIA","Population":"961","2":"961"},{"Name":"The Valley","0":"The Valley","CountryCode":"AIA","1":"AIA","Population":"595","2":"595"},{"Name":"Saint John\u00b4s","0":"Saint John\u00b4s","CountryCode":"ATG","1":"ATG","Population":"24000","2":"24000"},{"Name":"Dubai","0":"Dubai","CountryCode":"ARE","1":"ARE","Population":"669181","2":"669181"},{"Name":"Abu Dhabi","0":"Abu Dhabi","CountryCode":"ARE","1":"ARE","Population":"398695","2":"398695"},{"Name":"Sharja","0":"Sharja","CountryCode":"ARE","1":"ARE","Population":"320095","2":"320095"},{"Name":"al-Ayn","0":"al-Ayn","CountryCode":"ARE","1":"ARE","Population":"225970","2":"225970"},{"Name":"Ajman","0":"Ajman","CountryCode":"ARE","1":"ARE","Population":"114395","2":"114395"},{"Name":"Buenos Aires","0":"Buenos Aires","CountryCode":"ARG","1":"ARG","Population":"2982146","2":"2982146"},{"Name":"La Matanza","0":"La Matanza","CountryCode":"ARG","1":"ARG","Population":"1266461","2":"1266461"},{"Name":"C\u00f3rdoba","0":"C\u00f3rdoba","CountryCode":"ARG","1":"ARG","Population":"1157507","2":"1157507"},{"Name":"Rosario","0":"Rosario","CountryCode":"ARG","1":"ARG","Population":"907718","2":"907718"},{"Name":"Lomas de Zamora","0":"Lomas de Zamora","CountryCode":"ARG","1":"ARG","Population":"622013","2":"622013"},{"Name":"Quilmes","0":"Quilmes","CountryCode":"ARG","1":"ARG","Population":"559249","2":"559249"},{"Name":"Almirante Brown","0":"Almirante Brown","CountryCode":"ARG","1":"ARG","Population":"538918","2":"538918"},{"Name":"La Plata","0":"La Plata","CountryCode":"ARG","1":"ARG","Population":"521936","2":"521936"},{"Name":"Mar del Plata","0":"Mar del Plata","CountryCode":"ARG","1":"ARG","Population":"512880","2":"512880"},{"Name":"San Miguel de Tucum\u00e1n","0":"San Miguel de Tucum\u00e1n","CountryCode":"ARG","1":"ARG","Population":"470809","2":"470809"},{"Name":"Lan\u00fas","0":"Lan\u00fas","CountryCode":"ARG","1":"ARG","Population":"469735","2":"469735"},{"Name":"Merlo","0":"Merlo","CountryCode":"ARG","1":"ARG","Population":"463846","2":"463846"},{"Name":"General San Mart\u00edn","0":"General San Mart\u00edn","CountryCode":"ARG","1":"ARG","Population":"422542","2":"422542"},{"Name":"Salta","0":"Salta","CountryCode":"ARG","1":"ARG","Population":"367550","2":"367550"},{"Name":"Moreno","0":"Moreno","CountryCode":"ARG","1":"ARG","Population":"356993","2":"356993"},{"Name":"Santa F\u00e9","0":"Santa F\u00e9","CountryCode":"ARG","1":"ARG","Population":"353063","2":"353063"},{"Name":"Avellaneda","0":"Avellaneda","CountryCode":"ARG","1":"ARG","Population":"353046","2":"353046"},{"Name":"Tres de Febrero","0":"Tres de Febrero","CountryCode":"ARG","1":"ARG","Population":"352311","2":"352311"},{"Name":"Mor\u00f3n","0":"Mor\u00f3n","CountryCode":"ARG","1":"ARG","Population":"349246","2":"349246"},{"Name":"Florencio Varela","0":"Florencio Varela","CountryCode":"ARG","1":"ARG","Population":"315432","2":"315432"},{"Name":"San Isidro","0":"San Isidro","CountryCode":"ARG","1":"ARG","Population":"306341","2":"306341"},{"Name":"Tigre","0":"Tigre","CountryCode":"ARG","1":"ARG","Population":"296226","2":"296226"},{"Name":"Malvinas Argentinas","0":"Malvinas Argentinas","CountryCode":"ARG","1":"ARG","Population":"290335","2":"290335"},{"Name":"Vicente L\u00f3pez","0":"Vicente L\u00f3pez","CountryCode":"ARG","1":"ARG","Population":"288341","2":"288341"},{"Name":"Berazategui","0":"Berazategui","CountryCode":"ARG","1":"ARG","Population":"276916","2":"276916"},{"Name":"Corrientes","0":"Corrientes","CountryCode":"ARG","1":"ARG","Population":"258103","2":"258103"},{"Name":"San Miguel","0":"San Miguel","CountryCode":"ARG","1":"ARG","Population":"248700","2":"248700"},{"Name":"Bah\u00eda Blanca","0":"Bah\u00eda Blanca","CountryCode":"ARG","1":"ARG","Population":"239810","2":"239810"},{"Name":"Esteban Echeverr\u00eda","0":"Esteban Echeverr\u00eda","CountryCode":"ARG","1":"ARG","Population":"235760","2":"235760"},{"Name":"Resistencia","0":"Resistencia","CountryCode":"ARG","1":"ARG","Population":"229212","2":"229212"},{"Name":"Jos\u00e9 C. Paz","0":"Jos\u00e9 C. Paz","CountryCode":"ARG","1":"ARG","Population":"221754","2":"221754"},{"Name":"Paran\u00e1","0":"Paran\u00e1","CountryCode":"ARG","1":"ARG","Population":"207041","2":"207041"},{"Name":"Godoy Cruz","0":"Godoy Cruz","CountryCode":"ARG","1":"ARG","Population":"206998","2":"206998"},{"Name":"Posadas","0":"Posadas","CountryCode":"ARG","1":"ARG","Population":"201273","2":"201273"},{"Name":"Guaymall\u00e9n","0":"Guaymall\u00e9n","CountryCode":"ARG","1":"ARG","Population":"200595","2":"200595"},{"Name":"Santiago del Estero","0":"Santiago del Estero","CountryCode":"ARG","1":"ARG","Population":"189947","2":"189947"},{"Name":"San Salvador de Jujuy","0":"San Salvador de Jujuy","CountryCode":"ARG","1":"ARG","Population":"178748","2":"178748"},{"Name":"Hurlingham","0":"Hurlingham","CountryCode":"ARG","1":"ARG","Population":"170028","2":"170028"},{"Name":"Neuqu\u00e9n","0":"Neuqu\u00e9n","CountryCode":"ARG","1":"ARG","Population":"167296","2":"167296"},{"Name":"Ituzaing\u00f3","0":"Ituzaing\u00f3","CountryCode":"ARG","1":"ARG","Population":"158197","2":"158197"},{"Name":"San Fernando","0":"San Fernando","CountryCode":"ARG","1":"ARG","Population":"153036","2":"153036"},{"Name":"Formosa","0":"Formosa","CountryCode":"ARG","1":"ARG","Population":"147636","2":"147636"},{"Name":"Las Heras","0":"Las Heras","CountryCode":"ARG","1":"ARG","Population":"145823","2":"145823"},{"Name":"La Rioja","0":"La Rioja","CountryCode":"ARG","1":"ARG","Population":"138117","2":"138117"},{"Name":"San Fernando del Valle de Cata","0":"San Fernando del Valle de Cata","CountryCode":"ARG","1":"ARG","Population":"134935","2":"134935"},{"Name":"R\u00edo Cuarto","0":"R\u00edo Cuarto","CountryCode":"ARG","1":"ARG","Population":"134355","2":"134355"},{"Name":"Comodoro Rivadavia","0":"Comodoro Rivadavia","CountryCode":"ARG","1":"ARG","Population":"124104","2":"124104"},{"Name":"Mendoza","0":"Mendoza","CountryCode":"ARG","1":"ARG","Population":"123027","2":"123027"},{"Name":"San Nicol\u00e1s de los Arroyos","0":"San Nicol\u00e1s de los Arroyos","CountryCode":"ARG","1":"ARG","Population":"119302","2":"119302"},{"Name":"San Juan","0":"San Juan","CountryCode":"ARG","1":"ARG","Population":"119152","2":"119152"},{"Name":"Escobar","0":"Escobar","CountryCode":"ARG","1":"ARG","Population":"116675","2":"116675"},{"Name":"Concordia","0":"Concordia","CountryCode":"ARG","1":"ARG","Population":"116485","2":"116485"},{"Name":"Pilar","0":"Pilar","CountryCode":"ARG","1":"ARG","Population":"113428","2":"113428"},{"Name":"San Luis","0":"San Luis","CountryCode":"ARG","1":"ARG","Population":"110136","2":"110136"},{"Name":"Ezeiza","0":"Ezeiza","CountryCode":"ARG","1":"ARG","Population":"99578","2":"99578"},{"Name":"San Rafael","0":"San Rafael","CountryCode":"ARG","1":"ARG","Population":"94651","2":"94651"},{"Name":"Tandil","0":"Tandil","CountryCode":"ARG","1":"ARG","Population":"91101","2":"91101"},{"Name":"Yerevan","0":"Yerevan","CountryCode":"ARM","1":"ARM","Population":"1248700","2":"1248700"},{"Name":"Gjumri","0":"Gjumri","CountryCode":"ARM","1":"ARM","Population":"211700","2":"211700"},{"Name":"Vanadzor","0":"Vanadzor","CountryCode":"ARM","1":"ARM","Population":"172700","2":"172700"},{"Name":"Oranjestad","0":"Oranjestad","CountryCode":"ABW","1":"ABW","Population":"29034","2":"29034"},{"Name":"Sydney","0":"Sydney","CountryCode":"AUS","1":"AUS","Population":"3276207","2":"3276207"},{"Name":"Melbourne","0":"Melbourne","CountryCode":"AUS","1":"AUS","Population":"2865329","2":"2865329"},{"Name":"Brisbane","0":"Brisbane","CountryCode":"AUS","1":"AUS","Population":"1291117","2":"1291117"},{"Name":"Perth","0":"Perth","CountryCode":"AUS","1":"AUS","Population":"1096829","2":"1096829"},{"Name":"Adelaide","0":"Adelaide","CountryCode":"AUS","1":"AUS","Population":"978100","2":"978100"},{"Name":"Canberra","0":"Canberra","CountryCode":"AUS","1":"AUS","Population":"322723","2":"322723"},{"Name":"Gold Coast","0":"Gold Coast","CountryCode":"AUS","1":"AUS","Population":"311932","2":"311932"},{"Name":"Newcastle","0":"Newcastle","CountryCode":"AUS","1":"AUS","Population":"270324","2":"270324"},{"Name":"Central Coast","0":"Central Coast","CountryCode":"AUS","1":"AUS","Population":"227657","2":"227657"},{"Name":"Wollongong","0":"Wollongong","CountryCode":"AUS","1":"AUS","Population":"219761","2":"219761"},{"Name":"Hobart","0":"Hobart","CountryCode":"AUS","1":"AUS","Population":"126118","2":"126118"},{"Name":"Geelong","0":"Geelong","CountryCode":"AUS","1":"AUS","Population":"125382","2":"125382"},{"Name":"Townsville","0":"Townsville","CountryCode":"AUS","1":"AUS","Population":"109914","2":"109914"},{"Name":"Cairns","0":"Cairns","CountryCode":"AUS","1":"AUS","Population":"92273","2":"92273"},{"Name":"Baku","0":"Baku","CountryCode":"AZE","1":"AZE","Population":"1787800","2":"1787800"},{"Name":"G\u00e4nc\u00e4","0":"G\u00e4nc\u00e4","CountryCode":"AZE","1":"AZE","Population":"299300","2":"299300"},{"Name":"Sumqayit","0":"Sumqayit","CountryCode":"AZE","1":"AZE","Population":"283000","2":"283000"},{"Name":"Ming\u00e4\u00e7evir","0":"Ming\u00e4\u00e7evir","CountryCode":"AZE","1":"AZE","Population":"93900","2":"93900"},{"Name":"Nassau","0":"Nassau","CountryCode":"BHS","1":"BHS","Population":"172000","2":"172000"},{"Name":"al-Manama","0":"al-Manama","CountryCode":"BHR","1":"BHR","Population":"148000","2":"148000"},{"Name":"Dhaka","0":"Dhaka","CountryCode":"BGD","1":"BGD","Population":"3612850","2":"3612850"},{"Name":"Chittagong","0":"Chittagong","CountryCode":"BGD","1":"BGD","Population":"1392860","2":"1392860"},{"Name":"Khulna","0":"Khulna","CountryCode":"BGD","1":"BGD","Population":"663340","2":"663340"},{"Name":"Rajshahi","0":"Rajshahi","CountryCode":"BGD","1":"BGD","Population":"294056","2":"294056"},{"Name":"Narayanganj","0":"Narayanganj","CountryCode":"BGD","1":"BGD","Population":"202134","2":"202134"},{"Name":"Rangpur","0":"Rangpur","CountryCode":"BGD","1":"BGD","Population":"191398","2":"191398"},{"Name":"Mymensingh","0":"Mymensingh","CountryCode":"BGD","1":"BGD","Population":"188713","2":"188713"},{"Name":"Barisal","0":"Barisal","CountryCode":"BGD","1":"BGD","Population":"170232","2":"170232"},{"Name":"Tungi","0":"Tungi","CountryCode":"BGD","1":"BGD","Population":"168702","2":"168702"},{"Name":"Jessore","0":"Jessore","CountryCode":"BGD","1":"BGD","Population":"139710","2":"139710"},{"Name":"Comilla","0":"Comilla","CountryCode":"BGD","1":"BGD","Population":"135313","2":"135313"},{"Name":"Nawabganj","0":"Nawabganj","CountryCode":"BGD","1":"BGD","Population":"130577","2":"130577"},{"Name":"Dinajpur","0":"Dinajpur","CountryCode":"BGD","1":"BGD","Population":"127815","2":"127815"},{"Name":"Bogra","0":"Bogra","CountryCode":"BGD","1":"BGD","Population":"120170","2":"120170"},{"Name":"Sylhet","0":"Sylhet","CountryCode":"BGD","1":"BGD","Population":"117396","2":"117396"},{"Name":"Brahmanbaria","0":"Brahmanbaria","CountryCode":"BGD","1":"BGD","Population":"109032","2":"109032"},{"Name":"Tangail","0":"Tangail","CountryCode":"BGD","1":"BGD","Population":"106004","2":"106004"},{"Name":"Jamalpur","0":"Jamalpur","CountryCode":"BGD","1":"BGD","Population":"103556","2":"103556"},{"Name":"Pabna","0":"Pabna","CountryCode":"BGD","1":"BGD","Population":"103277","2":"103277"},{"Name":"Naogaon","0":"Naogaon","CountryCode":"BGD","1":"BGD","Population":"101266","2":"101266"},{"Name":"Sirajganj","0":"Sirajganj","CountryCode":"BGD","1":"BGD","Population":"99669","2":"99669"},{"Name":"Narsinghdi","0":"Narsinghdi","CountryCode":"BGD","1":"BGD","Population":"98342","2":"98342"},{"Name":"Saidpur","0":"Saidpur","CountryCode":"BGD","1":"BGD","Population":"96777","2":"96777"},{"Name":"Gazipur","0":"Gazipur","CountryCode":"BGD","1":"BGD","Population":"96717","2":"96717"},{"Name":"Bridgetown","0":"Bridgetown","CountryCode":"BRB","1":"BRB","Population":"6070","2":"6070"},{"Name":"Antwerpen","0":"Antwerpen","CountryCode":"BEL","1":"BEL","Population":"446525","2":"446525"},{"Name":"Gent","0":"Gent","CountryCode":"BEL","1":"BEL","Population":"224180","2":"224180"},{"Name":"Charleroi","0":"Charleroi","CountryCode":"BEL","1":"BEL","Population":"200827","2":"200827"},{"Name":"Li\u00e8ge","0":"Li\u00e8ge","CountryCode":"BEL","1":"BEL","Population":"185639","2":"185639"},{"Name":"Bruxelles [Brussel]","0":"Bruxelles [Brussel]","CountryCode":"BEL","1":"BEL","Population":"133859","2":"133859"},{"Name":"Brugge","0":"Brugge","CountryCode":"BEL","1":"BEL","Population":"116246","2":"116246"},{"Name":"Schaerbeek","0":"Schaerbeek","CountryCode":"BEL","1":"BEL","Population":"105692","2":"105692"},{"Name":"Namur","0":"Namur","CountryCode":"BEL","1":"BEL","Population":"105419","2":"105419"},{"Name":"Mons","0":"Mons","CountryCode":"BEL","1":"BEL","Population":"90935","2":"90935"},{"Name":"Belize City","0":"Belize City","CountryCode":"BLZ","1":"BLZ","Population":"55810","2":"55810"},{"Name":"Belmopan","0":"Belmopan","CountryCode":"BLZ","1":"BLZ","Population":"7105","2":"7105"},{"Name":"Cotonou","0":"Cotonou","CountryCode":"BEN","1":"BEN","Population":"536827","2":"536827"},{"Name":"Porto-Novo","0":"Porto-Novo","CountryCode":"BEN","1":"BEN","Population":"194000","2":"194000"},{"Name":"Djougou","0":"Djougou","CountryCode":"BEN","1":"BEN","Population":"134099","2":"134099"},{"Name":"Parakou","0":"Parakou","CountryCode":"BEN","1":"BEN","Population":"103577","2":"103577"},{"Name":"Saint George","0":"Saint George","CountryCode":"BMU","1":"BMU","Population":"1800","2":"1800"},{"Name":"Hamilton","0":"Hamilton","CountryCode":"BMU","1":"BMU","Population":"1200","2":"1200"},{"Name":"Thimphu","0":"Thimphu","CountryCode":"BTN","1":"BTN","Population":"22000","2":"22000"},{"Name":"Santa Cruz de la Sierra","0":"Santa Cruz de la Sierra","CountryCode":"BOL","1":"BOL","Population":"935361","2":"935361"},{"Name":"La Paz","0":"La Paz","CountryCode":"BOL","1":"BOL","Population":"758141","2":"758141"},{"Name":"El Alto","0":"El Alto","CountryCode":"BOL","1":"BOL","Population":"534466","2":"534466"},{"Name":"Cochabamba","0":"Cochabamba","CountryCode":"BOL","1":"BOL","Population":"482800","2":"482800"},{"Name":"Oruro","0":"Oruro","CountryCode":"BOL","1":"BOL","Population":"223553","2":"223553"},{"Name":"Sucre","0":"Sucre","CountryCode":"BOL","1":"BOL","Population":"178426","2":"178426"},{"Name":"Potos\u00ed","0":"Potos\u00ed","CountryCode":"BOL","1":"BOL","Population":"140642","2":"140642"},{"Name":"Tarija","0":"Tarija","CountryCode":"BOL","1":"BOL","Population":"125255","2":"125255"},{"Name":"Sarajevo","0":"Sarajevo","CountryCode":"BIH","1":"BIH","Population":"360000","2":"360000"},{"Name":"Banja Luka","0":"Banja Luka","CountryCode":"BIH","1":"BIH","Population":"143079","2":"143079"},{"Name":"Zenica","0":"Zenica","CountryCode":"BIH","1":"BIH","Population":"96027","2":"96027"},{"Name":"Gaborone","0":"Gaborone","CountryCode":"BWA","1":"BWA","Population":"213017","2":"213017"},{"Name":"Francistown","0":"Francistown","CountryCode":"BWA","1":"BWA","Population":"101805","2":"101805"},{"Name":"S\u00e3o Paulo","0":"S\u00e3o Paulo","CountryCode":"BRA","1":"BRA","Population":"9968485","2":"9968485"},{"Name":"Rio de Janeiro","0":"Rio de Janeiro","CountryCode":"BRA","1":"BRA","Population":"5598953","2":"5598953"},{"Name":"Salvador","0":"Salvador","CountryCode":"BRA","1":"BRA","Population":"2302832","2":"2302832"},{"Name":"Belo Horizonte","0":"Belo Horizonte","CountryCode":"BRA","1":"BRA","Population":"2139125","2":"2139125"},{"Name":"Fortaleza","0":"Fortaleza","CountryCode":"BRA","1":"BRA","Population":"2097757","2":"2097757"},{"Name":"Bras\u00edlia","0":"Bras\u00edlia","CountryCode":"BRA","1":"BRA","Population":"1969868","2":"1969868"},{"Name":"Curitiba","0":"Curitiba","CountryCode":"BRA","1":"BRA","Population":"1584232","2":"1584232"},{"Name":"Recife","0":"Recife","CountryCode":"BRA","1":"BRA","Population":"1378087","2":"1378087"},{"Name":"Porto Alegre","0":"Porto Alegre","CountryCode":"BRA","1":"BRA","Population":"1314032","2":"1314032"},{"Name":"Manaus","0":"Manaus","CountryCode":"BRA","1":"BRA","Population":"1255049","2":"1255049"},{"Name":"Bel\u00e9m","0":"Bel\u00e9m","CountryCode":"BRA","1":"BRA","Population":"1186926","2":"1186926"},{"Name":"Guarulhos","0":"Guarulhos","CountryCode":"BRA","1":"BRA","Population":"1095874","2":"1095874"},{"Name":"Goi\u00e2nia","0":"Goi\u00e2nia","CountryCode":"BRA","1":"BRA","Population":"1056330","2":"1056330"},{"Name":"Campinas","0":"Campinas","CountryCode":"BRA","1":"BRA","Population":"950043","2":"950043"},{"Name":"S\u00e3o Gon\u00e7alo","0":"S\u00e3o Gon\u00e7alo","CountryCode":"BRA","1":"BRA","Population":"869254","2":"869254"},{"Name":"Nova Igua\u00e7u","0":"Nova Igua\u00e7u","CountryCode":"BRA","1":"BRA","Population":"862225","2":"862225"},{"Name":"S\u00e3o Lu\u00eds","0":"S\u00e3o Lu\u00eds","CountryCode":"BRA","1":"BRA","Population":"837588","2":"837588"},{"Name":"Macei\u00f3","0":"Macei\u00f3","CountryCode":"BRA","1":"BRA","Population":"786288","2":"786288"},{"Name":"Duque de Caxias","0":"Duque de Caxias","CountryCode":"BRA","1":"BRA","Population":"746758","2":"746758"},{"Name":"S\u00e3o Bernardo do Campo","0":"S\u00e3o Bernardo do Campo","CountryCode":"BRA","1":"BRA","Population":"723132","2":"723132"},{"Name":"Teresina","0":"Teresina","CountryCode":"BRA","1":"BRA","Population":"691942","2":"691942"},{"Name":"Natal","0":"Natal","CountryCode":"BRA","1":"BRA","Population":"688955","2":"688955"},{"Name":"Osasco","0":"Osasco","CountryCode":"BRA","1":"BRA","Population":"659604","2":"659604"},{"Name":"Campo Grande","0":"Campo Grande","CountryCode":"BRA","1":"BRA","Population":"649593","2":"649593"},{"Name":"Santo Andr\u00e9","0":"Santo Andr\u00e9","CountryCode":"BRA","1":"BRA","Population":"630073","2":"630073"},{"Name":"Jo\u00e3o Pessoa","0":"Jo\u00e3o Pessoa","CountryCode":"BRA","1":"BRA","Population":"584029","2":"584029"},{"Name":"Jaboat\u00e3o dos Guararapes","0":"Jaboat\u00e3o dos Guararapes","CountryCode":"BRA","1":"BRA","Population":"558680","2":"558680"},{"Name":"Contagem","0":"Contagem","CountryCode":"BRA","1":"BRA","Population":"520801","2":"520801"},{"Name":"S\u00e3o Jos\u00e9 dos Campos","0":"S\u00e3o Jos\u00e9 dos Campos","CountryCode":"BRA","1":"BRA","Population":"515553","2":"515553"},{"Name":"Uberl\u00e2ndia","0":"Uberl\u00e2ndia","CountryCode":"BRA","1":"BRA","Population":"487222","2":"487222"},{"Name":"Feira de Santana","0":"Feira de Santana","CountryCode":"BRA","1":"BRA","Population":"479992","2":"479992"},{"Name":"Ribeir\u00e3o Preto","0":"Ribeir\u00e3o Preto","CountryCode":"BRA","1":"BRA","Population":"473276","2":"473276"},{"Name":"Sorocaba","0":"Sorocaba","CountryCode":"BRA","1":"BRA","Population":"466823","2":"466823"},{"Name":"Niter\u00f3i","0":"Niter\u00f3i","CountryCode":"BRA","1":"BRA","Population":"459884","2":"459884"},{"Name":"Cuiab\u00e1","0":"Cuiab\u00e1","CountryCode":"BRA","1":"BRA","Population":"453813","2":"453813"},{"Name":"Juiz de Fora","0":"Juiz de Fora","CountryCode":"BRA","1":"BRA","Population":"450288","2":"450288"},{"Name":"Aracaju","0":"Aracaju","CountryCode":"BRA","1":"BRA","Population":"445555","2":"445555"},{"Name":"S\u00e3o Jo\u00e3o de Meriti","0":"S\u00e3o Jo\u00e3o de Meriti","CountryCode":"BRA","1":"BRA","Population":"440052","2":"440052"},{"Name":"Londrina","0":"Londrina","CountryCode":"BRA","1":"BRA","Population":"432257","2":"432257"},{"Name":"Joinville","0":"Joinville","CountryCode":"BRA","1":"BRA","Population":"428011","2":"428011"},{"Name":"Belford Roxo","0":"Belford Roxo","CountryCode":"BRA","1":"BRA","Population":"425194","2":"425194"},{"Name":"Santos","0":"Santos","CountryCode":"BRA","1":"BRA","Population":"408748","2":"408748"},{"Name":"Ananindeua","0":"Ananindeua","CountryCode":"BRA","1":"BRA","Population":"400940","2":"400940"},{"Name":"Campos dos Goytacazes","0":"Campos dos Goytacazes","CountryCode":"BRA","1":"BRA","Population":"398418","2":"398418"},{"Name":"Mau\u00e1","0":"Mau\u00e1","CountryCode":"BRA","1":"BRA","Population":"375055","2":"375055"},{"Name":"Carapicu\u00edba","0":"Carapicu\u00edba","CountryCode":"BRA","1":"BRA","Population":"357552","2":"357552"},{"Name":"Olinda","0":"Olinda","CountryCode":"BRA","1":"BRA","Population":"354732","2":"354732"},{"Name":"Campina Grande","0":"Campina Grande","CountryCode":"BRA","1":"BRA","Population":"352497","2":"352497"},{"Name":"S\u00e3o Jos\u00e9 do Rio Preto","0":"S\u00e3o Jos\u00e9 do Rio Preto","CountryCode":"BRA","1":"BRA","Population":"351944","2":"351944"},{"Name":"Caxias do Sul","0":"Caxias do Sul","CountryCode":"BRA","1":"BRA","Population":"349581","2":"349581"},{"Name":"Moji das Cruzes","0":"Moji das Cruzes","CountryCode":"BRA","1":"BRA","Population":"339194","2":"339194"},{"Name":"Diadema","0":"Diadema","CountryCode":"BRA","1":"BRA","Population":"335078","2":"335078"},{"Name":"Aparecida de Goi\u00e2nia","0":"Aparecida de Goi\u00e2nia","CountryCode":"BRA","1":"BRA","Population":"324662","2":"324662"},{"Name":"Piracicaba","0":"Piracicaba","CountryCode":"BRA","1":"BRA","Population":"319104","2":"319104"},{"Name":"Cariacica","0":"Cariacica","CountryCode":"BRA","1":"BRA","Population":"319033","2":"319033"},{"Name":"Vila Velha","0":"Vila Velha","CountryCode":"BRA","1":"BRA","Population":"318758","2":"318758"},{"Name":"Pelotas","0":"Pelotas","CountryCode":"BRA","1":"BRA","Population":"315415","2":"315415"},{"Name":"Bauru","0":"Bauru","CountryCode":"BRA","1":"BRA","Population":"313670","2":"313670"},{"Name":"Porto Velho","0":"Porto Velho","CountryCode":"BRA","1":"BRA","Population":"309750","2":"309750"},{"Name":"Serra","0":"Serra","CountryCode":"BRA","1":"BRA","Population":"302666","2":"302666"},{"Name":"Betim","0":"Betim","CountryCode":"BRA","1":"BRA","Population":"302108","2":"302108"},{"Name":"Jund\u00eda\u00ed","0":"Jund\u00eda\u00ed","CountryCode":"BRA","1":"BRA","Population":"296127","2":"296127"},{"Name":"Canoas","0":"Canoas","CountryCode":"BRA","1":"BRA","Population":"294125","2":"294125"},{"Name":"Franca","0":"Franca","CountryCode":"BRA","1":"BRA","Population":"290139","2":"290139"},{"Name":"S\u00e3o Vicente","0":"S\u00e3o Vicente","CountryCode":"BRA","1":"BRA","Population":"286848","2":"286848"},{"Name":"Maring\u00e1","0":"Maring\u00e1","CountryCode":"BRA","1":"BRA","Population":"286461","2":"286461"},{"Name":"Montes Claros","0":"Montes Claros","CountryCode":"BRA","1":"BRA","Population":"286058","2":"286058"},{"Name":"An\u00e1polis","0":"An\u00e1polis","CountryCode":"BRA","1":"BRA","Population":"282197","2":"282197"},{"Name":"Florian\u00f3polis","0":"Florian\u00f3polis","CountryCode":"BRA","1":"BRA","Population":"281928","2":"281928"},{"Name":"Petr\u00f3polis","0":"Petr\u00f3polis","CountryCode":"BRA","1":"BRA","Population":"279183","2":"279183"},{"Name":"Itaquaquecetuba","0":"Itaquaquecetuba","CountryCode":"BRA","1":"BRA","Population":"270874","2":"270874"},{"Name":"Vit\u00f3ria","0":"Vit\u00f3ria","CountryCode":"BRA","1":"BRA","Population":"270626","2":"270626"},{"Name":"Ponta Grossa","0":"Ponta Grossa","CountryCode":"BRA","1":"BRA","Population":"268013","2":"268013"},{"Name":"Rio Branco","0":"Rio Branco","CountryCode":"BRA","1":"BRA","Population":"259537","2":"259537"},{"Name":"Foz do Igua\u00e7u","0":"Foz do Igua\u00e7u","CountryCode":"BRA","1":"BRA","Population":"259425","2":"259425"},{"Name":"Macap\u00e1","0":"Macap\u00e1","CountryCode":"BRA","1":"BRA","Population":"256033","2":"256033"},{"Name":"Ilh\u00e9us","0":"Ilh\u00e9us","CountryCode":"BRA","1":"BRA","Population":"254970","2":"254970"},{"Name":"Vit\u00f3ria da Conquista","0":"Vit\u00f3ria da Conquista","CountryCode":"BRA","1":"BRA","Population":"253587","2":"253587"},{"Name":"Uberaba","0":"Uberaba","CountryCode":"BRA","1":"BRA","Population":"249225","2":"249225"},{"Name":"Paulista","0":"Paulista","CountryCode":"BRA","1":"BRA","Population":"248473","2":"248473"},{"Name":"Limeira","0":"Limeira","CountryCode":"BRA","1":"BRA","Population":"245497","2":"245497"},{"Name":"Blumenau","0":"Blumenau","CountryCode":"BRA","1":"BRA","Population":"244379","2":"244379"},{"Name":"Caruaru","0":"Caruaru","CountryCode":"BRA","1":"BRA","Population":"244247","2":"244247"},{"Name":"Santar\u00e9m","0":"Santar\u00e9m","CountryCode":"BRA","1":"BRA","Population":"241771","2":"241771"},{"Name":"Volta Redonda","0":"Volta Redonda","CountryCode":"BRA","1":"BRA","Population":"240315","2":"240315"},{"Name":"Novo Hamburgo","0":"Novo Hamburgo","CountryCode":"BRA","1":"BRA","Population":"239940","2":"239940"},{"Name":"Caucaia","0":"Caucaia","CountryCode":"BRA","1":"BRA","Population":"238738","2":"238738"},{"Name":"Santa Maria","0":"Santa Maria","CountryCode":"BRA","1":"BRA","Population":"238473","2":"238473"},{"Name":"Cascavel","0":"Cascavel","CountryCode":"BRA","1":"BRA","Population":"237510","2":"237510"},{"Name":"Guaruj\u00e1","0":"Guaruj\u00e1","CountryCode":"BRA","1":"BRA","Population":"237206","2":"237206"},{"Name":"Ribeir\u00e3o das Neves","0":"Ribeir\u00e3o das Neves","CountryCode":"BRA","1":"BRA","Population":"232685","2":"232685"},{"Name":"Governador Valadares","0":"Governador Valadares","CountryCode":"BRA","1":"BRA","Population":"231724","2":"231724"},{"Name":"Taubat\u00e9","0":"Taubat\u00e9","CountryCode":"BRA","1":"BRA","Population":"229130","2":"229130"},{"Name":"Imperatriz","0":"Imperatriz","CountryCode":"BRA","1":"BRA","Population":"224564","2":"224564"},{"Name":"Gravata\u00ed","0":"Gravata\u00ed","CountryCode":"BRA","1":"BRA","Population":"223011","2":"223011"},{"Name":"Embu","0":"Embu","CountryCode":"BRA","1":"BRA","Population":"222223","2":"222223"},{"Name":"Mossor\u00f3","0":"Mossor\u00f3","CountryCode":"BRA","1":"BRA","Population":"214901","2":"214901"},{"Name":"V\u00e1rzea Grande","0":"V\u00e1rzea Grande","CountryCode":"BRA","1":"BRA","Population":"214435","2":"214435"},{"Name":"Petrolina","0":"Petrolina","CountryCode":"BRA","1":"BRA","Population":"210540","2":"210540"},{"Name":"Barueri","0":"Barueri","CountryCode":"BRA","1":"BRA","Population":"208426","2":"208426"},{"Name":"Viam\u00e3o","0":"Viam\u00e3o","CountryCode":"BRA","1":"BRA","Population":"207557","2":"207557"},{"Name":"Ipatinga","0":"Ipatinga","CountryCode":"BRA","1":"BRA","Population":"206338","2":"206338"},{"Name":"Juazeiro","0":"Juazeiro","CountryCode":"BRA","1":"BRA","Population":"201073","2":"201073"},{"Name":"Juazeiro do Norte","0":"Juazeiro do Norte","CountryCode":"BRA","1":"BRA","Population":"199636","2":"199636"},{"Name":"Tabo\u00e3o da Serra","0":"Tabo\u00e3o da Serra","CountryCode":"BRA","1":"BRA","Population":"197550","2":"197550"},{"Name":"S\u00e3o Jos\u00e9 dos Pinhais","0":"S\u00e3o Jos\u00e9 dos Pinhais","CountryCode":"BRA","1":"BRA","Population":"196884","2":"196884"},{"Name":"Mag\u00e9","0":"Mag\u00e9","CountryCode":"BRA","1":"BRA","Population":"196147","2":"196147"},{"Name":"Suzano","0":"Suzano","CountryCode":"BRA","1":"BRA","Population":"195434","2":"195434"},{"Name":"S\u00e3o Leopoldo","0":"S\u00e3o Leopoldo","CountryCode":"BRA","1":"BRA","Population":"189258","2":"189258"},{"Name":"Mar\u00edlia","0":"Mar\u00edlia","CountryCode":"BRA","1":"BRA","Population":"188691","2":"188691"},{"Name":"S\u00e3o Carlos","0":"S\u00e3o Carlos","CountryCode":"BRA","1":"BRA","Population":"187122","2":"187122"},{"Name":"Sumar\u00e9","0":"Sumar\u00e9","CountryCode":"BRA","1":"BRA","Population":"186205","2":"186205"},{"Name":"Presidente Prudente","0":"Presidente Prudente","CountryCode":"BRA","1":"BRA","Population":"185340","2":"185340"},{"Name":"Divin\u00f3polis","0":"Divin\u00f3polis","CountryCode":"BRA","1":"BRA","Population":"185047","2":"185047"},{"Name":"Sete Lagoas","0":"Sete Lagoas","CountryCode":"BRA","1":"BRA","Population":"182984","2":"182984"},{"Name":"Rio Grande","0":"Rio Grande","CountryCode":"BRA","1":"BRA","Population":"182222","2":"182222"},{"Name":"Itabuna","0":"Itabuna","CountryCode":"BRA","1":"BRA","Population":"182148","2":"182148"},{"Name":"Jequi\u00e9","0":"Jequi\u00e9","CountryCode":"BRA","1":"BRA","Population":"179128","2":"179128"},{"Name":"Arapiraca","0":"Arapiraca","CountryCode":"BRA","1":"BRA","Population":"178988","2":"178988"},{"Name":"Colombo","0":"Colombo","CountryCode":"BRA","1":"BRA","Population":"177764","2":"177764"},{"Name":"Americana","0":"Americana","CountryCode":"BRA","1":"BRA","Population":"177409","2":"177409"},{"Name":"Alvorada","0":"Alvorada","CountryCode":"BRA","1":"BRA","Population":"175574","2":"175574"},{"Name":"Araraquara","0":"Araraquara","CountryCode":"BRA","1":"BRA","Population":"174381","2":"174381"},{"Name":"Itabora\u00ed","0":"Itabora\u00ed","CountryCode":"BRA","1":"BRA","Population":"173977","2":"173977"},{"Name":"Santa B\u00e1rbara d\u00b4Oeste","0":"Santa B\u00e1rbara d\u00b4Oeste","CountryCode":"BRA","1":"BRA","Population":"171657","2":"171657"},{"Name":"Nova Friburgo","0":"Nova Friburgo","CountryCode":"BRA","1":"BRA","Population":"170697","2":"170697"},{"Name":"Jacare\u00ed","0":"Jacare\u00ed","CountryCode":"BRA","1":"BRA","Population":"170356","2":"170356"},{"Name":"Ara\u00e7atuba","0":"Ara\u00e7atuba","CountryCode":"BRA","1":"BRA","Population":"169303","2":"169303"},{"Name":"Barra Mansa","0":"Barra Mansa","CountryCode":"BRA","1":"BRA","Population":"168953","2":"168953"},{"Name":"Praia Grande","0":"Praia Grande","CountryCode":"BRA","1":"BRA","Population":"168434","2":"168434"},{"Name":"Marab\u00e1","0":"Marab\u00e1","CountryCode":"BRA","1":"BRA","Population":"167795","2":"167795"},{"Name":"Crici\u00fama","0":"Crici\u00fama","CountryCode":"BRA","1":"BRA","Population":"167661","2":"167661"},{"Name":"Boa Vista","0":"Boa Vista","CountryCode":"BRA","1":"BRA","Population":"167185","2":"167185"},{"Name":"Passo Fundo","0":"Passo Fundo","CountryCode":"BRA","1":"BRA","Population":"166343","2":"166343"},{"Name":"Dourados","0":"Dourados","CountryCode":"BRA","1":"BRA","Population":"164716","2":"164716"},{"Name":"Santa Luzia","0":"Santa Luzia","CountryCode":"BRA","1":"BRA","Population":"164704","2":"164704"},{"Name":"Rio Claro","0":"Rio Claro","CountryCode":"BRA","1":"BRA","Population":"163551","2":"163551"},{"Name":"Maracana\u00fa","0":"Maracana\u00fa","CountryCode":"BRA","1":"BRA","Population":"162022","2":"162022"},{"Name":"Guarapuava","0":"Guarapuava","CountryCode":"BRA","1":"BRA","Population":"160510","2":"160510"},{"Name":"Rondon\u00f3polis","0":"Rondon\u00f3polis","CountryCode":"BRA","1":"BRA","Population":"155115","2":"155115"},{"Name":"S\u00e3o Jos\u00e9","0":"S\u00e3o Jos\u00e9","CountryCode":"BRA","1":"BRA","Population":"155105","2":"155105"},{"Name":"Cachoeiro de Itapemirim","0":"Cachoeiro de Itapemirim","CountryCode":"BRA","1":"BRA","Population":"155024","2":"155024"},{"Name":"Nil\u00f3polis","0":"Nil\u00f3polis","CountryCode":"BRA","1":"BRA","Population":"153383","2":"153383"},{"Name":"Itapevi","0":"Itapevi","CountryCode":"BRA","1":"BRA","Population":"150664","2":"150664"},{"Name":"Cabo de Santo Agostinho","0":"Cabo de Santo Agostinho","CountryCode":"BRA","1":"BRA","Population":"149964","2":"149964"},{"Name":"Cama\u00e7ari","0":"Cama\u00e7ari","CountryCode":"BRA","1":"BRA","Population":"149146","2":"149146"},{"Name":"Sobral","0":"Sobral","CountryCode":"BRA","1":"BRA","Population":"146005","2":"146005"},{"Name":"Itaja\u00ed","0":"Itaja\u00ed","CountryCode":"BRA","1":"BRA","Population":"145197","2":"145197"},{"Name":"Chapec\u00f3","0":"Chapec\u00f3","CountryCode":"BRA","1":"BRA","Population":"144158","2":"144158"},{"Name":"Cotia","0":"Cotia","CountryCode":"BRA","1":"BRA","Population":"140042","2":"140042"},{"Name":"Lages","0":"Lages","CountryCode":"BRA","1":"BRA","Population":"139570","2":"139570"},{"Name":"Ferraz de Vasconcelos","0":"Ferraz de Vasconcelos","CountryCode":"BRA","1":"BRA","Population":"139283","2":"139283"},{"Name":"Indaiatuba","0":"Indaiatuba","CountryCode":"BRA","1":"BRA","Population":"135968","2":"135968"},{"Name":"Hortol\u00e2ndia","0":"Hortol\u00e2ndia","CountryCode":"BRA","1":"BRA","Population":"135755","2":"135755"},{"Name":"Caxias","0":"Caxias","CountryCode":"BRA","1":"BRA","Population":"133980","2":"133980"},{"Name":"S\u00e3o Caetano do Sul","0":"S\u00e3o Caetano do Sul","CountryCode":"BRA","1":"BRA","Population":"133321","2":"133321"},{"Name":"Itu","0":"Itu","CountryCode":"BRA","1":"BRA","Population":"132736","2":"132736"},{"Name":"Nossa Senhora do Socorro","0":"Nossa Senhora do Socorro","CountryCode":"BRA","1":"BRA","Population":"131351","2":"131351"},{"Name":"Parna\u00edba","0":"Parna\u00edba","CountryCode":"BRA","1":"BRA","Population":"129756","2":"129756"},{"Name":"Po\u00e7os de Caldas","0":"Po\u00e7os de Caldas","CountryCode":"BRA","1":"BRA","Population":"129683","2":"129683"},{"Name":"Teres\u00f3polis","0":"Teres\u00f3polis","CountryCode":"BRA","1":"BRA","Population":"128079","2":"128079"},{"Name":"Barreiras","0":"Barreiras","CountryCode":"BRA","1":"BRA","Population":"127801","2":"127801"},{"Name":"Castanhal","0":"Castanhal","CountryCode":"BRA","1":"BRA","Population":"127634","2":"127634"},{"Name":"Alagoinhas","0":"Alagoinhas","CountryCode":"BRA","1":"BRA","Population":"126820","2":"126820"},{"Name":"Itapecerica da Serra","0":"Itapecerica da Serra","CountryCode":"BRA","1":"BRA","Population":"126672","2":"126672"},{"Name":"Uruguaiana","0":"Uruguaiana","CountryCode":"BRA","1":"BRA","Population":"126305","2":"126305"},{"Name":"Paranagu\u00e1","0":"Paranagu\u00e1","CountryCode":"BRA","1":"BRA","Population":"126076","2":"126076"},{"Name":"Ibirit\u00e9","0":"Ibirit\u00e9","CountryCode":"BRA","1":"BRA","Population":"125982","2":"125982"},{"Name":"Timon","0":"Timon","CountryCode":"BRA","1":"BRA","Population":"125812","2":"125812"},{"Name":"Luzi\u00e2nia","0":"Luzi\u00e2nia","CountryCode":"BRA","1":"BRA","Population":"125597","2":"125597"},{"Name":"Maca\u00e9","0":"Maca\u00e9","CountryCode":"BRA","1":"BRA","Population":"125597","2":"125597"},{"Name":"Te\u00f3filo Otoni","0":"Te\u00f3filo Otoni","CountryCode":"BRA","1":"BRA","Population":"124489","2":"124489"},{"Name":"Moji-Gua\u00e7u","0":"Moji-Gua\u00e7u","CountryCode":"BRA","1":"BRA","Population":"123782","2":"123782"},{"Name":"Palmas","0":"Palmas","CountryCode":"BRA","1":"BRA","Population":"121919","2":"121919"},{"Name":"Pindamonhangaba","0":"Pindamonhangaba","CountryCode":"BRA","1":"BRA","Population":"121904","2":"121904"},{"Name":"Francisco Morato","0":"Francisco Morato","CountryCode":"BRA","1":"BRA","Population":"121197","2":"121197"},{"Name":"Bag\u00e9","0":"Bag\u00e9","CountryCode":"BRA","1":"BRA","Population":"120793","2":"120793"},{"Name":"Sapucaia do Sul","0":"Sapucaia do Sul","CountryCode":"BRA","1":"BRA","Population":"120217","2":"120217"},{"Name":"Cabo Frio","0":"Cabo Frio","CountryCode":"BRA","1":"BRA","Population":"119503","2":"119503"},{"Name":"Itapetininga","0":"Itapetininga","CountryCode":"BRA","1":"BRA","Population":"119391","2":"119391"},{"Name":"Patos de Minas","0":"Patos de Minas","CountryCode":"BRA","1":"BRA","Population":"119262","2":"119262"},{"Name":"Camaragibe","0":"Camaragibe","CountryCode":"BRA","1":"BRA","Population":"118968","2":"118968"},{"Name":"Bragan\u00e7a Paulista","0":"Bragan\u00e7a Paulista","CountryCode":"BRA","1":"BRA","Population":"116929","2":"116929"},{"Name":"Queimados","0":"Queimados","CountryCode":"BRA","1":"BRA","Population":"115020","2":"115020"},{"Name":"Aragua\u00edna","0":"Aragua\u00edna","CountryCode":"BRA","1":"BRA","Population":"114948","2":"114948"},{"Name":"Garanhuns","0":"Garanhuns","CountryCode":"BRA","1":"BRA","Population":"114603","2":"114603"},{"Name":"Vit\u00f3ria de Santo Ant\u00e3o","0":"Vit\u00f3ria de Santo Ant\u00e3o","CountryCode":"BRA","1":"BRA","Population":"113595","2":"113595"},{"Name":"Santa Rita","0":"Santa Rita","CountryCode":"BRA","1":"BRA","Population":"113135","2":"113135"},{"Name":"Barbacena","0":"Barbacena","CountryCode":"BRA","1":"BRA","Population":"113079","2":"113079"},{"Name":"Abaetetuba","0":"Abaetetuba","CountryCode":"BRA","1":"BRA","Population":"111258","2":"111258"},{"Name":"Ja\u00fa","0":"Ja\u00fa","CountryCode":"BRA","1":"BRA","Population":"109965","2":"109965"},{"Name":"Lauro de Freitas","0":"Lauro de Freitas","CountryCode":"BRA","1":"BRA","Population":"109236","2":"109236"},{"Name":"Franco da Rocha","0":"Franco da Rocha","CountryCode":"BRA","1":"BRA","Population":"108964","2":"108964"},{"Name":"Teixeira de Freitas","0":"Teixeira de Freitas","CountryCode":"BRA","1":"BRA","Population":"108441","2":"108441"},{"Name":"Varginha","0":"Varginha","CountryCode":"BRA","1":"BRA","Population":"108314","2":"108314"},{"Name":"Ribeir\u00e3o Pires","0":"Ribeir\u00e3o Pires","CountryCode":"BRA","1":"BRA","Population":"108121","2":"108121"},{"Name":"Sabar\u00e1","0":"Sabar\u00e1","CountryCode":"BRA","1":"BRA","Population":"107781","2":"107781"},{"Name":"Catanduva","0":"Catanduva","CountryCode":"BRA","1":"BRA","Population":"107761","2":"107761"},{"Name":"Rio Verde","0":"Rio Verde","CountryCode":"BRA","1":"BRA","Population":"107755","2":"107755"},{"Name":"Botucatu","0":"Botucatu","CountryCode":"BRA","1":"BRA","Population":"107663","2":"107663"},{"Name":"Colatina","0":"Colatina","CountryCode":"BRA","1":"BRA","Population":"107354","2":"107354"},{"Name":"Santa Cruz do Sul","0":"Santa Cruz do Sul","CountryCode":"BRA","1":"BRA","Population":"106734","2":"106734"},{"Name":"Linhares","0":"Linhares","CountryCode":"BRA","1":"BRA","Population":"106278","2":"106278"},{"Name":"Apucarana","0":"Apucarana","CountryCode":"BRA","1":"BRA","Population":"105114","2":"105114"},{"Name":"Barretos","0":"Barretos","CountryCode":"BRA","1":"BRA","Population":"104156","2":"104156"},{"Name":"Guaratinguet\u00e1","0":"Guaratinguet\u00e1","CountryCode":"BRA","1":"BRA","Population":"103433","2":"103433"},{"Name":"Cachoeirinha","0":"Cachoeirinha","CountryCode":"BRA","1":"BRA","Population":"103240","2":"103240"},{"Name":"Cod\u00f3","0":"Cod\u00f3","CountryCode":"BRA","1":"BRA","Population":"103153","2":"103153"},{"Name":"Jaragu\u00e1 do Sul","0":"Jaragu\u00e1 do Sul","CountryCode":"BRA","1":"BRA","Population":"102580","2":"102580"},{"Name":"Cubat\u00e3o","0":"Cubat\u00e3o","CountryCode":"BRA","1":"BRA","Population":"102372","2":"102372"},{"Name":"Itabira","0":"Itabira","CountryCode":"BRA","1":"BRA","Population":"102217","2":"102217"},{"Name":"Itaituba","0":"Itaituba","CountryCode":"BRA","1":"BRA","Population":"101320","2":"101320"},{"Name":"Araras","0":"Araras","CountryCode":"BRA","1":"BRA","Population":"101046","2":"101046"},{"Name":"Resende","0":"Resende","CountryCode":"BRA","1":"BRA","Population":"100627","2":"100627"},{"Name":"Atibaia","0":"Atibaia","CountryCode":"BRA","1":"BRA","Population":"100356","2":"100356"},{"Name":"Pouso Alegre","0":"Pouso Alegre","CountryCode":"BRA","1":"BRA","Population":"100028","2":"100028"},{"Name":"Toledo","0":"Toledo","CountryCode":"BRA","1":"BRA","Population":"99387","2":"99387"},{"Name":"Crato","0":"Crato","CountryCode":"BRA","1":"BRA","Population":"98965","2":"98965"},{"Name":"Passos","0":"Passos","CountryCode":"BRA","1":"BRA","Population":"98570","2":"98570"},{"Name":"Araguari","0":"Araguari","CountryCode":"BRA","1":"BRA","Population":"98399","2":"98399"},{"Name":"S\u00e3o Jos\u00e9 de Ribamar","0":"S\u00e3o Jos\u00e9 de Ribamar","CountryCode":"BRA","1":"BRA","Population":"98318","2":"98318"},{"Name":"Pinhais","0":"Pinhais","CountryCode":"BRA","1":"BRA","Population":"98198","2":"98198"},{"Name":"Sert\u00e3ozinho","0":"Sert\u00e3ozinho","CountryCode":"BRA","1":"BRA","Population":"98140","2":"98140"},{"Name":"Conselheiro Lafaiete","0":"Conselheiro Lafaiete","CountryCode":"BRA","1":"BRA","Population":"97507","2":"97507"},{"Name":"Paulo Afonso","0":"Paulo Afonso","CountryCode":"BRA","1":"BRA","Population":"97291","2":"97291"},{"Name":"Angra dos Reis","0":"Angra dos Reis","CountryCode":"BRA","1":"BRA","Population":"96864","2":"96864"},{"Name":"Eun\u00e1polis","0":"Eun\u00e1polis","CountryCode":"BRA","1":"BRA","Population":"96610","2":"96610"},{"Name":"Salto","0":"Salto","CountryCode":"BRA","1":"BRA","Population":"96348","2":"96348"},{"Name":"Ourinhos","0":"Ourinhos","CountryCode":"BRA","1":"BRA","Population":"96291","2":"96291"},{"Name":"Parnamirim","0":"Parnamirim","CountryCode":"BRA","1":"BRA","Population":"96210","2":"96210"},{"Name":"Jacobina","0":"Jacobina","CountryCode":"BRA","1":"BRA","Population":"96131","2":"96131"},{"Name":"Coronel Fabriciano","0":"Coronel Fabriciano","CountryCode":"BRA","1":"BRA","Population":"95933","2":"95933"},{"Name":"Birigui","0":"Birigui","CountryCode":"BRA","1":"BRA","Population":"94685","2":"94685"},{"Name":"Tatu\u00ed","0":"Tatu\u00ed","CountryCode":"BRA","1":"BRA","Population":"93897","2":"93897"},{"Name":"Ji-Paran\u00e1","0":"Ji-Paran\u00e1","CountryCode":"BRA","1":"BRA","Population":"93346","2":"93346"},{"Name":"Bacabal","0":"Bacabal","CountryCode":"BRA","1":"BRA","Population":"93121","2":"93121"},{"Name":"Camet\u00e1","0":"Camet\u00e1","CountryCode":"BRA","1":"BRA","Population":"92779","2":"92779"},{"Name":"Gua\u00edba","0":"Gua\u00edba","CountryCode":"BRA","1":"BRA","Population":"92224","2":"92224"},{"Name":"S\u00e3o Louren\u00e7o da Mata","0":"S\u00e3o Louren\u00e7o da Mata","CountryCode":"BRA","1":"BRA","Population":"91999","2":"91999"},{"Name":"Santana do Livramento","0":"Santana do Livramento","CountryCode":"BRA","1":"BRA","Population":"91779","2":"91779"},{"Name":"Votorantim","0":"Votorantim","CountryCode":"BRA","1":"BRA","Population":"91777","2":"91777"},{"Name":"Campo Largo","0":"Campo Largo","CountryCode":"BRA","1":"BRA","Population":"91203","2":"91203"},{"Name":"Patos","0":"Patos","CountryCode":"BRA","1":"BRA","Population":"90519","2":"90519"},{"Name":"Ituiutaba","0":"Ituiutaba","CountryCode":"BRA","1":"BRA","Population":"90507","2":"90507"},{"Name":"Corumb\u00e1","0":"Corumb\u00e1","CountryCode":"BRA","1":"BRA","Population":"90111","2":"90111"},{"Name":"Palho\u00e7a","0":"Palho\u00e7a","CountryCode":"BRA","1":"BRA","Population":"89465","2":"89465"},{"Name":"Barra do Pira\u00ed","0":"Barra do Pira\u00ed","CountryCode":"BRA","1":"BRA","Population":"89388","2":"89388"},{"Name":"Bento Gon\u00e7alves","0":"Bento Gon\u00e7alves","CountryCode":"BRA","1":"BRA","Population":"89254","2":"89254"},{"Name":"Po\u00e1","0":"Po\u00e1","CountryCode":"BRA","1":"BRA","Population":"89236","2":"89236"},{"Name":"\u00c1guas Lindas de Goi\u00e1s","0":"\u00c1guas Lindas de Goi\u00e1s","CountryCode":"BRA","1":"BRA","Population":"89200","2":"89200"},{"Name":"London","0":"London","CountryCode":"GBR","1":"GBR","Population":"7285000","2":"7285000"},{"Name":"Birmingham","0":"Birmingham","CountryCode":"GBR","1":"GBR","Population":"1013000","2":"1013000"},{"Name":"Glasgow","0":"Glasgow","CountryCode":"GBR","1":"GBR","Population":"619680","2":"619680"},{"Name":"Liverpool","0":"Liverpool","CountryCode":"GBR","1":"GBR","Population":"461000","2":"461000"},{"Name":"Edinburgh","0":"Edinburgh","CountryCode":"GBR","1":"GBR","Population":"450180","2":"450180"},{"Name":"Sheffield","0":"Sheffield","CountryCode":"GBR","1":"GBR","Population":"431607","2":"431607"},{"Name":"Manchester","0":"Manchester","CountryCode":"GBR","1":"GBR","Population":"430000","2":"430000"},{"Name":"Leeds","0":"Leeds","CountryCode":"GBR","1":"GBR","Population":"424194","2":"424194"},{"Name":"Bristol","0":"Bristol","CountryCode":"GBR","1":"GBR","Population":"402000","2":"402000"},{"Name":"Cardiff","0":"Cardiff","CountryCode":"GBR","1":"GBR","Population":"321000","2":"321000"},{"Name":"Coventry","0":"Coventry","CountryCode":"GBR","1":"GBR","Population":"304000","2":"304000"},{"Name":"Leicester","0":"Leicester","CountryCode":"GBR","1":"GBR","Population":"294000","2":"294000"},{"Name":"Bradford","0":"Bradford","CountryCode":"GBR","1":"GBR","Population":"289376","2":"289376"},{"Name":"Belfast","0":"Belfast","CountryCode":"GBR","1":"GBR","Population":"287500","2":"287500"},{"Name":"Nottingham","0":"Nottingham","CountryCode":"GBR","1":"GBR","Population":"287000","2":"287000"},{"Name":"Kingston upon Hull","0":"Kingston upon Hull","CountryCode":"GBR","1":"GBR","Population":"262000","2":"262000"},{"Name":"Plymouth","0":"Plymouth","CountryCode":"GBR","1":"GBR","Population":"253000","2":"253000"},{"Name":"Stoke-on-Trent","0":"Stoke-on-Trent","CountryCode":"GBR","1":"GBR","Population":"252000","2":"252000"},{"Name":"Wolverhampton","0":"Wolverhampton","CountryCode":"GBR","1":"GBR","Population":"242000","2":"242000"},{"Name":"Derby","0":"Derby","CountryCode":"GBR","1":"GBR","Population":"236000","2":"236000"},{"Name":"Swansea","0":"Swansea","CountryCode":"GBR","1":"GBR","Population":"230000","2":"230000"},{"Name":"Southampton","0":"Southampton","CountryCode":"GBR","1":"GBR","Population":"216000","2":"216000"},{"Name":"Aberdeen","0":"Aberdeen","CountryCode":"GBR","1":"GBR","Population":"213070","2":"213070"},{"Name":"Northampton","0":"Northampton","CountryCode":"GBR","1":"GBR","Population":"196000","2":"196000"},{"Name":"Dudley","0":"Dudley","CountryCode":"GBR","1":"GBR","Population":"192171","2":"192171"},{"Name":"Portsmouth","0":"Portsmouth","CountryCode":"GBR","1":"GBR","Population":"190000","2":"190000"},{"Name":"Newcastle upon Tyne","0":"Newcastle upon Tyne","CountryCode":"GBR","1":"GBR","Population":"189150","2":"189150"},{"Name":"Sunderland","0":"Sunderland","CountryCode":"GBR","1":"GBR","Population":"183310","2":"183310"},{"Name":"Luton","0":"Luton","CountryCode":"GBR","1":"GBR","Population":"183000","2":"183000"},{"Name":"Swindon","0":"Swindon","CountryCode":"GBR","1":"GBR","Population":"180000","2":"180000"},{"Name":"Southend-on-Sea","0":"Southend-on-Sea","CountryCode":"GBR","1":"GBR","Population":"176000","2":"176000"},{"Name":"Walsall","0":"Walsall","CountryCode":"GBR","1":"GBR","Population":"174739","2":"174739"},{"Name":"Bournemouth","0":"Bournemouth","CountryCode":"GBR","1":"GBR","Population":"162000","2":"162000"},{"Name":"Peterborough","0":"Peterborough","CountryCode":"GBR","1":"GBR","Population":"156000","2":"156000"},{"Name":"Brighton","0":"Brighton","CountryCode":"GBR","1":"GBR","Population":"156124","2":"156124"},{"Name":"Blackpool","0":"Blackpool","CountryCode":"GBR","1":"GBR","Population":"151000","2":"151000"},{"Name":"Dundee","0":"Dundee","CountryCode":"GBR","1":"GBR","Population":"146690","2":"146690"},{"Name":"West Bromwich","0":"West Bromwich","CountryCode":"GBR","1":"GBR","Population":"146386","2":"146386"},{"Name":"Reading","0":"Reading","CountryCode":"GBR","1":"GBR","Population":"148000","2":"148000"},{"Name":"Oldbury\/Smethwick (Warley)","0":"Oldbury\/Smethwick (Warley)","CountryCode":"GBR","1":"GBR","Population":"145542","2":"145542"},{"Name":"Middlesbrough","0":"Middlesbrough","CountryCode":"GBR","1":"GBR","Population":"145000","2":"145000"},{"Name":"Huddersfield","0":"Huddersfield","CountryCode":"GBR","1":"GBR","Population":"143726","2":"143726"},{"Name":"Oxford","0":"Oxford","CountryCode":"GBR","1":"GBR","Population":"144000","2":"144000"},{"Name":"Poole","0":"Poole","CountryCode":"GBR","1":"GBR","Population":"141000","2":"141000"},{"Name":"Bolton","0":"Bolton","CountryCode":"GBR","1":"GBR","Population":"139020","2":"139020"},{"Name":"Blackburn","0":"Blackburn","CountryCode":"GBR","1":"GBR","Population":"140000","2":"140000"},{"Name":"Newport","0":"Newport","CountryCode":"GBR","1":"GBR","Population":"139000","2":"139000"},{"Name":"Preston","0":"Preston","CountryCode":"GBR","1":"GBR","Population":"135000","2":"135000"},{"Name":"Stockport","0":"Stockport","CountryCode":"GBR","1":"GBR","Population":"132813","2":"132813"},{"Name":"Norwich","0":"Norwich","CountryCode":"GBR","1":"GBR","Population":"124000","2":"124000"},{"Name":"Rotherham","0":"Rotherham","CountryCode":"GBR","1":"GBR","Population":"121380","2":"121380"},{"Name":"Cambridge","0":"Cambridge","CountryCode":"GBR","1":"GBR","Population":"121000","2":"121000"},{"Name":"Watford","0":"Watford","CountryCode":"GBR","1":"GBR","Population":"113080","2":"113080"},{"Name":"Ipswich","0":"Ipswich","CountryCode":"GBR","1":"GBR","Population":"114000","2":"114000"},{"Name":"Slough","0":"Slough","CountryCode":"GBR","1":"GBR","Population":"112000","2":"112000"},{"Name":"Exeter","0":"Exeter","CountryCode":"GBR","1":"GBR","Population":"111000","2":"111000"},{"Name":"Cheltenham","0":"Cheltenham","CountryCode":"GBR","1":"GBR","Population":"106000","2":"106000"},{"Name":"Gloucester","0":"Gloucester","CountryCode":"GBR","1":"GBR","Population":"107000","2":"107000"},{"Name":"Saint Helens","0":"Saint Helens","CountryCode":"GBR","1":"GBR","Population":"106293","2":"106293"},{"Name":"Sutton Coldfield","0":"Sutton Coldfield","CountryCode":"GBR","1":"GBR","Population":"106001","2":"106001"},{"Name":"York","0":"York","CountryCode":"GBR","1":"GBR","Population":"104425","2":"104425"},{"Name":"Oldham","0":"Oldham","CountryCode":"GBR","1":"GBR","Population":"103931","2":"103931"},{"Name":"Basildon","0":"Basildon","CountryCode":"GBR","1":"GBR","Population":"100924","2":"100924"},{"Name":"Worthing","0":"Worthing","CountryCode":"GBR","1":"GBR","Population":"100000","2":"100000"},{"Name":"Chelmsford","0":"Chelmsford","CountryCode":"GBR","1":"GBR","Population":"97451","2":"97451"},{"Name":"Colchester","0":"Colchester","CountryCode":"GBR","1":"GBR","Population":"96063","2":"96063"},{"Name":"Crawley","0":"Crawley","CountryCode":"GBR","1":"GBR","Population":"97000","2":"97000"},{"Name":"Gillingham","0":"Gillingham","CountryCode":"GBR","1":"GBR","Population":"92000","2":"92000"},{"Name":"Solihull","0":"Solihull","CountryCode":"GBR","1":"GBR","Population":"94531","2":"94531"},{"Name":"Rochdale","0":"Rochdale","CountryCode":"GBR","1":"GBR","Population":"94313","2":"94313"},{"Name":"Birkenhead","0":"Birkenhead","CountryCode":"GBR","1":"GBR","Population":"93087","2":"93087"},{"Name":"Worcester","0":"Worcester","CountryCode":"GBR","1":"GBR","Population":"95000","2":"95000"},{"Name":"Hartlepool","0":"Hartlepool","CountryCode":"GBR","1":"GBR","Population":"92000","2":"92000"},{"Name":"Halifax","0":"Halifax","CountryCode":"GBR","1":"GBR","Population":"91069","2":"91069"},{"Name":"Woking\/Byfleet","0":"Woking\/Byfleet","CountryCode":"GBR","1":"GBR","Population":"92000","2":"92000"},{"Name":"Southport","0":"Southport","CountryCode":"GBR","1":"GBR","Population":"90959","2":"90959"},{"Name":"Maidstone","0":"Maidstone","CountryCode":"GBR","1":"GBR","Population":"90878","2":"90878"},{"Name":"Eastbourne","0":"Eastbourne","CountryCode":"GBR","1":"GBR","Population":"90000","2":"90000"},{"Name":"Grimsby","0":"Grimsby","CountryCode":"GBR","1":"GBR","Population":"89000","2":"89000"},{"Name":"Saint Helier","0":"Saint Helier","CountryCode":"GBR","1":"GBR","Population":"27523","2":"27523"},{"Name":"Douglas","0":"Douglas","CountryCode":"GBR","1":"GBR","Population":"23487","2":"23487"},{"Name":"Road Town","0":"Road Town","CountryCode":"VGB","1":"VGB","Population":"8000","2":"8000"},{"Name":"Bandar Seri Begawan","0":"Bandar Seri Begawan","CountryCode":"BRN","1":"BRN","Population":"21484","2":"21484"},{"Name":"Sofija","0":"Sofija","CountryCode":"BGR","1":"BGR","Population":"1122302","2":"1122302"},{"Name":"Plovdiv","0":"Plovdiv","CountryCode":"BGR","1":"BGR","Population":"342584","2":"342584"},{"Name":"Varna","0":"Varna","CountryCode":"BGR","1":"BGR","Population":"299801","2":"299801"},{"Name":"Burgas","0":"Burgas","CountryCode":"BGR","1":"BGR","Population":"195255","2":"195255"},{"Name":"Ruse","0":"Ruse","CountryCode":"BGR","1":"BGR","Population":"166467","2":"166467"},{"Name":"Stara Zagora","0":"Stara Zagora","CountryCode":"BGR","1":"BGR","Population":"147939","2":"147939"},{"Name":"Pleven","0":"Pleven","CountryCode":"BGR","1":"BGR","Population":"121952","2":"121952"},{"Name":"Sliven","0":"Sliven","CountryCode":"BGR","1":"BGR","Population":"105530","2":"105530"},{"Name":"Dobric","0":"Dobric","CountryCode":"BGR","1":"BGR","Population":"100399","2":"100399"},{"Name":"\u0160umen","0":"\u0160umen","CountryCode":"BGR","1":"BGR","Population":"94686","2":"94686"},{"Name":"Ouagadougou","0":"Ouagadougou","CountryCode":"BFA","1":"BFA","Population":"824000","2":"824000"},{"Name":"Bobo-Dioulasso","0":"Bobo-Dioulasso","CountryCode":"BFA","1":"BFA","Population":"300000","2":"300000"},{"Name":"Koudougou","0":"Koudougou","CountryCode":"BFA","1":"BFA","Population":"105000","2":"105000"},{"Name":"Bujumbura","0":"Bujumbura","CountryCode":"BDI","1":"BDI","Population":"300000","2":"300000"},{"Name":"George Town","0":"George Town","CountryCode":"CYM","1":"CYM","Population":"19600","2":"19600"},{"Name":"Santiago de Chile","0":"Santiago de Chile","CountryCode":"CHL","1":"CHL","Population":"4703954","2":"4703954"},{"Name":"Puente Alto","0":"Puente Alto","CountryCode":"CHL","1":"CHL","Population":"386236","2":"386236"},{"Name":"Vi\u00f1a del Mar","0":"Vi\u00f1a del Mar","CountryCode":"CHL","1":"CHL","Population":"312493","2":"312493"},{"Name":"Valpara\u00edso","0":"Valpara\u00edso","CountryCode":"CHL","1":"CHL","Population":"293800","2":"293800"},{"Name":"Talcahuano","0":"Talcahuano","CountryCode":"CHL","1":"CHL","Population":"277752","2":"277752"},{"Name":"Antofagasta","0":"Antofagasta","CountryCode":"CHL","1":"CHL","Population":"251429","2":"251429"},{"Name":"San Bernardo","0":"San Bernardo","CountryCode":"CHL","1":"CHL","Population":"241910","2":"241910"},{"Name":"Temuco","0":"Temuco","CountryCode":"CHL","1":"CHL","Population":"233041","2":"233041"},{"Name":"Concepci\u00f3n","0":"Concepci\u00f3n","CountryCode":"CHL","1":"CHL","Population":"217664","2":"217664"},{"Name":"Rancagua","0":"Rancagua","CountryCode":"CHL","1":"CHL","Population":"212977","2":"212977"},{"Name":"Arica","0":"Arica","CountryCode":"CHL","1":"CHL","Population":"189036","2":"189036"},{"Name":"Talca","0":"Talca","CountryCode":"CHL","1":"CHL","Population":"187557","2":"187557"},{"Name":"Chill\u00e1n","0":"Chill\u00e1n","CountryCode":"CHL","1":"CHL","Population":"178182","2":"178182"},{"Name":"Iquique","0":"Iquique","CountryCode":"CHL","1":"CHL","Population":"177892","2":"177892"},{"Name":"Los Angeles","0":"Los Angeles","CountryCode":"CHL","1":"CHL","Population":"158215","2":"158215"},{"Name":"Puerto Montt","0":"Puerto Montt","CountryCode":"CHL","1":"CHL","Population":"152194","2":"152194"},{"Name":"Coquimbo","0":"Coquimbo","CountryCode":"CHL","1":"CHL","Population":"143353","2":"143353"},{"Name":"Osorno","0":"Osorno","CountryCode":"CHL","1":"CHL","Population":"141468","2":"141468"},{"Name":"La Serena","0":"La Serena","CountryCode":"CHL","1":"CHL","Population":"137409","2":"137409"},{"Name":"Calama","0":"Calama","CountryCode":"CHL","1":"CHL","Population":"137265","2":"137265"},{"Name":"Valdivia","0":"Valdivia","CountryCode":"CHL","1":"CHL","Population":"133106","2":"133106"},{"Name":"Punta Arenas","0":"Punta Arenas","CountryCode":"CHL","1":"CHL","Population":"125631","2":"125631"},{"Name":"Copiap\u00f3","0":"Copiap\u00f3","CountryCode":"CHL","1":"CHL","Population":"120128","2":"120128"},{"Name":"Quilpu\u00e9","0":"Quilpu\u00e9","CountryCode":"CHL","1":"CHL","Population":"118857","2":"118857"},{"Name":"Curic\u00f3","0":"Curic\u00f3","CountryCode":"CHL","1":"CHL","Population":"115766","2":"115766"},{"Name":"Ovalle","0":"Ovalle","CountryCode":"CHL","1":"CHL","Population":"94854","2":"94854"},{"Name":"Coronel","0":"Coronel","CountryCode":"CHL","1":"CHL","Population":"93061","2":"93061"},{"Name":"San Pedro de la Paz","0":"San Pedro de la Paz","CountryCode":"CHL","1":"CHL","Population":"91684","2":"91684"},{"Name":"Melipilla","0":"Melipilla","CountryCode":"CHL","1":"CHL","Population":"91056","2":"91056"},{"Name":"Avarua","0":"Avarua","CountryCode":"COK","1":"COK","Population":"11900","2":"11900"},{"Name":"San Jos\u00e9","0":"San Jos\u00e9","CountryCode":"CRI","1":"CRI","Population":"339131","2":"339131"},{"Name":"Djibouti","0":"Djibouti","CountryCode":"DJI","1":"DJI","Population":"383000","2":"383000"},{"Name":"Roseau","0":"Roseau","CountryCode":"DMA","1":"DMA","Population":"16243","2":"16243"},{"Name":"Santo Domingo de Guzm\u00e1n","0":"Santo Domingo de Guzm\u00e1n","CountryCode":"DOM","1":"DOM","Population":"1609966","2":"1609966"},{"Name":"Santiago de los Caballeros","0":"Santiago de los Caballeros","CountryCode":"DOM","1":"DOM","Population":"365463","2":"365463"},{"Name":"La Romana","0":"La Romana","CountryCode":"DOM","1":"DOM","Population":"140204","2":"140204"},{"Name":"San Pedro de Macor\u00eds","0":"San Pedro de Macor\u00eds","CountryCode":"DOM","1":"DOM","Population":"124735","2":"124735"},{"Name":"San Francisco de Macor\u00eds","0":"San Francisco de Macor\u00eds","CountryCode":"DOM","1":"DOM","Population":"108485","2":"108485"},{"Name":"San Felipe de Puerto Plata","0":"San Felipe de Puerto Plata","CountryCode":"DOM","1":"DOM","Population":"89423","2":"89423"},{"Name":"Guayaquil","0":"Guayaquil","CountryCode":"ECU","1":"ECU","Population":"2070040","2":"2070040"},{"Name":"Quito","0":"Quito","CountryCode":"ECU","1":"ECU","Population":"1573458","2":"1573458"},{"Name":"Cuenca","0":"Cuenca","CountryCode":"ECU","1":"ECU","Population":"270353","2":"270353"},{"Name":"Machala","0":"Machala","CountryCode":"ECU","1":"ECU","Population":"210368","2":"210368"},{"Name":"Santo Domingo de los Colorados","0":"Santo Domingo de los Colorados","CountryCode":"ECU","1":"ECU","Population":"202111","2":"202111"},{"Name":"Portoviejo","0":"Portoviejo","CountryCode":"ECU","1":"ECU","Population":"176413","2":"176413"},{"Name":"Ambato","0":"Ambato","CountryCode":"ECU","1":"ECU","Population":"169612","2":"169612"},{"Name":"Manta","0":"Manta","CountryCode":"ECU","1":"ECU","Population":"164739","2":"164739"},{"Name":"Duran [Eloy Alfaro]","0":"Duran [Eloy Alfaro]","CountryCode":"ECU","1":"ECU","Population":"152514","2":"152514"},{"Name":"Ibarra","0":"Ibarra","CountryCode":"ECU","1":"ECU","Population":"130643","2":"130643"},{"Name":"Quevedo","0":"Quevedo","CountryCode":"ECU","1":"ECU","Population":"129631","2":"129631"},{"Name":"Milagro","0":"Milagro","CountryCode":"ECU","1":"ECU","Population":"124177","2":"124177"},{"Name":"Loja","0":"Loja","CountryCode":"ECU","1":"ECU","Population":"123875","2":"123875"},{"Name":"R\u00edobamba","0":"R\u00edobamba","CountryCode":"ECU","1":"ECU","Population":"123163","2":"123163"},{"Name":"Esmeraldas","0":"Esmeraldas","CountryCode":"ECU","1":"ECU","Population":"123045","2":"123045"},{"Name":"Cairo","0":"Cairo","CountryCode":"EGY","1":"EGY","Population":"6789479","2":"6789479"},{"Name":"Alexandria","0":"Alexandria","CountryCode":"EGY","1":"EGY","Population":"3328196","2":"3328196"},{"Name":"Giza","0":"Giza","CountryCode":"EGY","1":"EGY","Population":"2221868","2":"2221868"},{"Name":"Shubra al-Khayma","0":"Shubra al-Khayma","CountryCode":"EGY","1":"EGY","Population":"870716","2":"870716"},{"Name":"Port Said","0":"Port Said","CountryCode":"EGY","1":"EGY","Population":"469533","2":"469533"},{"Name":"Suez","0":"Suez","CountryCode":"EGY","1":"EGY","Population":"417610","2":"417610"},{"Name":"al-Mahallat al-Kubra","0":"al-Mahallat al-Kubra","CountryCode":"EGY","1":"EGY","Population":"395402","2":"395402"},{"Name":"Tanta","0":"Tanta","CountryCode":"EGY","1":"EGY","Population":"371010","2":"371010"},{"Name":"al-Mansura","0":"al-Mansura","CountryCode":"EGY","1":"EGY","Population":"369621","2":"369621"},{"Name":"Luxor","0":"Luxor","CountryCode":"EGY","1":"EGY","Population":"360503","2":"360503"},{"Name":"Asyut","0":"Asyut","CountryCode":"EGY","1":"EGY","Population":"343498","2":"343498"},{"Name":"Bahtim","0":"Bahtim","CountryCode":"EGY","1":"EGY","Population":"275807","2":"275807"},{"Name":"Zagazig","0":"Zagazig","CountryCode":"EGY","1":"EGY","Population":"267351","2":"267351"},{"Name":"al-Faiyum","0":"al-Faiyum","CountryCode":"EGY","1":"EGY","Population":"260964","2":"260964"},{"Name":"Ismailia","0":"Ismailia","CountryCode":"EGY","1":"EGY","Population":"254477","2":"254477"},{"Name":"Kafr al-Dawwar","0":"Kafr al-Dawwar","CountryCode":"EGY","1":"EGY","Population":"231978","2":"231978"},{"Name":"Assuan","0":"Assuan","CountryCode":"EGY","1":"EGY","Population":"219017","2":"219017"},{"Name":"Damanhur","0":"Damanhur","CountryCode":"EGY","1":"EGY","Population":"212203","2":"212203"},{"Name":"al-Minya","0":"al-Minya","CountryCode":"EGY","1":"EGY","Population":"201360","2":"201360"},{"Name":"Bani Suwayf","0":"Bani Suwayf","CountryCode":"EGY","1":"EGY","Population":"172032","2":"172032"},{"Name":"Qina","0":"Qina","CountryCode":"EGY","1":"EGY","Population":"171275","2":"171275"},{"Name":"Sawhaj","0":"Sawhaj","CountryCode":"EGY","1":"EGY","Population":"170125","2":"170125"},{"Name":"Shibin al-Kawm","0":"Shibin al-Kawm","CountryCode":"EGY","1":"EGY","Population":"159909","2":"159909"},{"Name":"Bulaq al-Dakrur","0":"Bulaq al-Dakrur","CountryCode":"EGY","1":"EGY","Population":"148787","2":"148787"},{"Name":"Banha","0":"Banha","CountryCode":"EGY","1":"EGY","Population":"145792","2":"145792"},{"Name":"Warraq al-Arab","0":"Warraq al-Arab","CountryCode":"EGY","1":"EGY","Population":"127108","2":"127108"},{"Name":"Kafr al-Shaykh","0":"Kafr al-Shaykh","CountryCode":"EGY","1":"EGY","Population":"124819","2":"124819"},{"Name":"Mallawi","0":"Mallawi","CountryCode":"EGY","1":"EGY","Population":"119283","2":"119283"},{"Name":"Bilbays","0":"Bilbays","CountryCode":"EGY","1":"EGY","Population":"113608","2":"113608"},{"Name":"Mit Ghamr","0":"Mit Ghamr","CountryCode":"EGY","1":"EGY","Population":"101801","2":"101801"},{"Name":"al-Arish","0":"al-Arish","CountryCode":"EGY","1":"EGY","Population":"100447","2":"100447"},{"Name":"Talkha","0":"Talkha","CountryCode":"EGY","1":"EGY","Population":"97700","2":"97700"},{"Name":"Qalyub","0":"Qalyub","CountryCode":"EGY","1":"EGY","Population":"97200","2":"97200"},{"Name":"Jirja","0":"Jirja","CountryCode":"EGY","1":"EGY","Population":"95400","2":"95400"},{"Name":"Idfu","0":"Idfu","CountryCode":"EGY","1":"EGY","Population":"94200","2":"94200"},{"Name":"al-Hawamidiya","0":"al-Hawamidiya","CountryCode":"EGY","1":"EGY","Population":"91700","2":"91700"},{"Name":"Disuq","0":"Disuq","CountryCode":"EGY","1":"EGY","Population":"91300","2":"91300"},{"Name":"San Salvador","0":"San Salvador","CountryCode":"SLV","1":"SLV","Population":"415346","2":"415346"},{"Name":"Santa Ana","0":"Santa Ana","CountryCode":"SLV","1":"SLV","Population":"139389","2":"139389"},{"Name":"Mejicanos","0":"Mejicanos","CountryCode":"SLV","1":"SLV","Population":"138800","2":"138800"},{"Name":"Soyapango","0":"Soyapango","CountryCode":"SLV","1":"SLV","Population":"129800","2":"129800"},{"Name":"San Miguel","0":"San Miguel","CountryCode":"SLV","1":"SLV","Population":"127696","2":"127696"},{"Name":"Nueva San Salvador","0":"Nueva San Salvador","CountryCode":"SLV","1":"SLV","Population":"98400","2":"98400"},{"Name":"Apopa","0":"Apopa","CountryCode":"SLV","1":"SLV","Population":"88800","2":"88800"},{"Name":"Asmara","0":"Asmara","CountryCode":"ERI","1":"ERI","Population":"431000","2":"431000"},{"Name":"Madrid","0":"Madrid","CountryCode":"ESP","1":"ESP","Population":"2879052","2":"2879052"},{"Name":"Barcelona","0":"Barcelona","CountryCode":"ESP","1":"ESP","Population":"1503451","2":"1503451"},{"Name":"Valencia","0":"Valencia","CountryCode":"ESP","1":"ESP","Population":"739412","2":"739412"},{"Name":"Sevilla","0":"Sevilla","CountryCode":"ESP","1":"ESP","Population":"701927","2":"701927"},{"Name":"Zaragoza","0":"Zaragoza","CountryCode":"ESP","1":"ESP","Population":"603367","2":"603367"},{"Name":"M\u00e1laga","0":"M\u00e1laga","CountryCode":"ESP","1":"ESP","Population":"530553","2":"530553"},{"Name":"Bilbao","0":"Bilbao","CountryCode":"ESP","1":"ESP","Population":"357589","2":"357589"},{"Name":"Las Palmas de Gran Canaria","0":"Las Palmas de Gran Canaria","CountryCode":"ESP","1":"ESP","Population":"354757","2":"354757"},{"Name":"Murcia","0":"Murcia","CountryCode":"ESP","1":"ESP","Population":"353504","2":"353504"},{"Name":"Palma de Mallorca","0":"Palma de Mallorca","CountryCode":"ESP","1":"ESP","Population":"326993","2":"326993"},{"Name":"Valladolid","0":"Valladolid","CountryCode":"ESP","1":"ESP","Population":"319998","2":"319998"},{"Name":"C\u00f3rdoba","0":"C\u00f3rdoba","CountryCode":"ESP","1":"ESP","Population":"311708","2":"311708"},{"Name":"Vigo","0":"Vigo","CountryCode":"ESP","1":"ESP","Population":"283670","2":"283670"},{"Name":"Alicante [Alacant]","0":"Alicante [Alacant]","CountryCode":"ESP","1":"ESP","Population":"272432","2":"272432"},{"Name":"Gij\u00f3n","0":"Gij\u00f3n","CountryCode":"ESP","1":"ESP","Population":"267980","2":"267980"},{"Name":"L\u00b4Hospitalet de Llobregat","0":"L\u00b4Hospitalet de Llobregat","CountryCode":"ESP","1":"ESP","Population":"247986","2":"247986"},{"Name":"Granada","0":"Granada","CountryCode":"ESP","1":"ESP","Population":"244767","2":"244767"},{"Name":"A Coru\u00f1a (La Coru\u00f1a)","0":"A Coru\u00f1a (La Coru\u00f1a)","CountryCode":"ESP","1":"ESP","Population":"243402","2":"243402"},{"Name":"Vitoria-Gasteiz","0":"Vitoria-Gasteiz","CountryCode":"ESP","1":"ESP","Population":"217154","2":"217154"},{"Name":"Santa Cruz de Tenerife","0":"Santa Cruz de Tenerife","CountryCode":"ESP","1":"ESP","Population":"213050","2":"213050"},{"Name":"Badalona","0":"Badalona","CountryCode":"ESP","1":"ESP","Population":"209635","2":"209635"},{"Name":"Oviedo","0":"Oviedo","CountryCode":"ESP","1":"ESP","Population":"200453","2":"200453"},{"Name":"M\u00f3stoles","0":"M\u00f3stoles","CountryCode":"ESP","1":"ESP","Population":"195351","2":"195351"},{"Name":"Elche [Elx]","0":"Elche [Elx]","CountryCode":"ESP","1":"ESP","Population":"193174","2":"193174"},{"Name":"Sabadell","0":"Sabadell","CountryCode":"ESP","1":"ESP","Population":"184859","2":"184859"},{"Name":"Santander","0":"Santander","CountryCode":"ESP","1":"ESP","Population":"184165","2":"184165"},{"Name":"Jerez de la Frontera","0":"Jerez de la Frontera","CountryCode":"ESP","1":"ESP","Population":"182660","2":"182660"},{"Name":"Pamplona [Iru\u00f1a]","0":"Pamplona [Iru\u00f1a]","CountryCode":"ESP","1":"ESP","Population":"180483","2":"180483"},{"Name":"Donostia-San Sebasti\u00e1n","0":"Donostia-San Sebasti\u00e1n","CountryCode":"ESP","1":"ESP","Population":"179208","2":"179208"},{"Name":"Cartagena","0":"Cartagena","CountryCode":"ESP","1":"ESP","Population":"177709","2":"177709"},{"Name":"Legan\u00e9s","0":"Legan\u00e9s","CountryCode":"ESP","1":"ESP","Population":"173163","2":"173163"},{"Name":"Fuenlabrada","0":"Fuenlabrada","CountryCode":"ESP","1":"ESP","Population":"171173","2":"171173"},{"Name":"Almer\u00eda","0":"Almer\u00eda","CountryCode":"ESP","1":"ESP","Population":"169027","2":"169027"},{"Name":"Terrassa","0":"Terrassa","CountryCode":"ESP","1":"ESP","Population":"168695","2":"168695"},{"Name":"Alcal\u00e1 de Henares","0":"Alcal\u00e1 de Henares","CountryCode":"ESP","1":"ESP","Population":"164463","2":"164463"},{"Name":"Burgos","0":"Burgos","CountryCode":"ESP","1":"ESP","Population":"162802","2":"162802"},{"Name":"Salamanca","0":"Salamanca","CountryCode":"ESP","1":"ESP","Population":"158720","2":"158720"},{"Name":"Albacete","0":"Albacete","CountryCode":"ESP","1":"ESP","Population":"147527","2":"147527"},{"Name":"Getafe","0":"Getafe","CountryCode":"ESP","1":"ESP","Population":"145371","2":"145371"},{"Name":"C\u00e1diz","0":"C\u00e1diz","CountryCode":"ESP","1":"ESP","Population":"142449","2":"142449"},{"Name":"Alcorc\u00f3n","0":"Alcorc\u00f3n","CountryCode":"ESP","1":"ESP","Population":"142048","2":"142048"},{"Name":"Huelva","0":"Huelva","CountryCode":"ESP","1":"ESP","Population":"140583","2":"140583"},{"Name":"Le\u00f3n","0":"Le\u00f3n","CountryCode":"ESP","1":"ESP","Population":"139809","2":"139809"},{"Name":"Castell\u00f3n de la Plana [Castell","0":"Castell\u00f3n de la Plana [Castell","CountryCode":"ESP","1":"ESP","Population":"139712","2":"139712"},{"Name":"Badajoz","0":"Badajoz","CountryCode":"ESP","1":"ESP","Population":"136613","2":"136613"},{"Name":"[San Crist\u00f3bal de] la Laguna","0":"[San Crist\u00f3bal de] la Laguna","CountryCode":"ESP","1":"ESP","Population":"127945","2":"127945"},{"Name":"Logro\u00f1o","0":"Logro\u00f1o","CountryCode":"ESP","1":"ESP","Population":"127093","2":"127093"},{"Name":"Santa Coloma de Gramenet","0":"Santa Coloma de Gramenet","CountryCode":"ESP","1":"ESP","Population":"120802","2":"120802"},{"Name":"Tarragona","0":"Tarragona","CountryCode":"ESP","1":"ESP","Population":"113016","2":"113016"},{"Name":"Lleida (L\u00e9rida)","0":"Lleida (L\u00e9rida)","CountryCode":"ESP","1":"ESP","Population":"112207","2":"112207"},{"Name":"Ja\u00e9n","0":"Ja\u00e9n","CountryCode":"ESP","1":"ESP","Population":"109247","2":"109247"},{"Name":"Ourense (Orense)","0":"Ourense (Orense)","CountryCode":"ESP","1":"ESP","Population":"109120","2":"109120"},{"Name":"Matar\u00f3","0":"Matar\u00f3","CountryCode":"ESP","1":"ESP","Population":"104095","2":"104095"},{"Name":"Algeciras","0":"Algeciras","CountryCode":"ESP","1":"ESP","Population":"103106","2":"103106"},{"Name":"Marbella","0":"Marbella","CountryCode":"ESP","1":"ESP","Population":"101144","2":"101144"},{"Name":"Barakaldo","0":"Barakaldo","CountryCode":"ESP","1":"ESP","Population":"98212","2":"98212"},{"Name":"Dos Hermanas","0":"Dos Hermanas","CountryCode":"ESP","1":"ESP","Population":"94591","2":"94591"},{"Name":"Santiago de Compostela","0":"Santiago de Compostela","CountryCode":"ESP","1":"ESP","Population":"93745","2":"93745"},{"Name":"Torrej\u00f3n de Ardoz","0":"Torrej\u00f3n de Ardoz","CountryCode":"ESP","1":"ESP","Population":"92262","2":"92262"},{"Name":"Cape Town","0":"Cape Town","CountryCode":"ZAF","1":"ZAF","Population":"2352121","2":"2352121"},{"Name":"Soweto","0":"Soweto","CountryCode":"ZAF","1":"ZAF","Population":"904165","2":"904165"},{"Name":"Johannesburg","0":"Johannesburg","CountryCode":"ZAF","1":"ZAF","Population":"756653","2":"756653"},{"Name":"Port Elizabeth","0":"Port Elizabeth","CountryCode":"ZAF","1":"ZAF","Population":"752319","2":"752319"},{"Name":"Pretoria","0":"Pretoria","CountryCode":"ZAF","1":"ZAF","Population":"658630","2":"658630"},{"Name":"Inanda","0":"Inanda","CountryCode":"ZAF","1":"ZAF","Population":"634065","2":"634065"},{"Name":"Durban","0":"Durban","CountryCode":"ZAF","1":"ZAF","Population":"566120","2":"566120"},{"Name":"Vanderbijlpark","0":"Vanderbijlpark","CountryCode":"ZAF","1":"ZAF","Population":"468931","2":"468931"},{"Name":"Kempton Park","0":"Kempton Park","CountryCode":"ZAF","1":"ZAF","Population":"442633","2":"442633"},{"Name":"Alberton","0":"Alberton","CountryCode":"ZAF","1":"ZAF","Population":"410102","2":"410102"},{"Name":"Pinetown","0":"Pinetown","CountryCode":"ZAF","1":"ZAF","Population":"378810","2":"378810"},{"Name":"Pietermaritzburg","0":"Pietermaritzburg","CountryCode":"ZAF","1":"ZAF","Population":"370190","2":"370190"},{"Name":"Benoni","0":"Benoni","CountryCode":"ZAF","1":"ZAF","Population":"365467","2":"365467"},{"Name":"Randburg","0":"Randburg","CountryCode":"ZAF","1":"ZAF","Population":"341288","2":"341288"},{"Name":"Umlazi","0":"Umlazi","CountryCode":"ZAF","1":"ZAF","Population":"339233","2":"339233"},{"Name":"Bloemfontein","0":"Bloemfontein","CountryCode":"ZAF","1":"ZAF","Population":"334341","2":"334341"},{"Name":"Vereeniging","0":"Vereeniging","CountryCode":"ZAF","1":"ZAF","Population":"328535","2":"328535"},{"Name":"Wonderboom","0":"Wonderboom","CountryCode":"ZAF","1":"ZAF","Population":"283289","2":"283289"},{"Name":"Roodepoort","0":"Roodepoort","CountryCode":"ZAF","1":"ZAF","Population":"279340","2":"279340"},{"Name":"Boksburg","0":"Boksburg","CountryCode":"ZAF","1":"ZAF","Population":"262648","2":"262648"},{"Name":"Klerksdorp","0":"Klerksdorp","CountryCode":"ZAF","1":"ZAF","Population":"261911","2":"261911"},{"Name":"Soshanguve","0":"Soshanguve","CountryCode":"ZAF","1":"ZAF","Population":"242727","2":"242727"},{"Name":"Newcastle","0":"Newcastle","CountryCode":"ZAF","1":"ZAF","Population":"222993","2":"222993"},{"Name":"East London","0":"East London","CountryCode":"ZAF","1":"ZAF","Population":"221047","2":"221047"},{"Name":"Welkom","0":"Welkom","CountryCode":"ZAF","1":"ZAF","Population":"203296","2":"203296"},{"Name":"Kimberley","0":"Kimberley","CountryCode":"ZAF","1":"ZAF","Population":"197254","2":"197254"},{"Name":"Uitenhage","0":"Uitenhage","CountryCode":"ZAF","1":"ZAF","Population":"192120","2":"192120"},{"Name":"Chatsworth","0":"Chatsworth","CountryCode":"ZAF","1":"ZAF","Population":"189885","2":"189885"},{"Name":"Mdantsane","0":"Mdantsane","CountryCode":"ZAF","1":"ZAF","Population":"182639","2":"182639"},{"Name":"Krugersdorp","0":"Krugersdorp","CountryCode":"ZAF","1":"ZAF","Population":"181503","2":"181503"},{"Name":"Botshabelo","0":"Botshabelo","CountryCode":"ZAF","1":"ZAF","Population":"177971","2":"177971"},{"Name":"Brakpan","0":"Brakpan","CountryCode":"ZAF","1":"ZAF","Population":"171363","2":"171363"},{"Name":"Witbank","0":"Witbank","CountryCode":"ZAF","1":"ZAF","Population":"167183","2":"167183"},{"Name":"Oberholzer","0":"Oberholzer","CountryCode":"ZAF","1":"ZAF","Population":"164367","2":"164367"},{"Name":"Germiston","0":"Germiston","CountryCode":"ZAF","1":"ZAF","Population":"164252","2":"164252"},{"Name":"Springs","0":"Springs","CountryCode":"ZAF","1":"ZAF","Population":"162072","2":"162072"},{"Name":"Westonaria","0":"Westonaria","CountryCode":"ZAF","1":"ZAF","Population":"159632","2":"159632"},{"Name":"Randfontein","0":"Randfontein","CountryCode":"ZAF","1":"ZAF","Population":"120838","2":"120838"},{"Name":"Paarl","0":"Paarl","CountryCode":"ZAF","1":"ZAF","Population":"105768","2":"105768"},{"Name":"Potchefstroom","0":"Potchefstroom","CountryCode":"ZAF","1":"ZAF","Population":"101817","2":"101817"},{"Name":"Rustenburg","0":"Rustenburg","CountryCode":"ZAF","1":"ZAF","Population":"97008","2":"97008"},{"Name":"Nigel","0":"Nigel","CountryCode":"ZAF","1":"ZAF","Population":"96734","2":"96734"},{"Name":"George","0":"George","CountryCode":"ZAF","1":"ZAF","Population":"93818","2":"93818"},{"Name":"Ladysmith","0":"Ladysmith","CountryCode":"ZAF","1":"ZAF","Population":"89292","2":"89292"},{"Name":"Addis Abeba","0":"Addis Abeba","CountryCode":"ETH","1":"ETH","Population":"2495000","2":"2495000"},{"Name":"Dire Dawa","0":"Dire Dawa","CountryCode":"ETH","1":"ETH","Population":"164851","2":"164851"},{"Name":"Nazret","0":"Nazret","CountryCode":"ETH","1":"ETH","Population":"127842","2":"127842"},{"Name":"Gonder","0":"Gonder","CountryCode":"ETH","1":"ETH","Population":"112249","2":"112249"},{"Name":"Dese","0":"Dese","CountryCode":"ETH","1":"ETH","Population":"97314","2":"97314"},{"Name":"Mekele","0":"Mekele","CountryCode":"ETH","1":"ETH","Population":"96938","2":"96938"},{"Name":"Bahir Dar","0":"Bahir Dar","CountryCode":"ETH","1":"ETH","Population":"96140","2":"96140"},{"Name":"Stanley","0":"Stanley","CountryCode":"FLK","1":"FLK","Population":"1636","2":"1636"},{"Name":"Suva","0":"Suva","CountryCode":"FJI","1":"FJI","Population":"77366","2":"77366"},{"Name":"Quezon","0":"Quezon","CountryCode":"PHL","1":"PHL","Population":"2173831","2":"2173831"},{"Name":"Manila","0":"Manila","CountryCode":"PHL","1":"PHL","Population":"1581082","2":"1581082"},{"Name":"Kalookan","0":"Kalookan","CountryCode":"PHL","1":"PHL","Population":"1177604","2":"1177604"},{"Name":"Davao","0":"Davao","CountryCode":"PHL","1":"PHL","Population":"1147116","2":"1147116"},{"Name":"Cebu","0":"Cebu","CountryCode":"PHL","1":"PHL","Population":"718821","2":"718821"},{"Name":"Zamboanga","0":"Zamboanga","CountryCode":"PHL","1":"PHL","Population":"601794","2":"601794"},{"Name":"Pasig","0":"Pasig","CountryCode":"PHL","1":"PHL","Population":"505058","2":"505058"},{"Name":"Valenzuela","0":"Valenzuela","CountryCode":"PHL","1":"PHL","Population":"485433","2":"485433"},{"Name":"Las Pi\u00f1as","0":"Las Pi\u00f1as","CountryCode":"PHL","1":"PHL","Population":"472780","2":"472780"},{"Name":"Antipolo","0":"Antipolo","CountryCode":"PHL","1":"PHL","Population":"470866","2":"470866"},{"Name":"Taguig","0":"Taguig","CountryCode":"PHL","1":"PHL","Population":"467375","2":"467375"},{"Name":"Cagayan de Oro","0":"Cagayan de Oro","CountryCode":"PHL","1":"PHL","Population":"461877","2":"461877"},{"Name":"Para\u00f1aque","0":"Para\u00f1aque","CountryCode":"PHL","1":"PHL","Population":"449811","2":"449811"},{"Name":"Makati","0":"Makati","CountryCode":"PHL","1":"PHL","Population":"444867","2":"444867"},{"Name":"Bacolod","0":"Bacolod","CountryCode":"PHL","1":"PHL","Population":"429076","2":"429076"},{"Name":"General Santos","0":"General Santos","CountryCode":"PHL","1":"PHL","Population":"411822","2":"411822"},{"Name":"Marikina","0":"Marikina","CountryCode":"PHL","1":"PHL","Population":"391170","2":"391170"},{"Name":"Dasmari\u00f1as","0":"Dasmari\u00f1as","CountryCode":"PHL","1":"PHL","Population":"379520","2":"379520"},{"Name":"Muntinlupa","0":"Muntinlupa","CountryCode":"PHL","1":"PHL","Population":"379310","2":"379310"},{"Name":"Iloilo","0":"Iloilo","CountryCode":"PHL","1":"PHL","Population":"365820","2":"365820"},{"Name":"Pasay","0":"Pasay","CountryCode":"PHL","1":"PHL","Population":"354908","2":"354908"},{"Name":"Malabon","0":"Malabon","CountryCode":"PHL","1":"PHL","Population":"338855","2":"338855"},{"Name":"San Jos\u00e9 del Monte","0":"San Jos\u00e9 del Monte","CountryCode":"PHL","1":"PHL","Population":"315807","2":"315807"},{"Name":"Bacoor","0":"Bacoor","CountryCode":"PHL","1":"PHL","Population":"305699","2":"305699"},{"Name":"Iligan","0":"Iligan","CountryCode":"PHL","1":"PHL","Population":"285061","2":"285061"},{"Name":"Calamba","0":"Calamba","CountryCode":"PHL","1":"PHL","Population":"281146","2":"281146"},{"Name":"Mandaluyong","0":"Mandaluyong","CountryCode":"PHL","1":"PHL","Population":"278474","2":"278474"},{"Name":"Butuan","0":"Butuan","CountryCode":"PHL","1":"PHL","Population":"267279","2":"267279"},{"Name":"Angeles","0":"Angeles","CountryCode":"PHL","1":"PHL","Population":"263971","2":"263971"},{"Name":"Tarlac","0":"Tarlac","CountryCode":"PHL","1":"PHL","Population":"262481","2":"262481"},{"Name":"Mandaue","0":"Mandaue","CountryCode":"PHL","1":"PHL","Population":"259728","2":"259728"},{"Name":"Baguio","0":"Baguio","CountryCode":"PHL","1":"PHL","Population":"252386","2":"252386"},{"Name":"Batangas","0":"Batangas","CountryCode":"PHL","1":"PHL","Population":"247588","2":"247588"},{"Name":"Cainta","0":"Cainta","CountryCode":"PHL","1":"PHL","Population":"242511","2":"242511"},{"Name":"San Pedro","0":"San Pedro","CountryCode":"PHL","1":"PHL","Population":"231403","2":"231403"},{"Name":"Navotas","0":"Navotas","CountryCode":"PHL","1":"PHL","Population":"230403","2":"230403"},{"Name":"Cabanatuan","0":"Cabanatuan","CountryCode":"PHL","1":"PHL","Population":"222859","2":"222859"},{"Name":"San Fernando","0":"San Fernando","CountryCode":"PHL","1":"PHL","Population":"221857","2":"221857"},{"Name":"Lipa","0":"Lipa","CountryCode":"PHL","1":"PHL","Population":"218447","2":"218447"},{"Name":"Lapu-Lapu","0":"Lapu-Lapu","CountryCode":"PHL","1":"PHL","Population":"217019","2":"217019"},{"Name":"San Pablo","0":"San Pablo","CountryCode":"PHL","1":"PHL","Population":"207927","2":"207927"},{"Name":"Bi\u00f1an","0":"Bi\u00f1an","CountryCode":"PHL","1":"PHL","Population":"201186","2":"201186"},{"Name":"Taytay","0":"Taytay","CountryCode":"PHL","1":"PHL","Population":"198183","2":"198183"},{"Name":"Lucena","0":"Lucena","CountryCode":"PHL","1":"PHL","Population":"196075","2":"196075"},{"Name":"Imus","0":"Imus","CountryCode":"PHL","1":"PHL","Population":"195482","2":"195482"},{"Name":"Olongapo","0":"Olongapo","CountryCode":"PHL","1":"PHL","Population":"194260","2":"194260"},{"Name":"Binangonan","0":"Binangonan","CountryCode":"PHL","1":"PHL","Population":"187691","2":"187691"},{"Name":"Santa Rosa","0":"Santa Rosa","CountryCode":"PHL","1":"PHL","Population":"185633","2":"185633"},{"Name":"Tagum","0":"Tagum","CountryCode":"PHL","1":"PHL","Population":"179531","2":"179531"},{"Name":"Tacloban","0":"Tacloban","CountryCode":"PHL","1":"PHL","Population":"178639","2":"178639"},{"Name":"Malolos","0":"Malolos","CountryCode":"PHL","1":"PHL","Population":"175291","2":"175291"},{"Name":"Mabalacat","0":"Mabalacat","CountryCode":"PHL","1":"PHL","Population":"171045","2":"171045"},{"Name":"Cotabato","0":"Cotabato","CountryCode":"PHL","1":"PHL","Population":"163849","2":"163849"},{"Name":"Meycauayan","0":"Meycauayan","CountryCode":"PHL","1":"PHL","Population":"163037","2":"163037"},{"Name":"Puerto Princesa","0":"Puerto Princesa","CountryCode":"PHL","1":"PHL","Population":"161912","2":"161912"},{"Name":"Legazpi","0":"Legazpi","CountryCode":"PHL","1":"PHL","Population":"157010","2":"157010"},{"Name":"Silang","0":"Silang","CountryCode":"PHL","1":"PHL","Population":"156137","2":"156137"},{"Name":"Ormoc","0":"Ormoc","CountryCode":"PHL","1":"PHL","Population":"154297","2":"154297"},{"Name":"San Carlos","0":"San Carlos","CountryCode":"PHL","1":"PHL","Population":"154264","2":"154264"},{"Name":"Kabankalan","0":"Kabankalan","CountryCode":"PHL","1":"PHL","Population":"149769","2":"149769"},{"Name":"Talisay","0":"Talisay","CountryCode":"PHL","1":"PHL","Population":"148110","2":"148110"},{"Name":"Valencia","0":"Valencia","CountryCode":"PHL","1":"PHL","Population":"147924","2":"147924"},{"Name":"Calbayog","0":"Calbayog","CountryCode":"PHL","1":"PHL","Population":"147187","2":"147187"},{"Name":"Santa Maria","0":"Santa Maria","CountryCode":"PHL","1":"PHL","Population":"144282","2":"144282"},{"Name":"Pagadian","0":"Pagadian","CountryCode":"PHL","1":"PHL","Population":"142515","2":"142515"},{"Name":"Cadiz","0":"Cadiz","CountryCode":"PHL","1":"PHL","Population":"141954","2":"141954"},{"Name":"Bago","0":"Bago","CountryCode":"PHL","1":"PHL","Population":"141721","2":"141721"},{"Name":"Toledo","0":"Toledo","CountryCode":"PHL","1":"PHL","Population":"141174","2":"141174"},{"Name":"Naga","0":"Naga","CountryCode":"PHL","1":"PHL","Population":"137810","2":"137810"},{"Name":"San Mateo","0":"San Mateo","CountryCode":"PHL","1":"PHL","Population":"135603","2":"135603"},{"Name":"Panabo","0":"Panabo","CountryCode":"PHL","1":"PHL","Population":"133950","2":"133950"},{"Name":"Koronadal","0":"Koronadal","CountryCode":"PHL","1":"PHL","Population":"133786","2":"133786"},{"Name":"Marawi","0":"Marawi","CountryCode":"PHL","1":"PHL","Population":"131090","2":"131090"},{"Name":"Dagupan","0":"Dagupan","CountryCode":"PHL","1":"PHL","Population":"130328","2":"130328"},{"Name":"Sagay","0":"Sagay","CountryCode":"PHL","1":"PHL","Population":"129765","2":"129765"},{"Name":"Roxas","0":"Roxas","CountryCode":"PHL","1":"PHL","Population":"126352","2":"126352"},{"Name":"Lubao","0":"Lubao","CountryCode":"PHL","1":"PHL","Population":"125699","2":"125699"},{"Name":"Digos","0":"Digos","CountryCode":"PHL","1":"PHL","Population":"125171","2":"125171"},{"Name":"San Miguel","0":"San Miguel","CountryCode":"PHL","1":"PHL","Population":"123824","2":"123824"},{"Name":"Malaybalay","0":"Malaybalay","CountryCode":"PHL","1":"PHL","Population":"123672","2":"123672"},{"Name":"Tuguegarao","0":"Tuguegarao","CountryCode":"PHL","1":"PHL","Population":"120645","2":"120645"},{"Name":"Ilagan","0":"Ilagan","CountryCode":"PHL","1":"PHL","Population":"119990","2":"119990"},{"Name":"Baliuag","0":"Baliuag","CountryCode":"PHL","1":"PHL","Population":"119675","2":"119675"},{"Name":"Surigao","0":"Surigao","CountryCode":"PHL","1":"PHL","Population":"118534","2":"118534"},{"Name":"San Carlos","0":"San Carlos","CountryCode":"PHL","1":"PHL","Population":"118259","2":"118259"},{"Name":"San Juan del Monte","0":"San Juan del Monte","CountryCode":"PHL","1":"PHL","Population":"117680","2":"117680"},{"Name":"Tanauan","0":"Tanauan","CountryCode":"PHL","1":"PHL","Population":"117539","2":"117539"},{"Name":"Concepcion","0":"Concepcion","CountryCode":"PHL","1":"PHL","Population":"115171","2":"115171"},{"Name":"Rodriguez (Montalban)","0":"Rodriguez (Montalban)","CountryCode":"PHL","1":"PHL","Population":"115167","2":"115167"},{"Name":"Sariaya","0":"Sariaya","CountryCode":"PHL","1":"PHL","Population":"114568","2":"114568"},{"Name":"Malasiqui","0":"Malasiqui","CountryCode":"PHL","1":"PHL","Population":"113190","2":"113190"},{"Name":"General Mariano Alvarez","0":"General Mariano Alvarez","CountryCode":"PHL","1":"PHL","Population":"112446","2":"112446"},{"Name":"Urdaneta","0":"Urdaneta","CountryCode":"PHL","1":"PHL","Population":"111582","2":"111582"},{"Name":"Hagonoy","0":"Hagonoy","CountryCode":"PHL","1":"PHL","Population":"111425","2":"111425"},{"Name":"San Jose","0":"San Jose","CountryCode":"PHL","1":"PHL","Population":"111009","2":"111009"},{"Name":"Polomolok","0":"Polomolok","CountryCode":"PHL","1":"PHL","Population":"110709","2":"110709"},{"Name":"Santiago","0":"Santiago","CountryCode":"PHL","1":"PHL","Population":"110531","2":"110531"},{"Name":"Tanza","0":"Tanza","CountryCode":"PHL","1":"PHL","Population":"110517","2":"110517"},{"Name":"Ozamis","0":"Ozamis","CountryCode":"PHL","1":"PHL","Population":"110420","2":"110420"},{"Name":"Mexico","0":"Mexico","CountryCode":"PHL","1":"PHL","Population":"109481","2":"109481"},{"Name":"San Jose","0":"San Jose","CountryCode":"PHL","1":"PHL","Population":"108254","2":"108254"},{"Name":"Silay","0":"Silay","CountryCode":"PHL","1":"PHL","Population":"107722","2":"107722"},{"Name":"General Trias","0":"General Trias","CountryCode":"PHL","1":"PHL","Population":"107691","2":"107691"},{"Name":"Tabaco","0":"Tabaco","CountryCode":"PHL","1":"PHL","Population":"107166","2":"107166"},{"Name":"Cabuyao","0":"Cabuyao","CountryCode":"PHL","1":"PHL","Population":"106630","2":"106630"},{"Name":"Calapan","0":"Calapan","CountryCode":"PHL","1":"PHL","Population":"105910","2":"105910"},{"Name":"Mati","0":"Mati","CountryCode":"PHL","1":"PHL","Population":"105908","2":"105908"},{"Name":"Midsayap","0":"Midsayap","CountryCode":"PHL","1":"PHL","Population":"105760","2":"105760"},{"Name":"Cauayan","0":"Cauayan","CountryCode":"PHL","1":"PHL","Population":"103952","2":"103952"},{"Name":"Gingoog","0":"Gingoog","CountryCode":"PHL","1":"PHL","Population":"102379","2":"102379"},{"Name":"Dumaguete","0":"Dumaguete","CountryCode":"PHL","1":"PHL","Population":"102265","2":"102265"},{"Name":"San Fernando","0":"San Fernando","CountryCode":"PHL","1":"PHL","Population":"102082","2":"102082"},{"Name":"Arayat","0":"Arayat","CountryCode":"PHL","1":"PHL","Population":"101792","2":"101792"},{"Name":"Bayawan (Tulong)","0":"Bayawan (Tulong)","CountryCode":"PHL","1":"PHL","Population":"101391","2":"101391"},{"Name":"Kidapawan","0":"Kidapawan","CountryCode":"PHL","1":"PHL","Population":"101205","2":"101205"},{"Name":"Daraga (Locsin)","0":"Daraga (Locsin)","CountryCode":"PHL","1":"PHL","Population":"101031","2":"101031"},{"Name":"Marilao","0":"Marilao","CountryCode":"PHL","1":"PHL","Population":"101017","2":"101017"},{"Name":"Malita","0":"Malita","CountryCode":"PHL","1":"PHL","Population":"100000","2":"100000"},{"Name":"Dipolog","0":"Dipolog","CountryCode":"PHL","1":"PHL","Population":"99862","2":"99862"},{"Name":"Cavite","0":"Cavite","CountryCode":"PHL","1":"PHL","Population":"99367","2":"99367"},{"Name":"Danao","0":"Danao","CountryCode":"PHL","1":"PHL","Population":"98781","2":"98781"},{"Name":"Bislig","0":"Bislig","CountryCode":"PHL","1":"PHL","Population":"97860","2":"97860"},{"Name":"Talavera","0":"Talavera","CountryCode":"PHL","1":"PHL","Population":"97329","2":"97329"},{"Name":"Guagua","0":"Guagua","CountryCode":"PHL","1":"PHL","Population":"96858","2":"96858"},{"Name":"Bayambang","0":"Bayambang","CountryCode":"PHL","1":"PHL","Population":"96609","2":"96609"},{"Name":"Nasugbu","0":"Nasugbu","CountryCode":"PHL","1":"PHL","Population":"96113","2":"96113"},{"Name":"Baybay","0":"Baybay","CountryCode":"PHL","1":"PHL","Population":"95630","2":"95630"},{"Name":"Capas","0":"Capas","CountryCode":"PHL","1":"PHL","Population":"95219","2":"95219"},{"Name":"Sultan Kudarat","0":"Sultan Kudarat","CountryCode":"PHL","1":"PHL","Population":"94861","2":"94861"},{"Name":"Laoag","0":"Laoag","CountryCode":"PHL","1":"PHL","Population":"94466","2":"94466"},{"Name":"Bayugan","0":"Bayugan","CountryCode":"PHL","1":"PHL","Population":"93623","2":"93623"},{"Name":"Malungon","0":"Malungon","CountryCode":"PHL","1":"PHL","Population":"93232","2":"93232"},{"Name":"Santa Cruz","0":"Santa Cruz","CountryCode":"PHL","1":"PHL","Population":"92694","2":"92694"},{"Name":"Sorsogon","0":"Sorsogon","CountryCode":"PHL","1":"PHL","Population":"92512","2":"92512"},{"Name":"Candelaria","0":"Candelaria","CountryCode":"PHL","1":"PHL","Population":"92429","2":"92429"},{"Name":"Ligao","0":"Ligao","CountryCode":"PHL","1":"PHL","Population":"90603","2":"90603"},{"Name":"T\u00f3rshavn","0":"T\u00f3rshavn","CountryCode":"FRO","1":"FRO","Population":"14542","2":"14542"},{"Name":"Libreville","0":"Libreville","CountryCode":"GAB","1":"GAB","Population":"419000","2":"419000"},{"Name":"Serekunda","0":"Serekunda","CountryCode":"GMB","1":"GMB","Population":"102600","2":"102600"},{"Name":"Banjul","0":"Banjul","CountryCode":"GMB","1":"GMB","Population":"42326","2":"42326"},{"Name":"Tbilisi","0":"Tbilisi","CountryCode":"GEO","1":"GEO","Population":"1235200","2":"1235200"},{"Name":"Kutaisi","0":"Kutaisi","CountryCode":"GEO","1":"GEO","Population":"240900","2":"240900"},{"Name":"Rustavi","0":"Rustavi","CountryCode":"GEO","1":"GEO","Population":"155400","2":"155400"},{"Name":"Batumi","0":"Batumi","CountryCode":"GEO","1":"GEO","Population":"137700","2":"137700"},{"Name":"Sohumi","0":"Sohumi","CountryCode":"GEO","1":"GEO","Population":"111700","2":"111700"},{"Name":"Accra","0":"Accra","CountryCode":"GHA","1":"GHA","Population":"1070000","2":"1070000"},{"Name":"Kumasi","0":"Kumasi","CountryCode":"GHA","1":"GHA","Population":"385192","2":"385192"},{"Name":"Tamale","0":"Tamale","CountryCode":"GHA","1":"GHA","Population":"151069","2":"151069"},{"Name":"Tema","0":"Tema","CountryCode":"GHA","1":"GHA","Population":"109975","2":"109975"},{"Name":"Sekondi-Takoradi","0":"Sekondi-Takoradi","CountryCode":"GHA","1":"GHA","Population":"103653","2":"103653"},{"Name":"Gibraltar","0":"Gibraltar","CountryCode":"GIB","1":"GIB","Population":"27025","2":"27025"},{"Name":"Saint George\u00b4s","0":"Saint George\u00b4s","CountryCode":"GRD","1":"GRD","Population":"4621","2":"4621"},{"Name":"Nuuk","0":"Nuuk","CountryCode":"GRL","1":"GRL","Population":"13445","2":"13445"},{"Name":"Les Abymes","0":"Les Abymes","CountryCode":"GLP","1":"GLP","Population":"62947","2":"62947"},{"Name":"Basse-Terre","0":"Basse-Terre","CountryCode":"GLP","1":"GLP","Population":"12433","2":"12433"},{"Name":"Tamuning","0":"Tamuning","CountryCode":"GUM","1":"GUM","Population":"9500","2":"9500"},{"Name":"Aga\u00f1a","0":"Aga\u00f1a","CountryCode":"GUM","1":"GUM","Population":"1139","2":"1139"},{"Name":"Ciudad de Guatemala","0":"Ciudad de Guatemala","CountryCode":"GTM","1":"GTM","Population":"823301","2":"823301"},{"Name":"Mixco","0":"Mixco","CountryCode":"GTM","1":"GTM","Population":"209791","2":"209791"},{"Name":"Villa Nueva","0":"Villa Nueva","CountryCode":"GTM","1":"GTM","Population":"101295","2":"101295"},{"Name":"Quetzaltenango","0":"Quetzaltenango","CountryCode":"GTM","1":"GTM","Population":"90801","2":"90801"},{"Name":"Conakry","0":"Conakry","CountryCode":"GIN","1":"GIN","Population":"1090610","2":"1090610"},{"Name":"Bissau","0":"Bissau","CountryCode":"GNB","1":"GNB","Population":"241000","2":"241000"},{"Name":"Georgetown","0":"Georgetown","CountryCode":"GUY","1":"GUY","Population":"254000","2":"254000"},{"Name":"Port-au-Prince","0":"Port-au-Prince","CountryCode":"HTI","1":"HTI","Population":"884472","2":"884472"},{"Name":"Carrefour","0":"Carrefour","CountryCode":"HTI","1":"HTI","Population":"290204","2":"290204"},{"Name":"Delmas","0":"Delmas","CountryCode":"HTI","1":"HTI","Population":"240429","2":"240429"},{"Name":"Le-Cap-Ha\u00eftien","0":"Le-Cap-Ha\u00eftien","CountryCode":"HTI","1":"HTI","Population":"102233","2":"102233"},{"Name":"Tegucigalpa","0":"Tegucigalpa","CountryCode":"HND","1":"HND","Population":"813900","2":"813900"},{"Name":"San Pedro Sula","0":"San Pedro Sula","CountryCode":"HND","1":"HND","Population":"383900","2":"383900"},{"Name":"La Ceiba","0":"La Ceiba","CountryCode":"HND","1":"HND","Population":"89200","2":"89200"},{"Name":"Kowloon and New Kowloon","0":"Kowloon and New Kowloon","CountryCode":"HKG","1":"HKG","Population":"1987996","2":"1987996"},{"Name":"Victoria","0":"Victoria","CountryCode":"HKG","1":"HKG","Population":"1312637","2":"1312637"},{"Name":"Longyearbyen","0":"Longyearbyen","CountryCode":"SJM","1":"SJM","Population":"1438","2":"1438"},{"Name":"Jakarta","0":"Jakarta","CountryCode":"IDN","1":"IDN","Population":"9604900","2":"9604900"},{"Name":"Surabaya","0":"Surabaya","CountryCode":"IDN","1":"IDN","Population":"2663820","2":"2663820"},{"Name":"Bandung","0":"Bandung","CountryCode":"IDN","1":"IDN","Population":"2429000","2":"2429000"},{"Name":"Medan","0":"Medan","CountryCode":"IDN","1":"IDN","Population":"1843919","2":"1843919"},{"Name":"Palembang","0":"Palembang","CountryCode":"IDN","1":"IDN","Population":"1222764","2":"1222764"},{"Name":"Tangerang","0":"Tangerang","CountryCode":"IDN","1":"IDN","Population":"1198300","2":"1198300"},{"Name":"Semarang","0":"Semarang","CountryCode":"IDN","1":"IDN","Population":"1104405","2":"1104405"},{"Name":"Ujung Pandang","0":"Ujung Pandang","CountryCode":"IDN","1":"IDN","Population":"1060257","2":"1060257"},{"Name":"Malang","0":"Malang","CountryCode":"IDN","1":"IDN","Population":"716862","2":"716862"},{"Name":"Bandar Lampung","0":"Bandar Lampung","CountryCode":"IDN","1":"IDN","Population":"680332","2":"680332"},{"Name":"Bekasi","0":"Bekasi","CountryCode":"IDN","1":"IDN","Population":"644300","2":"644300"},{"Name":"Padang","0":"Padang","CountryCode":"IDN","1":"IDN","Population":"534474","2":"534474"},{"Name":"Surakarta","0":"Surakarta","CountryCode":"IDN","1":"IDN","Population":"518600","2":"518600"},{"Name":"Banjarmasin","0":"Banjarmasin","CountryCode":"IDN","1":"IDN","Population":"482931","2":"482931"},{"Name":"Pekan Baru","0":"Pekan Baru","CountryCode":"IDN","1":"IDN","Population":"438638","2":"438638"},{"Name":"Denpasar","0":"Denpasar","CountryCode":"IDN","1":"IDN","Population":"435000","2":"435000"},{"Name":"Yogyakarta","0":"Yogyakarta","CountryCode":"IDN","1":"IDN","Population":"418944","2":"418944"},{"Name":"Pontianak","0":"Pontianak","CountryCode":"IDN","1":"IDN","Population":"409632","2":"409632"},{"Name":"Samarinda","0":"Samarinda","CountryCode":"IDN","1":"IDN","Population":"399175","2":"399175"},{"Name":"Jambi","0":"Jambi","CountryCode":"IDN","1":"IDN","Population":"385201","2":"385201"},{"Name":"Depok","0":"Depok","CountryCode":"IDN","1":"IDN","Population":"365200","2":"365200"},{"Name":"Cimahi","0":"Cimahi","CountryCode":"IDN","1":"IDN","Population":"344600","2":"344600"},{"Name":"Balikpapan","0":"Balikpapan","CountryCode":"IDN","1":"IDN","Population":"338752","2":"338752"},{"Name":"Manado","0":"Manado","CountryCode":"IDN","1":"IDN","Population":"332288","2":"332288"},{"Name":"Mataram","0":"Mataram","CountryCode":"IDN","1":"IDN","Population":"306600","2":"306600"},{"Name":"Pekalongan","0":"Pekalongan","CountryCode":"IDN","1":"IDN","Population":"301504","2":"301504"},{"Name":"Tegal","0":"Tegal","CountryCode":"IDN","1":"IDN","Population":"289744","2":"289744"},{"Name":"Bogor","0":"Bogor","CountryCode":"IDN","1":"IDN","Population":"285114","2":"285114"},{"Name":"Ciputat","0":"Ciputat","CountryCode":"IDN","1":"IDN","Population":"270800","2":"270800"},{"Name":"Pondokgede","0":"Pondokgede","CountryCode":"IDN","1":"IDN","Population":"263200","2":"263200"},{"Name":"Cirebon","0":"Cirebon","CountryCode":"IDN","1":"IDN","Population":"254406","2":"254406"},{"Name":"Kediri","0":"Kediri","CountryCode":"IDN","1":"IDN","Population":"253760","2":"253760"},{"Name":"Ambon","0":"Ambon","CountryCode":"IDN","1":"IDN","Population":"249312","2":"249312"},{"Name":"Jember","0":"Jember","CountryCode":"IDN","1":"IDN","Population":"218500","2":"218500"},{"Name":"Cilacap","0":"Cilacap","CountryCode":"IDN","1":"IDN","Population":"206900","2":"206900"},{"Name":"Cimanggis","0":"Cimanggis","CountryCode":"IDN","1":"IDN","Population":"205100","2":"205100"},{"Name":"Pematang Siantar","0":"Pematang Siantar","CountryCode":"IDN","1":"IDN","Population":"203056","2":"203056"},{"Name":"Purwokerto","0":"Purwokerto","CountryCode":"IDN","1":"IDN","Population":"202500","2":"202500"},{"Name":"Ciomas","0":"Ciomas","CountryCode":"IDN","1":"IDN","Population":"187400","2":"187400"},{"Name":"Tasikmalaya","0":"Tasikmalaya","CountryCode":"IDN","1":"IDN","Population":"179800","2":"179800"},{"Name":"Madiun","0":"Madiun","CountryCode":"IDN","1":"IDN","Population":"171532","2":"171532"},{"Name":"Bengkulu","0":"Bengkulu","CountryCode":"IDN","1":"IDN","Population":"146439","2":"146439"},{"Name":"Karawang","0":"Karawang","CountryCode":"IDN","1":"IDN","Population":"145000","2":"145000"},{"Name":"Banda Aceh","0":"Banda Aceh","CountryCode":"IDN","1":"IDN","Population":"143409","2":"143409"},{"Name":"Palu","0":"Palu","CountryCode":"IDN","1":"IDN","Population":"142800","2":"142800"},{"Name":"Pasuruan","0":"Pasuruan","CountryCode":"IDN","1":"IDN","Population":"134019","2":"134019"},{"Name":"Kupang","0":"Kupang","CountryCode":"IDN","1":"IDN","Population":"129300","2":"129300"},{"Name":"Tebing Tinggi","0":"Tebing Tinggi","CountryCode":"IDN","1":"IDN","Population":"129300","2":"129300"},{"Name":"Percut Sei Tuan","0":"Percut Sei Tuan","CountryCode":"IDN","1":"IDN","Population":"129000","2":"129000"},{"Name":"Binjai","0":"Binjai","CountryCode":"IDN","1":"IDN","Population":"127222","2":"127222"},{"Name":"Sukabumi","0":"Sukabumi","CountryCode":"IDN","1":"IDN","Population":"125766","2":"125766"},{"Name":"Waru","0":"Waru","CountryCode":"IDN","1":"IDN","Population":"124300","2":"124300"},{"Name":"Pangkal Pinang","0":"Pangkal Pinang","CountryCode":"IDN","1":"IDN","Population":"124000","2":"124000"},{"Name":"Magelang","0":"Magelang","CountryCode":"IDN","1":"IDN","Population":"123800","2":"123800"},{"Name":"Blitar","0":"Blitar","CountryCode":"IDN","1":"IDN","Population":"122600","2":"122600"},{"Name":"Serang","0":"Serang","CountryCode":"IDN","1":"IDN","Population":"122400","2":"122400"},{"Name":"Probolinggo","0":"Probolinggo","CountryCode":"IDN","1":"IDN","Population":"120770","2":"120770"},{"Name":"Cilegon","0":"Cilegon","CountryCode":"IDN","1":"IDN","Population":"117000","2":"117000"},{"Name":"Cianjur","0":"Cianjur","CountryCode":"IDN","1":"IDN","Population":"114300","2":"114300"},{"Name":"Ciparay","0":"Ciparay","CountryCode":"IDN","1":"IDN","Population":"111500","2":"111500"},{"Name":"Lhokseumawe","0":"Lhokseumawe","CountryCode":"IDN","1":"IDN","Population":"109600","2":"109600"},{"Name":"Taman","0":"Taman","CountryCode":"IDN","1":"IDN","Population":"107000","2":"107000"},{"Name":"Depok","0":"Depok","CountryCode":"IDN","1":"IDN","Population":"106800","2":"106800"},{"Name":"Citeureup","0":"Citeureup","CountryCode":"IDN","1":"IDN","Population":"105100","2":"105100"},{"Name":"Pemalang","0":"Pemalang","CountryCode":"IDN","1":"IDN","Population":"103500","2":"103500"},{"Name":"Klaten","0":"Klaten","CountryCode":"IDN","1":"IDN","Population":"103300","2":"103300"},{"Name":"Salatiga","0":"Salatiga","CountryCode":"IDN","1":"IDN","Population":"103000","2":"103000"},{"Name":"Cibinong","0":"Cibinong","CountryCode":"IDN","1":"IDN","Population":"101300","2":"101300"},{"Name":"Palangka Raya","0":"Palangka Raya","CountryCode":"IDN","1":"IDN","Population":"99693","2":"99693"},{"Name":"Mojokerto","0":"Mojokerto","CountryCode":"IDN","1":"IDN","Population":"96626","2":"96626"},{"Name":"Purwakarta","0":"Purwakarta","CountryCode":"IDN","1":"IDN","Population":"95900","2":"95900"},{"Name":"Garut","0":"Garut","CountryCode":"IDN","1":"IDN","Population":"95800","2":"95800"},{"Name":"Kudus","0":"Kudus","CountryCode":"IDN","1":"IDN","Population":"95300","2":"95300"},{"Name":"Kendari","0":"Kendari","CountryCode":"IDN","1":"IDN","Population":"94800","2":"94800"},{"Name":"Jaya Pura","0":"Jaya Pura","CountryCode":"IDN","1":"IDN","Population":"94700","2":"94700"},{"Name":"Gorontalo","0":"Gorontalo","CountryCode":"IDN","1":"IDN","Population":"94058","2":"94058"},{"Name":"Majalaya","0":"Majalaya","CountryCode":"IDN","1":"IDN","Population":"93200","2":"93200"},{"Name":"Pondok Aren","0":"Pondok Aren","CountryCode":"IDN","1":"IDN","Population":"92700","2":"92700"},{"Name":"Jombang","0":"Jombang","CountryCode":"IDN","1":"IDN","Population":"92600","2":"92600"},{"Name":"Sunggal","0":"Sunggal","CountryCode":"IDN","1":"IDN","Population":"92300","2":"92300"},{"Name":"Batam","0":"Batam","CountryCode":"IDN","1":"IDN","Population":"91871","2":"91871"},{"Name":"Padang Sidempuan","0":"Padang Sidempuan","CountryCode":"IDN","1":"IDN","Population":"91200","2":"91200"},{"Name":"Sawangan","0":"Sawangan","CountryCode":"IDN","1":"IDN","Population":"91100","2":"91100"},{"Name":"Banyuwangi","0":"Banyuwangi","CountryCode":"IDN","1":"IDN","Population":"89900","2":"89900"},{"Name":"Tanjung Pinang","0":"Tanjung Pinang","CountryCode":"IDN","1":"IDN","Population":"89900","2":"89900"},{"Name":"Mumbai (Bombay)","0":"Mumbai (Bombay)","CountryCode":"IND","1":"IND","Population":"10500000","2":"10500000"},{"Name":"Delhi","0":"Delhi","CountryCode":"IND","1":"IND","Population":"7206704","2":"7206704"},{"Name":"Calcutta [Kolkata]","0":"Calcutta [Kolkata]","CountryCode":"IND","1":"IND","Population":"4399819","2":"4399819"},{"Name":"Chennai (Madras)","0":"Chennai (Madras)","CountryCode":"IND","1":"IND","Population":"3841396","2":"3841396"},{"Name":"Hyderabad","0":"Hyderabad","CountryCode":"IND","1":"IND","Population":"2964638","2":"2964638"},{"Name":"Ahmedabad","0":"Ahmedabad","CountryCode":"IND","1":"IND","Population":"2876710","2":"2876710"},{"Name":"Bangalore","0":"Bangalore","CountryCode":"IND","1":"IND","Population":"2660088","2":"2660088"},{"Name":"Kanpur","0":"Kanpur","CountryCode":"IND","1":"IND","Population":"1874409","2":"1874409"},{"Name":"Nagpur","0":"Nagpur","CountryCode":"IND","1":"IND","Population":"1624752","2":"1624752"},{"Name":"Lucknow","0":"Lucknow","CountryCode":"IND","1":"IND","Population":"1619115","2":"1619115"},{"Name":"Pune","0":"Pune","CountryCode":"IND","1":"IND","Population":"1566651","2":"1566651"},{"Name":"Surat","0":"Surat","CountryCode":"IND","1":"IND","Population":"1498817","2":"1498817"},{"Name":"Jaipur","0":"Jaipur","CountryCode":"IND","1":"IND","Population":"1458483","2":"1458483"},{"Name":"Indore","0":"Indore","CountryCode":"IND","1":"IND","Population":"1091674","2":"1091674"},{"Name":"Bhopal","0":"Bhopal","CountryCode":"IND","1":"IND","Population":"1062771","2":"1062771"},{"Name":"Ludhiana","0":"Ludhiana","CountryCode":"IND","1":"IND","Population":"1042740","2":"1042740"},{"Name":"Vadodara (Baroda)","0":"Vadodara (Baroda)","CountryCode":"IND","1":"IND","Population":"1031346","2":"1031346"},{"Name":"Kalyan","0":"Kalyan","CountryCode":"IND","1":"IND","Population":"1014557","2":"1014557"},{"Name":"Madurai","0":"Madurai","CountryCode":"IND","1":"IND","Population":"977856","2":"977856"},{"Name":"Haora (Howrah)","0":"Haora (Howrah)","CountryCode":"IND","1":"IND","Population":"950435","2":"950435"},{"Name":"Varanasi (Benares)","0":"Varanasi (Benares)","CountryCode":"IND","1":"IND","Population":"929270","2":"929270"},{"Name":"Patna","0":"Patna","CountryCode":"IND","1":"IND","Population":"917243","2":"917243"},{"Name":"Srinagar","0":"Srinagar","CountryCode":"IND","1":"IND","Population":"892506","2":"892506"},{"Name":"Agra","0":"Agra","CountryCode":"IND","1":"IND","Population":"891790","2":"891790"},{"Name":"Coimbatore","0":"Coimbatore","CountryCode":"IND","1":"IND","Population":"816321","2":"816321"},{"Name":"Thane (Thana)","0":"Thane (Thana)","CountryCode":"IND","1":"IND","Population":"803389","2":"803389"},{"Name":"Allahabad","0":"Allahabad","CountryCode":"IND","1":"IND","Population":"792858","2":"792858"},{"Name":"Meerut","0":"Meerut","CountryCode":"IND","1":"IND","Population":"753778","2":"753778"},{"Name":"Vishakhapatnam","0":"Vishakhapatnam","CountryCode":"IND","1":"IND","Population":"752037","2":"752037"},{"Name":"Jabalpur","0":"Jabalpur","CountryCode":"IND","1":"IND","Population":"741927","2":"741927"},{"Name":"Amritsar","0":"Amritsar","CountryCode":"IND","1":"IND","Population":"708835","2":"708835"},{"Name":"Faridabad","0":"Faridabad","CountryCode":"IND","1":"IND","Population":"703592","2":"703592"},{"Name":"Vijayawada","0":"Vijayawada","CountryCode":"IND","1":"IND","Population":"701827","2":"701827"},{"Name":"Gwalior","0":"Gwalior","CountryCode":"IND","1":"IND","Population":"690765","2":"690765"},{"Name":"Jodhpur","0":"Jodhpur","CountryCode":"IND","1":"IND","Population":"666279","2":"666279"},{"Name":"Nashik (Nasik)","0":"Nashik (Nasik)","CountryCode":"IND","1":"IND","Population":"656925","2":"656925"},{"Name":"Hubli-Dharwad","0":"Hubli-Dharwad","CountryCode":"IND","1":"IND","Population":"648298","2":"648298"},{"Name":"Solapur (Sholapur)","0":"Solapur (Sholapur)","CountryCode":"IND","1":"IND","Population":"604215","2":"604215"},{"Name":"Ranchi","0":"Ranchi","CountryCode":"IND","1":"IND","Population":"599306","2":"599306"},{"Name":"Bareilly","0":"Bareilly","CountryCode":"IND","1":"IND","Population":"587211","2":"587211"},{"Name":"Guwahati (Gauhati)","0":"Guwahati (Gauhati)","CountryCode":"IND","1":"IND","Population":"584342","2":"584342"},{"Name":"Shambajinagar (Aurangabad)","0":"Shambajinagar (Aurangabad)","CountryCode":"IND","1":"IND","Population":"573272","2":"573272"},{"Name":"Cochin (Kochi)","0":"Cochin (Kochi)","CountryCode":"IND","1":"IND","Population":"564589","2":"564589"},{"Name":"Rajkot","0":"Rajkot","CountryCode":"IND","1":"IND","Population":"559407","2":"559407"},{"Name":"Kota","0":"Kota","CountryCode":"IND","1":"IND","Population":"537371","2":"537371"},{"Name":"Thiruvananthapuram (Trivandrum","0":"Thiruvananthapuram (Trivandrum","CountryCode":"IND","1":"IND","Population":"524006","2":"524006"},{"Name":"Pimpri-Chinchwad","0":"Pimpri-Chinchwad","CountryCode":"IND","1":"IND","Population":"517083","2":"517083"},{"Name":"Jalandhar (Jullundur)","0":"Jalandhar (Jullundur)","CountryCode":"IND","1":"IND","Population":"509510","2":"509510"},{"Name":"Gorakhpur","0":"Gorakhpur","CountryCode":"IND","1":"IND","Population":"505566","2":"505566"},{"Name":"Chandigarh","0":"Chandigarh","CountryCode":"IND","1":"IND","Population":"504094","2":"504094"},{"Name":"Mysore","0":"Mysore","CountryCode":"IND","1":"IND","Population":"480692","2":"480692"},{"Name":"Aligarh","0":"Aligarh","CountryCode":"IND","1":"IND","Population":"480520","2":"480520"},{"Name":"Guntur","0":"Guntur","CountryCode":"IND","1":"IND","Population":"471051","2":"471051"},{"Name":"Jamshedpur","0":"Jamshedpur","CountryCode":"IND","1":"IND","Population":"460577","2":"460577"},{"Name":"Ghaziabad","0":"Ghaziabad","CountryCode":"IND","1":"IND","Population":"454156","2":"454156"},{"Name":"Warangal","0":"Warangal","CountryCode":"IND","1":"IND","Population":"447657","2":"447657"},{"Name":"Raipur","0":"Raipur","CountryCode":"IND","1":"IND","Population":"438639","2":"438639"},{"Name":"Moradabad","0":"Moradabad","CountryCode":"IND","1":"IND","Population":"429214","2":"429214"},{"Name":"Durgapur","0":"Durgapur","CountryCode":"IND","1":"IND","Population":"425836","2":"425836"},{"Name":"Amravati","0":"Amravati","CountryCode":"IND","1":"IND","Population":"421576","2":"421576"},{"Name":"Calicut (Kozhikode)","0":"Calicut (Kozhikode)","CountryCode":"IND","1":"IND","Population":"419831","2":"419831"},{"Name":"Bikaner","0":"Bikaner","CountryCode":"IND","1":"IND","Population":"416289","2":"416289"},{"Name":"Bhubaneswar","0":"Bhubaneswar","CountryCode":"IND","1":"IND","Population":"411542","2":"411542"},{"Name":"Kolhapur","0":"Kolhapur","CountryCode":"IND","1":"IND","Population":"406370","2":"406370"},{"Name":"Kataka (Cuttack)","0":"Kataka (Cuttack)","CountryCode":"IND","1":"IND","Population":"403418","2":"403418"},{"Name":"Ajmer","0":"Ajmer","CountryCode":"IND","1":"IND","Population":"402700","2":"402700"},{"Name":"Bhavnagar","0":"Bhavnagar","CountryCode":"IND","1":"IND","Population":"402338","2":"402338"},{"Name":"Tiruchirapalli","0":"Tiruchirapalli","CountryCode":"IND","1":"IND","Population":"387223","2":"387223"},{"Name":"Bhilai","0":"Bhilai","CountryCode":"IND","1":"IND","Population":"386159","2":"386159"},{"Name":"Bhiwandi","0":"Bhiwandi","CountryCode":"IND","1":"IND","Population":"379070","2":"379070"},{"Name":"Saharanpur","0":"Saharanpur","CountryCode":"IND","1":"IND","Population":"374945","2":"374945"},{"Name":"Ulhasnagar","0":"Ulhasnagar","CountryCode":"IND","1":"IND","Population":"369077","2":"369077"},{"Name":"Salem","0":"Salem","CountryCode":"IND","1":"IND","Population":"366712","2":"366712"},{"Name":"Ujjain","0":"Ujjain","CountryCode":"IND","1":"IND","Population":"362266","2":"362266"},{"Name":"Malegaon","0":"Malegaon","CountryCode":"IND","1":"IND","Population":"342595","2":"342595"},{"Name":"Jamnagar","0":"Jamnagar","CountryCode":"IND","1":"IND","Population":"341637","2":"341637"},{"Name":"Bokaro Steel City","0":"Bokaro Steel City","CountryCode":"IND","1":"IND","Population":"333683","2":"333683"},{"Name":"Akola","0":"Akola","CountryCode":"IND","1":"IND","Population":"328034","2":"328034"},{"Name":"Belgaum","0":"Belgaum","CountryCode":"IND","1":"IND","Population":"326399","2":"326399"},{"Name":"Rajahmundry","0":"Rajahmundry","CountryCode":"IND","1":"IND","Population":"324851","2":"324851"},{"Name":"Nellore","0":"Nellore","CountryCode":"IND","1":"IND","Population":"316606","2":"316606"},{"Name":"Udaipur","0":"Udaipur","CountryCode":"IND","1":"IND","Population":"308571","2":"308571"},{"Name":"New Bombay","0":"New Bombay","CountryCode":"IND","1":"IND","Population":"307297","2":"307297"},{"Name":"Bhatpara","0":"Bhatpara","CountryCode":"IND","1":"IND","Population":"304952","2":"304952"},{"Name":"Gulbarga","0":"Gulbarga","CountryCode":"IND","1":"IND","Population":"304099","2":"304099"},{"Name":"New Delhi","0":"New Delhi","CountryCode":"IND","1":"IND","Population":"301297","2":"301297"},{"Name":"Jhansi","0":"Jhansi","CountryCode":"IND","1":"IND","Population":"300850","2":"300850"},{"Name":"Gaya","0":"Gaya","CountryCode":"IND","1":"IND","Population":"291675","2":"291675"},{"Name":"Kakinada","0":"Kakinada","CountryCode":"IND","1":"IND","Population":"279980","2":"279980"},{"Name":"Dhule (Dhulia)","0":"Dhule (Dhulia)","CountryCode":"IND","1":"IND","Population":"278317","2":"278317"},{"Name":"Panihati","0":"Panihati","CountryCode":"IND","1":"IND","Population":"275990","2":"275990"},{"Name":"Nanded (Nander)","0":"Nanded (Nander)","CountryCode":"IND","1":"IND","Population":"275083","2":"275083"},{"Name":"Mangalore","0":"Mangalore","CountryCode":"IND","1":"IND","Population":"273304","2":"273304"},{"Name":"Dehra Dun","0":"Dehra Dun","CountryCode":"IND","1":"IND","Population":"270159","2":"270159"},{"Name":"Kamarhati","0":"Kamarhati","CountryCode":"IND","1":"IND","Population":"266889","2":"266889"},{"Name":"Davangere","0":"Davangere","CountryCode":"IND","1":"IND","Population":"266082","2":"266082"},{"Name":"Asansol","0":"Asansol","CountryCode":"IND","1":"IND","Population":"262188","2":"262188"},{"Name":"Bhagalpur","0":"Bhagalpur","CountryCode":"IND","1":"IND","Population":"253225","2":"253225"},{"Name":"Bellary","0":"Bellary","CountryCode":"IND","1":"IND","Population":"245391","2":"245391"},{"Name":"Barddhaman (Burdwan)","0":"Barddhaman (Burdwan)","CountryCode":"IND","1":"IND","Population":"245079","2":"245079"},{"Name":"Rampur","0":"Rampur","CountryCode":"IND","1":"IND","Population":"243742","2":"243742"},{"Name":"Jalgaon","0":"Jalgaon","CountryCode":"IND","1":"IND","Population":"242193","2":"242193"},{"Name":"Muzaffarpur","0":"Muzaffarpur","CountryCode":"IND","1":"IND","Population":"241107","2":"241107"},{"Name":"Nizamabad","0":"Nizamabad","CountryCode":"IND","1":"IND","Population":"241034","2":"241034"},{"Name":"Muzaffarnagar","0":"Muzaffarnagar","CountryCode":"IND","1":"IND","Population":"240609","2":"240609"},{"Name":"Patiala","0":"Patiala","CountryCode":"IND","1":"IND","Population":"238368","2":"238368"},{"Name":"Shahjahanpur","0":"Shahjahanpur","CountryCode":"IND","1":"IND","Population":"237713","2":"237713"},{"Name":"Kurnool","0":"Kurnool","CountryCode":"IND","1":"IND","Population":"236800","2":"236800"},{"Name":"Tiruppur (Tirupper)","0":"Tiruppur (Tirupper)","CountryCode":"IND","1":"IND","Population":"235661","2":"235661"},{"Name":"Rohtak","0":"Rohtak","CountryCode":"IND","1":"IND","Population":"233400","2":"233400"},{"Name":"South Dum Dum","0":"South Dum Dum","CountryCode":"IND","1":"IND","Population":"232811","2":"232811"},{"Name":"Mathura","0":"Mathura","CountryCode":"IND","1":"IND","Population":"226691","2":"226691"},{"Name":"Chandrapur","0":"Chandrapur","CountryCode":"IND","1":"IND","Population":"226105","2":"226105"},{"Name":"Barahanagar (Baranagar)","0":"Barahanagar (Baranagar)","CountryCode":"IND","1":"IND","Population":"224821","2":"224821"},{"Name":"Darbhanga","0":"Darbhanga","CountryCode":"IND","1":"IND","Population":"218391","2":"218391"},{"Name":"Siliguri (Shiliguri)","0":"Siliguri (Shiliguri)","CountryCode":"IND","1":"IND","Population":"216950","2":"216950"},{"Name":"Raurkela","0":"Raurkela","CountryCode":"IND","1":"IND","Population":"215489","2":"215489"},{"Name":"Ambattur","0":"Ambattur","CountryCode":"IND","1":"IND","Population":"215424","2":"215424"},{"Name":"Panipat","0":"Panipat","CountryCode":"IND","1":"IND","Population":"215218","2":"215218"},{"Name":"Firozabad","0":"Firozabad","CountryCode":"IND","1":"IND","Population":"215128","2":"215128"},{"Name":"Ichalkaranji","0":"Ichalkaranji","CountryCode":"IND","1":"IND","Population":"214950","2":"214950"},{"Name":"Jammu","0":"Jammu","CountryCode":"IND","1":"IND","Population":"214737","2":"214737"},{"Name":"Ramagundam","0":"Ramagundam","CountryCode":"IND","1":"IND","Population":"214384","2":"214384"},{"Name":"Eluru","0":"Eluru","CountryCode":"IND","1":"IND","Population":"212866","2":"212866"},{"Name":"Brahmapur","0":"Brahmapur","CountryCode":"IND","1":"IND","Population":"210418","2":"210418"},{"Name":"Alwar","0":"Alwar","CountryCode":"IND","1":"IND","Population":"205086","2":"205086"},{"Name":"Pondicherry","0":"Pondicherry","CountryCode":"IND","1":"IND","Population":"203065","2":"203065"},{"Name":"Thanjavur","0":"Thanjavur","CountryCode":"IND","1":"IND","Population":"202013","2":"202013"},{"Name":"Bihar Sharif","0":"Bihar Sharif","CountryCode":"IND","1":"IND","Population":"201323","2":"201323"},{"Name":"Tuticorin","0":"Tuticorin","CountryCode":"IND","1":"IND","Population":"199854","2":"199854"},{"Name":"Imphal","0":"Imphal","CountryCode":"IND","1":"IND","Population":"198535","2":"198535"},{"Name":"Latur","0":"Latur","CountryCode":"IND","1":"IND","Population":"197408","2":"197408"},{"Name":"Sagar","0":"Sagar","CountryCode":"IND","1":"IND","Population":"195346","2":"195346"},{"Name":"Farrukhabad-cum-Fatehgarh","0":"Farrukhabad-cum-Fatehgarh","CountryCode":"IND","1":"IND","Population":"194567","2":"194567"},{"Name":"Sangli","0":"Sangli","CountryCode":"IND","1":"IND","Population":"193197","2":"193197"},{"Name":"Parbhani","0":"Parbhani","CountryCode":"IND","1":"IND","Population":"190255","2":"190255"},{"Name":"Nagar Coil","0":"Nagar Coil","CountryCode":"IND","1":"IND","Population":"190084","2":"190084"},{"Name":"Bijapur","0":"Bijapur","CountryCode":"IND","1":"IND","Population":"186939","2":"186939"},{"Name":"Kukatpalle","0":"Kukatpalle","CountryCode":"IND","1":"IND","Population":"185378","2":"185378"},{"Name":"Bally","0":"Bally","CountryCode":"IND","1":"IND","Population":"184474","2":"184474"},{"Name":"Bhilwara","0":"Bhilwara","CountryCode":"IND","1":"IND","Population":"183965","2":"183965"},{"Name":"Ratlam","0":"Ratlam","CountryCode":"IND","1":"IND","Population":"183375","2":"183375"},{"Name":"Avadi","0":"Avadi","CountryCode":"IND","1":"IND","Population":"183215","2":"183215"},{"Name":"Dindigul","0":"Dindigul","CountryCode":"IND","1":"IND","Population":"182477","2":"182477"},{"Name":"Ahmadnagar","0":"Ahmadnagar","CountryCode":"IND","1":"IND","Population":"181339","2":"181339"},{"Name":"Bilaspur","0":"Bilaspur","CountryCode":"IND","1":"IND","Population":"179833","2":"179833"},{"Name":"Shimoga","0":"Shimoga","CountryCode":"IND","1":"IND","Population":"179258","2":"179258"},{"Name":"Kharagpur","0":"Kharagpur","CountryCode":"IND","1":"IND","Population":"177989","2":"177989"},{"Name":"Mira Bhayandar","0":"Mira Bhayandar","CountryCode":"IND","1":"IND","Population":"175372","2":"175372"},{"Name":"Vellore","0":"Vellore","CountryCode":"IND","1":"IND","Population":"175061","2":"175061"},{"Name":"Jalna","0":"Jalna","CountryCode":"IND","1":"IND","Population":"174985","2":"174985"},{"Name":"Burnpur","0":"Burnpur","CountryCode":"IND","1":"IND","Population":"174933","2":"174933"},{"Name":"Anantapur","0":"Anantapur","CountryCode":"IND","1":"IND","Population":"174924","2":"174924"},{"Name":"Allappuzha (Alleppey)","0":"Allappuzha (Alleppey)","CountryCode":"IND","1":"IND","Population":"174666","2":"174666"},{"Name":"Tirupati","0":"Tirupati","CountryCode":"IND","1":"IND","Population":"174369","2":"174369"},{"Name":"Karnal","0":"Karnal","CountryCode":"IND","1":"IND","Population":"173751","2":"173751"},{"Name":"Burhanpur","0":"Burhanpur","CountryCode":"IND","1":"IND","Population":"172710","2":"172710"},{"Name":"Hisar (Hissar)","0":"Hisar (Hissar)","CountryCode":"IND","1":"IND","Population":"172677","2":"172677"},{"Name":"Tiruvottiyur","0":"Tiruvottiyur","CountryCode":"IND","1":"IND","Population":"172562","2":"172562"},{"Name":"Mirzapur-cum-Vindhyachal","0":"Mirzapur-cum-Vindhyachal","CountryCode":"IND","1":"IND","Population":"169336","2":"169336"},{"Name":"Secunderabad","0":"Secunderabad","CountryCode":"IND","1":"IND","Population":"167461","2":"167461"},{"Name":"Nadiad","0":"Nadiad","CountryCode":"IND","1":"IND","Population":"167051","2":"167051"},{"Name":"Dewas","0":"Dewas","CountryCode":"IND","1":"IND","Population":"164364","2":"164364"},{"Name":"Murwara (Katni)","0":"Murwara (Katni)","CountryCode":"IND","1":"IND","Population":"163431","2":"163431"},{"Name":"Ganganagar","0":"Ganganagar","CountryCode":"IND","1":"IND","Population":"161482","2":"161482"},{"Name":"Vizianagaram","0":"Vizianagaram","CountryCode":"IND","1":"IND","Population":"160359","2":"160359"},{"Name":"Erode","0":"Erode","CountryCode":"IND","1":"IND","Population":"159232","2":"159232"},{"Name":"Machilipatnam (Masulipatam)","0":"Machilipatnam (Masulipatam)","CountryCode":"IND","1":"IND","Population":"159110","2":"159110"},{"Name":"Bhatinda (Bathinda)","0":"Bhatinda (Bathinda)","CountryCode":"IND","1":"IND","Population":"159042","2":"159042"},{"Name":"Raichur","0":"Raichur","CountryCode":"IND","1":"IND","Population":"157551","2":"157551"},{"Name":"Agartala","0":"Agartala","CountryCode":"IND","1":"IND","Population":"157358","2":"157358"},{"Name":"Arrah (Ara)","0":"Arrah (Ara)","CountryCode":"IND","1":"IND","Population":"157082","2":"157082"},{"Name":"Satna","0":"Satna","CountryCode":"IND","1":"IND","Population":"156630","2":"156630"},{"Name":"Lalbahadur Nagar","0":"Lalbahadur Nagar","CountryCode":"IND","1":"IND","Population":"155500","2":"155500"},{"Name":"Aizawl","0":"Aizawl","CountryCode":"IND","1":"IND","Population":"155240","2":"155240"},{"Name":"Uluberia","0":"Uluberia","CountryCode":"IND","1":"IND","Population":"155172","2":"155172"},{"Name":"Katihar","0":"Katihar","CountryCode":"IND","1":"IND","Population":"154367","2":"154367"},{"Name":"Cuddalore","0":"Cuddalore","CountryCode":"IND","1":"IND","Population":"153086","2":"153086"},{"Name":"Hugli-Chinsurah","0":"Hugli-Chinsurah","CountryCode":"IND","1":"IND","Population":"151806","2":"151806"},{"Name":"Dhanbad","0":"Dhanbad","CountryCode":"IND","1":"IND","Population":"151789","2":"151789"},{"Name":"Raiganj","0":"Raiganj","CountryCode":"IND","1":"IND","Population":"151045","2":"151045"},{"Name":"Sambhal","0":"Sambhal","CountryCode":"IND","1":"IND","Population":"150869","2":"150869"},{"Name":"Durg","0":"Durg","CountryCode":"IND","1":"IND","Population":"150645","2":"150645"},{"Name":"Munger (Monghyr)","0":"Munger (Monghyr)","CountryCode":"IND","1":"IND","Population":"150112","2":"150112"},{"Name":"Kanchipuram","0":"Kanchipuram","CountryCode":"IND","1":"IND","Population":"150100","2":"150100"},{"Name":"North Dum Dum","0":"North Dum Dum","CountryCode":"IND","1":"IND","Population":"149965","2":"149965"},{"Name":"Karimnagar","0":"Karimnagar","CountryCode":"IND","1":"IND","Population":"148583","2":"148583"},{"Name":"Bharatpur","0":"Bharatpur","CountryCode":"IND","1":"IND","Population":"148519","2":"148519"},{"Name":"Sikar","0":"Sikar","CountryCode":"IND","1":"IND","Population":"148272","2":"148272"},{"Name":"Hardwar (Haridwar)","0":"Hardwar (Haridwar)","CountryCode":"IND","1":"IND","Population":"147305","2":"147305"},{"Name":"Dabgram","0":"Dabgram","CountryCode":"IND","1":"IND","Population":"147217","2":"147217"},{"Name":"Morena","0":"Morena","CountryCode":"IND","1":"IND","Population":"147124","2":"147124"},{"Name":"Noida","0":"Noida","CountryCode":"IND","1":"IND","Population":"146514","2":"146514"},{"Name":"Hapur","0":"Hapur","CountryCode":"IND","1":"IND","Population":"146262","2":"146262"},{"Name":"Bhusawal","0":"Bhusawal","CountryCode":"IND","1":"IND","Population":"145143","2":"145143"},{"Name":"Khandwa","0":"Khandwa","CountryCode":"IND","1":"IND","Population":"145133","2":"145133"},{"Name":"Yamuna Nagar","0":"Yamuna Nagar","CountryCode":"IND","1":"IND","Population":"144346","2":"144346"},{"Name":"Sonipat (Sonepat)","0":"Sonipat (Sonepat)","CountryCode":"IND","1":"IND","Population":"143922","2":"143922"},{"Name":"Tenali","0":"Tenali","CountryCode":"IND","1":"IND","Population":"143726","2":"143726"},{"Name":"Raurkela Civil Township","0":"Raurkela Civil Township","CountryCode":"IND","1":"IND","Population":"140408","2":"140408"},{"Name":"Kollam (Quilon)","0":"Kollam (Quilon)","CountryCode":"IND","1":"IND","Population":"139852","2":"139852"},{"Name":"Kumbakonam","0":"Kumbakonam","CountryCode":"IND","1":"IND","Population":"139483","2":"139483"},{"Name":"Ingraj Bazar (English Bazar)","0":"Ingraj Bazar (English Bazar)","CountryCode":"IND","1":"IND","Population":"139204","2":"139204"},{"Name":"Timkur","0":"Timkur","CountryCode":"IND","1":"IND","Population":"138903","2":"138903"},{"Name":"Amroha","0":"Amroha","CountryCode":"IND","1":"IND","Population":"137061","2":"137061"},{"Name":"Serampore","0":"Serampore","CountryCode":"IND","1":"IND","Population":"137028","2":"137028"},{"Name":"Chapra","0":"Chapra","CountryCode":"IND","1":"IND","Population":"136877","2":"136877"},{"Name":"Pali","0":"Pali","CountryCode":"IND","1":"IND","Population":"136842","2":"136842"},{"Name":"Maunath Bhanjan","0":"Maunath Bhanjan","CountryCode":"IND","1":"IND","Population":"136697","2":"136697"},{"Name":"Adoni","0":"Adoni","CountryCode":"IND","1":"IND","Population":"136182","2":"136182"},{"Name":"Jaunpur","0":"Jaunpur","CountryCode":"IND","1":"IND","Population":"136062","2":"136062"},{"Name":"Tirunelveli","0":"Tirunelveli","CountryCode":"IND","1":"IND","Population":"135825","2":"135825"},{"Name":"Bahraich","0":"Bahraich","CountryCode":"IND","1":"IND","Population":"135400","2":"135400"},{"Name":"Gadag Betigeri","0":"Gadag Betigeri","CountryCode":"IND","1":"IND","Population":"134051","2":"134051"},{"Name":"Proddatur","0":"Proddatur","CountryCode":"IND","1":"IND","Population":"133914","2":"133914"},{"Name":"Chittoor","0":"Chittoor","CountryCode":"IND","1":"IND","Population":"133462","2":"133462"},{"Name":"Barrackpur","0":"Barrackpur","CountryCode":"IND","1":"IND","Population":"133265","2":"133265"},{"Name":"Bharuch (Broach)","0":"Bharuch (Broach)","CountryCode":"IND","1":"IND","Population":"133102","2":"133102"},{"Name":"Naihati","0":"Naihati","CountryCode":"IND","1":"IND","Population":"132701","2":"132701"},{"Name":"Shillong","0":"Shillong","CountryCode":"IND","1":"IND","Population":"131719","2":"131719"},{"Name":"Sambalpur","0":"Sambalpur","CountryCode":"IND","1":"IND","Population":"131138","2":"131138"},{"Name":"Junagadh","0":"Junagadh","CountryCode":"IND","1":"IND","Population":"130484","2":"130484"},{"Name":"Rae Bareli","0":"Rae Bareli","CountryCode":"IND","1":"IND","Population":"129904","2":"129904"},{"Name":"Rewa","0":"Rewa","CountryCode":"IND","1":"IND","Population":"128981","2":"128981"},{"Name":"Gurgaon","0":"Gurgaon","CountryCode":"IND","1":"IND","Population":"128608","2":"128608"},{"Name":"Khammam","0":"Khammam","CountryCode":"IND","1":"IND","Population":"127992","2":"127992"},{"Name":"Bulandshahr","0":"Bulandshahr","CountryCode":"IND","1":"IND","Population":"127201","2":"127201"},{"Name":"Navsari","0":"Navsari","CountryCode":"IND","1":"IND","Population":"126089","2":"126089"},{"Name":"Malkajgiri","0":"Malkajgiri","CountryCode":"IND","1":"IND","Population":"126066","2":"126066"},{"Name":"Midnapore (Medinipur)","0":"Midnapore (Medinipur)","CountryCode":"IND","1":"IND","Population":"125498","2":"125498"},{"Name":"Miraj","0":"Miraj","CountryCode":"IND","1":"IND","Population":"125407","2":"125407"},{"Name":"Raj Nandgaon","0":"Raj Nandgaon","CountryCode":"IND","1":"IND","Population":"125371","2":"125371"},{"Name":"Alandur","0":"Alandur","CountryCode":"IND","1":"IND","Population":"125244","2":"125244"},{"Name":"Puri","0":"Puri","CountryCode":"IND","1":"IND","Population":"125199","2":"125199"},{"Name":"Navadwip","0":"Navadwip","CountryCode":"IND","1":"IND","Population":"125037","2":"125037"},{"Name":"Sirsa","0":"Sirsa","CountryCode":"IND","1":"IND","Population":"125000","2":"125000"},{"Name":"Korba","0":"Korba","CountryCode":"IND","1":"IND","Population":"124501","2":"124501"},{"Name":"Faizabad","0":"Faizabad","CountryCode":"IND","1":"IND","Population":"124437","2":"124437"},{"Name":"Etawah","0":"Etawah","CountryCode":"IND","1":"IND","Population":"124072","2":"124072"},{"Name":"Pathankot","0":"Pathankot","CountryCode":"IND","1":"IND","Population":"123930","2":"123930"},{"Name":"Gandhinagar","0":"Gandhinagar","CountryCode":"IND","1":"IND","Population":"123359","2":"123359"},{"Name":"Palghat (Palakkad)","0":"Palghat (Palakkad)","CountryCode":"IND","1":"IND","Population":"123289","2":"123289"},{"Name":"Veraval","0":"Veraval","CountryCode":"IND","1":"IND","Population":"123000","2":"123000"},{"Name":"Hoshiarpur","0":"Hoshiarpur","CountryCode":"IND","1":"IND","Population":"122705","2":"122705"},{"Name":"Ambala","0":"Ambala","CountryCode":"IND","1":"IND","Population":"122596","2":"122596"},{"Name":"Sitapur","0":"Sitapur","CountryCode":"IND","1":"IND","Population":"121842","2":"121842"},{"Name":"Bhiwani","0":"Bhiwani","CountryCode":"IND","1":"IND","Population":"121629","2":"121629"},{"Name":"Cuddapah","0":"Cuddapah","CountryCode":"IND","1":"IND","Population":"121463","2":"121463"},{"Name":"Bhimavaram","0":"Bhimavaram","CountryCode":"IND","1":"IND","Population":"121314","2":"121314"},{"Name":"Krishnanagar","0":"Krishnanagar","CountryCode":"IND","1":"IND","Population":"121110","2":"121110"},{"Name":"Chandannagar","0":"Chandannagar","CountryCode":"IND","1":"IND","Population":"120378","2":"120378"},{"Name":"Mandya","0":"Mandya","CountryCode":"IND","1":"IND","Population":"120265","2":"120265"},{"Name":"Dibrugarh","0":"Dibrugarh","CountryCode":"IND","1":"IND","Population":"120127","2":"120127"},{"Name":"Nandyal","0":"Nandyal","CountryCode":"IND","1":"IND","Population":"119813","2":"119813"},{"Name":"Balurghat","0":"Balurghat","CountryCode":"IND","1":"IND","Population":"119796","2":"119796"},{"Name":"Neyveli","0":"Neyveli","CountryCode":"IND","1":"IND","Population":"118080","2":"118080"},{"Name":"Fatehpur","0":"Fatehpur","CountryCode":"IND","1":"IND","Population":"117675","2":"117675"},{"Name":"Mahbubnagar","0":"Mahbubnagar","CountryCode":"IND","1":"IND","Population":"116833","2":"116833"},{"Name":"Budaun","0":"Budaun","CountryCode":"IND","1":"IND","Population":"116695","2":"116695"},{"Name":"Porbandar","0":"Porbandar","CountryCode":"IND","1":"IND","Population":"116671","2":"116671"},{"Name":"Silchar","0":"Silchar","CountryCode":"IND","1":"IND","Population":"115483","2":"115483"},{"Name":"Berhampore (Baharampur)","0":"Berhampore (Baharampur)","CountryCode":"IND","1":"IND","Population":"115144","2":"115144"},{"Name":"Purnea (Purnia)","0":"Purnea (Purnia)","CountryCode":"IND","1":"IND","Population":"114912","2":"114912"},{"Name":"Bankura","0":"Bankura","CountryCode":"IND","1":"IND","Population":"114876","2":"114876"},{"Name":"Rajapalaiyam","0":"Rajapalaiyam","CountryCode":"IND","1":"IND","Population":"114202","2":"114202"},{"Name":"Titagarh","0":"Titagarh","CountryCode":"IND","1":"IND","Population":"114085","2":"114085"},{"Name":"Halisahar","0":"Halisahar","CountryCode":"IND","1":"IND","Population":"114028","2":"114028"},{"Name":"Hathras","0":"Hathras","CountryCode":"IND","1":"IND","Population":"113285","2":"113285"},{"Name":"Bhir (Bid)","0":"Bhir (Bid)","CountryCode":"IND","1":"IND","Population":"112434","2":"112434"},{"Name":"Pallavaram","0":"Pallavaram","CountryCode":"IND","1":"IND","Population":"111866","2":"111866"},{"Name":"Anand","0":"Anand","CountryCode":"IND","1":"IND","Population":"110266","2":"110266"},{"Name":"Mango","0":"Mango","CountryCode":"IND","1":"IND","Population":"110024","2":"110024"},{"Name":"Santipur","0":"Santipur","CountryCode":"IND","1":"IND","Population":"109956","2":"109956"},{"Name":"Bhind","0":"Bhind","CountryCode":"IND","1":"IND","Population":"109755","2":"109755"},{"Name":"Gondiya","0":"Gondiya","CountryCode":"IND","1":"IND","Population":"109470","2":"109470"},{"Name":"Tiruvannamalai","0":"Tiruvannamalai","CountryCode":"IND","1":"IND","Population":"109196","2":"109196"},{"Name":"Yeotmal (Yavatmal)","0":"Yeotmal (Yavatmal)","CountryCode":"IND","1":"IND","Population":"108578","2":"108578"},{"Name":"Kulti-Barakar","0":"Kulti-Barakar","CountryCode":"IND","1":"IND","Population":"108518","2":"108518"},{"Name":"Moga","0":"Moga","CountryCode":"IND","1":"IND","Population":"108304","2":"108304"},{"Name":"Shivapuri","0":"Shivapuri","CountryCode":"IND","1":"IND","Population":"108277","2":"108277"},{"Name":"Bidar","0":"Bidar","CountryCode":"IND","1":"IND","Population":"108016","2":"108016"},{"Name":"Guntakal","0":"Guntakal","CountryCode":"IND","1":"IND","Population":"107592","2":"107592"},{"Name":"Unnao","0":"Unnao","CountryCode":"IND","1":"IND","Population":"107425","2":"107425"},{"Name":"Barasat","0":"Barasat","CountryCode":"IND","1":"IND","Population":"107365","2":"107365"},{"Name":"Tambaram","0":"Tambaram","CountryCode":"IND","1":"IND","Population":"107187","2":"107187"},{"Name":"Abohar","0":"Abohar","CountryCode":"IND","1":"IND","Population":"107163","2":"107163"},{"Name":"Pilibhit","0":"Pilibhit","CountryCode":"IND","1":"IND","Population":"106605","2":"106605"},{"Name":"Valparai","0":"Valparai","CountryCode":"IND","1":"IND","Population":"106523","2":"106523"},{"Name":"Gonda","0":"Gonda","CountryCode":"IND","1":"IND","Population":"106078","2":"106078"},{"Name":"Surendranagar","0":"Surendranagar","CountryCode":"IND","1":"IND","Population":"105973","2":"105973"},{"Name":"Qutubullapur","0":"Qutubullapur","CountryCode":"IND","1":"IND","Population":"105380","2":"105380"},{"Name":"Beawar","0":"Beawar","CountryCode":"IND","1":"IND","Population":"105363","2":"105363"},{"Name":"Hindupur","0":"Hindupur","CountryCode":"IND","1":"IND","Population":"104651","2":"104651"},{"Name":"Gandhidham","0":"Gandhidham","CountryCode":"IND","1":"IND","Population":"104585","2":"104585"},{"Name":"Haldwani-cum-Kathgodam","0":"Haldwani-cum-Kathgodam","CountryCode":"IND","1":"IND","Population":"104195","2":"104195"},{"Name":"Tellicherry (Thalassery)","0":"Tellicherry (Thalassery)","CountryCode":"IND","1":"IND","Population":"103579","2":"103579"},{"Name":"Wardha","0":"Wardha","CountryCode":"IND","1":"IND","Population":"102985","2":"102985"},{"Name":"Rishra","0":"Rishra","CountryCode":"IND","1":"IND","Population":"102649","2":"102649"},{"Name":"Bhuj","0":"Bhuj","CountryCode":"IND","1":"IND","Population":"102176","2":"102176"},{"Name":"Modinagar","0":"Modinagar","CountryCode":"IND","1":"IND","Population":"101660","2":"101660"},{"Name":"Gudivada","0":"Gudivada","CountryCode":"IND","1":"IND","Population":"101656","2":"101656"},{"Name":"Basirhat","0":"Basirhat","CountryCode":"IND","1":"IND","Population":"101409","2":"101409"},{"Name":"Uttarpara-Kotrung","0":"Uttarpara-Kotrung","CountryCode":"IND","1":"IND","Population":"100867","2":"100867"},{"Name":"Ongole","0":"Ongole","CountryCode":"IND","1":"IND","Population":"100836","2":"100836"},{"Name":"North Barrackpur","0":"North Barrackpur","CountryCode":"IND","1":"IND","Population":"100513","2":"100513"},{"Name":"Guna","0":"Guna","CountryCode":"IND","1":"IND","Population":"100490","2":"100490"},{"Name":"Haldia","0":"Haldia","CountryCode":"IND","1":"IND","Population":"100347","2":"100347"},{"Name":"Habra","0":"Habra","CountryCode":"IND","1":"IND","Population":"100223","2":"100223"},{"Name":"Kanchrapara","0":"Kanchrapara","CountryCode":"IND","1":"IND","Population":"100194","2":"100194"},{"Name":"Tonk","0":"Tonk","CountryCode":"IND","1":"IND","Population":"100079","2":"100079"},{"Name":"Champdani","0":"Champdani","CountryCode":"IND","1":"IND","Population":"98818","2":"98818"},{"Name":"Orai","0":"Orai","CountryCode":"IND","1":"IND","Population":"98640","2":"98640"},{"Name":"Pudukkottai","0":"Pudukkottai","CountryCode":"IND","1":"IND","Population":"98619","2":"98619"},{"Name":"Sasaram","0":"Sasaram","CountryCode":"IND","1":"IND","Population":"98220","2":"98220"},{"Name":"Hazaribag","0":"Hazaribag","CountryCode":"IND","1":"IND","Population":"97712","2":"97712"},{"Name":"Palayankottai","0":"Palayankottai","CountryCode":"IND","1":"IND","Population":"97662","2":"97662"},{"Name":"Banda","0":"Banda","CountryCode":"IND","1":"IND","Population":"97227","2":"97227"},{"Name":"Godhra","0":"Godhra","CountryCode":"IND","1":"IND","Population":"96813","2":"96813"},{"Name":"Hospet","0":"Hospet","CountryCode":"IND","1":"IND","Population":"96322","2":"96322"},{"Name":"Ashoknagar-Kalyangarh","0":"Ashoknagar-Kalyangarh","CountryCode":"IND","1":"IND","Population":"96315","2":"96315"},{"Name":"Achalpur","0":"Achalpur","CountryCode":"IND","1":"IND","Population":"96216","2":"96216"},{"Name":"Patan","0":"Patan","CountryCode":"IND","1":"IND","Population":"96109","2":"96109"},{"Name":"Mandasor","0":"Mandasor","CountryCode":"IND","1":"IND","Population":"95758","2":"95758"},{"Name":"Damoh","0":"Damoh","CountryCode":"IND","1":"IND","Population":"95661","2":"95661"},{"Name":"Satara","0":"Satara","CountryCode":"IND","1":"IND","Population":"95133","2":"95133"},{"Name":"Meerut Cantonment","0":"Meerut Cantonment","CountryCode":"IND","1":"IND","Population":"94876","2":"94876"},{"Name":"Dehri","0":"Dehri","CountryCode":"IND","1":"IND","Population":"94526","2":"94526"},{"Name":"Delhi Cantonment","0":"Delhi Cantonment","CountryCode":"IND","1":"IND","Population":"94326","2":"94326"},{"Name":"Chhindwara","0":"Chhindwara","CountryCode":"IND","1":"IND","Population":"93731","2":"93731"},{"Name":"Bansberia","0":"Bansberia","CountryCode":"IND","1":"IND","Population":"93447","2":"93447"},{"Name":"Nagaon","0":"Nagaon","CountryCode":"IND","1":"IND","Population":"93350","2":"93350"},{"Name":"Kanpur Cantonment","0":"Kanpur Cantonment","CountryCode":"IND","1":"IND","Population":"93109","2":"93109"},{"Name":"Vidisha","0":"Vidisha","CountryCode":"IND","1":"IND","Population":"92917","2":"92917"},{"Name":"Bettiah","0":"Bettiah","CountryCode":"IND","1":"IND","Population":"92583","2":"92583"},{"Name":"Purulia","0":"Purulia","CountryCode":"IND","1":"IND","Population":"92574","2":"92574"},{"Name":"Hassan","0":"Hassan","CountryCode":"IND","1":"IND","Population":"90803","2":"90803"},{"Name":"Ambala Sadar","0":"Ambala Sadar","CountryCode":"IND","1":"IND","Population":"90712","2":"90712"},{"Name":"Baidyabati","0":"Baidyabati","CountryCode":"IND","1":"IND","Population":"90601","2":"90601"},{"Name":"Morvi","0":"Morvi","CountryCode":"IND","1":"IND","Population":"90357","2":"90357"},{"Name":"Raigarh","0":"Raigarh","CountryCode":"IND","1":"IND","Population":"89166","2":"89166"},{"Name":"Vejalpur","0":"Vejalpur","CountryCode":"IND","1":"IND","Population":"89053","2":"89053"},{"Name":"Baghdad","0":"Baghdad","CountryCode":"IRQ","1":"IRQ","Population":"4336000","2":"4336000"},{"Name":"Mosul","0":"Mosul","CountryCode":"IRQ","1":"IRQ","Population":"879000","2":"879000"},{"Name":"Irbil","0":"Irbil","CountryCode":"IRQ","1":"IRQ","Population":"485968","2":"485968"},{"Name":"Kirkuk","0":"Kirkuk","CountryCode":"IRQ","1":"IRQ","Population":"418624","2":"418624"},{"Name":"Basra","0":"Basra","CountryCode":"IRQ","1":"IRQ","Population":"406296","2":"406296"},{"Name":"al-Sulaymaniya","0":"al-Sulaymaniya","CountryCode":"IRQ","1":"IRQ","Population":"364096","2":"364096"},{"Name":"al-Najaf","0":"al-Najaf","CountryCode":"IRQ","1":"IRQ","Population":"309010","2":"309010"},{"Name":"Karbala","0":"Karbala","CountryCode":"IRQ","1":"IRQ","Population":"296705","2":"296705"},{"Name":"al-Hilla","0":"al-Hilla","CountryCode":"IRQ","1":"IRQ","Population":"268834","2":"268834"},{"Name":"al-Nasiriya","0":"al-Nasiriya","CountryCode":"IRQ","1":"IRQ","Population":"265937","2":"265937"},{"Name":"al-Amara","0":"al-Amara","CountryCode":"IRQ","1":"IRQ","Population":"208797","2":"208797"},{"Name":"al-Diwaniya","0":"al-Diwaniya","CountryCode":"IRQ","1":"IRQ","Population":"196519","2":"196519"},{"Name":"al-Ramadi","0":"al-Ramadi","CountryCode":"IRQ","1":"IRQ","Population":"192556","2":"192556"},{"Name":"al-Kut","0":"al-Kut","CountryCode":"IRQ","1":"IRQ","Population":"183183","2":"183183"},{"Name":"Baquba","0":"Baquba","CountryCode":"IRQ","1":"IRQ","Population":"114516","2":"114516"},{"Name":"Teheran","0":"Teheran","CountryCode":"IRN","1":"IRN","Population":"6758845","2":"6758845"},{"Name":"Mashhad","0":"Mashhad","CountryCode":"IRN","1":"IRN","Population":"1887405","2":"1887405"},{"Name":"Esfahan","0":"Esfahan","CountryCode":"IRN","1":"IRN","Population":"1266072","2":"1266072"},{"Name":"Tabriz","0":"Tabriz","CountryCode":"IRN","1":"IRN","Population":"1191043","2":"1191043"},{"Name":"Shiraz","0":"Shiraz","CountryCode":"IRN","1":"IRN","Population":"1053025","2":"1053025"},{"Name":"Karaj","0":"Karaj","CountryCode":"IRN","1":"IRN","Population":"940968","2":"940968"},{"Name":"Ahvaz","0":"Ahvaz","CountryCode":"IRN","1":"IRN","Population":"804980","2":"804980"},{"Name":"Qom","0":"Qom","CountryCode":"IRN","1":"IRN","Population":"777677","2":"777677"},{"Name":"Kermanshah","0":"Kermanshah","CountryCode":"IRN","1":"IRN","Population":"692986","2":"692986"},{"Name":"Urmia","0":"Urmia","CountryCode":"IRN","1":"IRN","Population":"435200","2":"435200"},{"Name":"Zahedan","0":"Zahedan","CountryCode":"IRN","1":"IRN","Population":"419518","2":"419518"},{"Name":"Rasht","0":"Rasht","CountryCode":"IRN","1":"IRN","Population":"417748","2":"417748"},{"Name":"Hamadan","0":"Hamadan","CountryCode":"IRN","1":"IRN","Population":"401281","2":"401281"},{"Name":"Kerman","0":"Kerman","CountryCode":"IRN","1":"IRN","Population":"384991","2":"384991"},{"Name":"Arak","0":"Arak","CountryCode":"IRN","1":"IRN","Population":"380755","2":"380755"},{"Name":"Ardebil","0":"Ardebil","CountryCode":"IRN","1":"IRN","Population":"340386","2":"340386"},{"Name":"Yazd","0":"Yazd","CountryCode":"IRN","1":"IRN","Population":"326776","2":"326776"},{"Name":"Qazvin","0":"Qazvin","CountryCode":"IRN","1":"IRN","Population":"291117","2":"291117"},{"Name":"Zanjan","0":"Zanjan","CountryCode":"IRN","1":"IRN","Population":"286295","2":"286295"},{"Name":"Sanandaj","0":"Sanandaj","CountryCode":"IRN","1":"IRN","Population":"277808","2":"277808"},{"Name":"Bandar-e-Abbas","0":"Bandar-e-Abbas","CountryCode":"IRN","1":"IRN","Population":"273578","2":"273578"},{"Name":"Khorramabad","0":"Khorramabad","CountryCode":"IRN","1":"IRN","Population":"272815","2":"272815"},{"Name":"Eslamshahr","0":"Eslamshahr","CountryCode":"IRN","1":"IRN","Population":"265450","2":"265450"},{"Name":"Borujerd","0":"Borujerd","CountryCode":"IRN","1":"IRN","Population":"217804","2":"217804"},{"Name":"Abadan","0":"Abadan","CountryCode":"IRN","1":"IRN","Population":"206073","2":"206073"},{"Name":"Dezful","0":"Dezful","CountryCode":"IRN","1":"IRN","Population":"202639","2":"202639"},{"Name":"Kashan","0":"Kashan","CountryCode":"IRN","1":"IRN","Population":"201372","2":"201372"},{"Name":"Sari","0":"Sari","CountryCode":"IRN","1":"IRN","Population":"195882","2":"195882"},{"Name":"Gorgan","0":"Gorgan","CountryCode":"IRN","1":"IRN","Population":"188710","2":"188710"},{"Name":"Najafabad","0":"Najafabad","CountryCode":"IRN","1":"IRN","Population":"178498","2":"178498"},{"Name":"Sabzevar","0":"Sabzevar","CountryCode":"IRN","1":"IRN","Population":"170738","2":"170738"},{"Name":"Khomeynishahr","0":"Khomeynishahr","CountryCode":"IRN","1":"IRN","Population":"165888","2":"165888"},{"Name":"Amol","0":"Amol","CountryCode":"IRN","1":"IRN","Population":"159092","2":"159092"},{"Name":"Neyshabur","0":"Neyshabur","CountryCode":"IRN","1":"IRN","Population":"158847","2":"158847"},{"Name":"Babol","0":"Babol","CountryCode":"IRN","1":"IRN","Population":"158346","2":"158346"},{"Name":"Khoy","0":"Khoy","CountryCode":"IRN","1":"IRN","Population":"148944","2":"148944"},{"Name":"Malayer","0":"Malayer","CountryCode":"IRN","1":"IRN","Population":"144373","2":"144373"},{"Name":"Bushehr","0":"Bushehr","CountryCode":"IRN","1":"IRN","Population":"143641","2":"143641"},{"Name":"Qaemshahr","0":"Qaemshahr","CountryCode":"IRN","1":"IRN","Population":"143286","2":"143286"},{"Name":"Qarchak","0":"Qarchak","CountryCode":"IRN","1":"IRN","Population":"142690","2":"142690"},{"Name":"Qods","0":"Qods","CountryCode":"IRN","1":"IRN","Population":"138278","2":"138278"},{"Name":"Sirjan","0":"Sirjan","CountryCode":"IRN","1":"IRN","Population":"135024","2":"135024"},{"Name":"Bojnurd","0":"Bojnurd","CountryCode":"IRN","1":"IRN","Population":"134835","2":"134835"},{"Name":"Maragheh","0":"Maragheh","CountryCode":"IRN","1":"IRN","Population":"132318","2":"132318"},{"Name":"Birjand","0":"Birjand","CountryCode":"IRN","1":"IRN","Population":"127608","2":"127608"},{"Name":"Ilam","0":"Ilam","CountryCode":"IRN","1":"IRN","Population":"126346","2":"126346"},{"Name":"Bukan","0":"Bukan","CountryCode":"IRN","1":"IRN","Population":"120020","2":"120020"},{"Name":"Masjed-e-Soleyman","0":"Masjed-e-Soleyman","CountryCode":"IRN","1":"IRN","Population":"116883","2":"116883"},{"Name":"Saqqez","0":"Saqqez","CountryCode":"IRN","1":"IRN","Population":"115394","2":"115394"},{"Name":"Gonbad-e Qabus","0":"Gonbad-e Qabus","CountryCode":"IRN","1":"IRN","Population":"111253","2":"111253"},{"Name":"Saveh","0":"Saveh","CountryCode":"IRN","1":"IRN","Population":"111245","2":"111245"},{"Name":"Mahabad","0":"Mahabad","CountryCode":"IRN","1":"IRN","Population":"107799","2":"107799"},{"Name":"Varamin","0":"Varamin","CountryCode":"IRN","1":"IRN","Population":"107233","2":"107233"},{"Name":"Andimeshk","0":"Andimeshk","CountryCode":"IRN","1":"IRN","Population":"106923","2":"106923"},{"Name":"Khorramshahr","0":"Khorramshahr","CountryCode":"IRN","1":"IRN","Population":"105636","2":"105636"},{"Name":"Shahrud","0":"Shahrud","CountryCode":"IRN","1":"IRN","Population":"104765","2":"104765"},{"Name":"Marv Dasht","0":"Marv Dasht","CountryCode":"IRN","1":"IRN","Population":"103579","2":"103579"},{"Name":"Zabol","0":"Zabol","CountryCode":"IRN","1":"IRN","Population":"100887","2":"100887"},{"Name":"Shahr-e Kord","0":"Shahr-e Kord","CountryCode":"IRN","1":"IRN","Population":"100477","2":"100477"},{"Name":"Bandar-e Anzali","0":"Bandar-e Anzali","CountryCode":"IRN","1":"IRN","Population":"98500","2":"98500"},{"Name":"Rafsanjan","0":"Rafsanjan","CountryCode":"IRN","1":"IRN","Population":"98300","2":"98300"},{"Name":"Marand","0":"Marand","CountryCode":"IRN","1":"IRN","Population":"96400","2":"96400"},{"Name":"Torbat-e Heydariyeh","0":"Torbat-e Heydariyeh","CountryCode":"IRN","1":"IRN","Population":"94600","2":"94600"},{"Name":"Jahrom","0":"Jahrom","CountryCode":"IRN","1":"IRN","Population":"94200","2":"94200"},{"Name":"Semnan","0":"Semnan","CountryCode":"IRN","1":"IRN","Population":"91045","2":"91045"},{"Name":"Miandoab","0":"Miandoab","CountryCode":"IRN","1":"IRN","Population":"90100","2":"90100"},{"Name":"Qomsheh","0":"Qomsheh","CountryCode":"IRN","1":"IRN","Population":"89800","2":"89800"},{"Name":"Dublin","0":"Dublin","CountryCode":"IRL","1":"IRL","Population":"481854","2":"481854"},{"Name":"Cork","0":"Cork","CountryCode":"IRL","1":"IRL","Population":"127187","2":"127187"},{"Name":"Reykjav\u00edk","0":"Reykjav\u00edk","CountryCode":"ISL","1":"ISL","Population":"109184","2":"109184"},{"Name":"Jerusalem","0":"Jerusalem","CountryCode":"ISR","1":"ISR","Population":"633700","2":"633700"},{"Name":"Tel Aviv-Jaffa","0":"Tel Aviv-Jaffa","CountryCode":"ISR","1":"ISR","Population":"348100","2":"348100"},{"Name":"Haifa","0":"Haifa","CountryCode":"ISR","1":"ISR","Population":"265700","2":"265700"},{"Name":"Rishon Le Ziyyon","0":"Rishon Le Ziyyon","CountryCode":"ISR","1":"ISR","Population":"188200","2":"188200"},{"Name":"Beerseba","0":"Beerseba","CountryCode":"ISR","1":"ISR","Population":"163700","2":"163700"},{"Name":"Holon","0":"Holon","CountryCode":"ISR","1":"ISR","Population":"163100","2":"163100"},{"Name":"Petah Tiqwa","0":"Petah Tiqwa","CountryCode":"ISR","1":"ISR","Population":"159400","2":"159400"},{"Name":"Ashdod","0":"Ashdod","CountryCode":"ISR","1":"ISR","Population":"155800","2":"155800"},{"Name":"Netanya","0":"Netanya","CountryCode":"ISR","1":"ISR","Population":"154900","2":"154900"},{"Name":"Bat Yam","0":"Bat Yam","CountryCode":"ISR","1":"ISR","Population":"137000","2":"137000"},{"Name":"Bene Beraq","0":"Bene Beraq","CountryCode":"ISR","1":"ISR","Population":"133900","2":"133900"},{"Name":"Ramat Gan","0":"Ramat Gan","CountryCode":"ISR","1":"ISR","Population":"126900","2":"126900"},{"Name":"Ashqelon","0":"Ashqelon","CountryCode":"ISR","1":"ISR","Population":"92300","2":"92300"},{"Name":"Rehovot","0":"Rehovot","CountryCode":"ISR","1":"ISR","Population":"90300","2":"90300"},{"Name":"Roma","0":"Roma","CountryCode":"ITA","1":"ITA","Population":"2643581","2":"2643581"},{"Name":"Milano","0":"Milano","CountryCode":"ITA","1":"ITA","Population":"1300977","2":"1300977"},{"Name":"Napoli","0":"Napoli","CountryCode":"ITA","1":"ITA","Population":"1002619","2":"1002619"},{"Name":"Torino","0":"Torino","CountryCode":"ITA","1":"ITA","Population":"903705","2":"903705"},{"Name":"Palermo","0":"Palermo","CountryCode":"ITA","1":"ITA","Population":"683794","2":"683794"},{"Name":"Genova","0":"Genova","CountryCode":"ITA","1":"ITA","Population":"636104","2":"636104"},{"Name":"Bologna","0":"Bologna","CountryCode":"ITA","1":"ITA","Population":"381161","2":"381161"},{"Name":"Firenze","0":"Firenze","CountryCode":"ITA","1":"ITA","Population":"376662","2":"376662"},{"Name":"Catania","0":"Catania","CountryCode":"ITA","1":"ITA","Population":"337862","2":"337862"},{"Name":"Bari","0":"Bari","CountryCode":"ITA","1":"ITA","Population":"331848","2":"331848"},{"Name":"Venezia","0":"Venezia","CountryCode":"ITA","1":"ITA","Population":"277305","2":"277305"},{"Name":"Messina","0":"Messina","CountryCode":"ITA","1":"ITA","Population":"259156","2":"259156"},{"Name":"Verona","0":"Verona","CountryCode":"ITA","1":"ITA","Population":"255268","2":"255268"},{"Name":"Trieste","0":"Trieste","CountryCode":"ITA","1":"ITA","Population":"216459","2":"216459"},{"Name":"Padova","0":"Padova","CountryCode":"ITA","1":"ITA","Population":"211391","2":"211391"},{"Name":"Taranto","0":"Taranto","CountryCode":"ITA","1":"ITA","Population":"208214","2":"208214"},{"Name":"Brescia","0":"Brescia","CountryCode":"ITA","1":"ITA","Population":"191317","2":"191317"},{"Name":"Reggio di Calabria","0":"Reggio di Calabria","CountryCode":"ITA","1":"ITA","Population":"179617","2":"179617"},{"Name":"Modena","0":"Modena","CountryCode":"ITA","1":"ITA","Population":"176022","2":"176022"},{"Name":"Prato","0":"Prato","CountryCode":"ITA","1":"ITA","Population":"172473","2":"172473"},{"Name":"Parma","0":"Parma","CountryCode":"ITA","1":"ITA","Population":"168717","2":"168717"},{"Name":"Cagliari","0":"Cagliari","CountryCode":"ITA","1":"ITA","Population":"165926","2":"165926"},{"Name":"Livorno","0":"Livorno","CountryCode":"ITA","1":"ITA","Population":"161673","2":"161673"},{"Name":"Perugia","0":"Perugia","CountryCode":"ITA","1":"ITA","Population":"156673","2":"156673"},{"Name":"Foggia","0":"Foggia","CountryCode":"ITA","1":"ITA","Population":"154891","2":"154891"},{"Name":"Reggio nell\u00b4 Emilia","0":"Reggio nell\u00b4 Emilia","CountryCode":"ITA","1":"ITA","Population":"143664","2":"143664"},{"Name":"Salerno","0":"Salerno","CountryCode":"ITA","1":"ITA","Population":"142055","2":"142055"},{"Name":"Ravenna","0":"Ravenna","CountryCode":"ITA","1":"ITA","Population":"138418","2":"138418"},{"Name":"Ferrara","0":"Ferrara","CountryCode":"ITA","1":"ITA","Population":"132127","2":"132127"},{"Name":"Rimini","0":"Rimini","CountryCode":"ITA","1":"ITA","Population":"131062","2":"131062"},{"Name":"Syrakusa","0":"Syrakusa","CountryCode":"ITA","1":"ITA","Population":"126282","2":"126282"},{"Name":"Sassari","0":"Sassari","CountryCode":"ITA","1":"ITA","Population":"120803","2":"120803"},{"Name":"Monza","0":"Monza","CountryCode":"ITA","1":"ITA","Population":"119516","2":"119516"},{"Name":"Bergamo","0":"Bergamo","CountryCode":"ITA","1":"ITA","Population":"117837","2":"117837"},{"Name":"Pescara","0":"Pescara","CountryCode":"ITA","1":"ITA","Population":"115698","2":"115698"},{"Name":"Latina","0":"Latina","CountryCode":"ITA","1":"ITA","Population":"114099","2":"114099"},{"Name":"Vicenza","0":"Vicenza","CountryCode":"ITA","1":"ITA","Population":"109738","2":"109738"},{"Name":"Terni","0":"Terni","CountryCode":"ITA","1":"ITA","Population":"107770","2":"107770"},{"Name":"Forl\u00ec","0":"Forl\u00ec","CountryCode":"ITA","1":"ITA","Population":"107475","2":"107475"},{"Name":"Trento","0":"Trento","CountryCode":"ITA","1":"ITA","Population":"104906","2":"104906"},{"Name":"Novara","0":"Novara","CountryCode":"ITA","1":"ITA","Population":"102037","2":"102037"},{"Name":"Piacenza","0":"Piacenza","CountryCode":"ITA","1":"ITA","Population":"98384","2":"98384"},{"Name":"Ancona","0":"Ancona","CountryCode":"ITA","1":"ITA","Population":"98329","2":"98329"},{"Name":"Lecce","0":"Lecce","CountryCode":"ITA","1":"ITA","Population":"98208","2":"98208"},{"Name":"Bolzano","0":"Bolzano","CountryCode":"ITA","1":"ITA","Population":"97232","2":"97232"},{"Name":"Catanzaro","0":"Catanzaro","CountryCode":"ITA","1":"ITA","Population":"96700","2":"96700"},{"Name":"La Spezia","0":"La Spezia","CountryCode":"ITA","1":"ITA","Population":"95504","2":"95504"},{"Name":"Udine","0":"Udine","CountryCode":"ITA","1":"ITA","Population":"94932","2":"94932"},{"Name":"Torre del Greco","0":"Torre del Greco","CountryCode":"ITA","1":"ITA","Population":"94505","2":"94505"},{"Name":"Andria","0":"Andria","CountryCode":"ITA","1":"ITA","Population":"94443","2":"94443"},{"Name":"Brindisi","0":"Brindisi","CountryCode":"ITA","1":"ITA","Population":"93454","2":"93454"},{"Name":"Giugliano in Campania","0":"Giugliano in Campania","CountryCode":"ITA","1":"ITA","Population":"93286","2":"93286"},{"Name":"Pisa","0":"Pisa","CountryCode":"ITA","1":"ITA","Population":"92379","2":"92379"},{"Name":"Barletta","0":"Barletta","CountryCode":"ITA","1":"ITA","Population":"91904","2":"91904"},{"Name":"Arezzo","0":"Arezzo","CountryCode":"ITA","1":"ITA","Population":"91729","2":"91729"},{"Name":"Alessandria","0":"Alessandria","CountryCode":"ITA","1":"ITA","Population":"90289","2":"90289"},{"Name":"Cesena","0":"Cesena","CountryCode":"ITA","1":"ITA","Population":"89852","2":"89852"},{"Name":"Pesaro","0":"Pesaro","CountryCode":"ITA","1":"ITA","Population":"88987","2":"88987"},{"Name":"Dili","0":"Dili","CountryCode":"TMP","1":"TMP","Population":"47900","2":"47900"},{"Name":"Wien","0":"Wien","CountryCode":"AUT","1":"AUT","Population":"1608144","2":"1608144"},{"Name":"Graz","0":"Graz","CountryCode":"AUT","1":"AUT","Population":"240967","2":"240967"},{"Name":"Linz","0":"Linz","CountryCode":"AUT","1":"AUT","Population":"188022","2":"188022"},{"Name":"Salzburg","0":"Salzburg","CountryCode":"AUT","1":"AUT","Population":"144247","2":"144247"},{"Name":"Innsbruck","0":"Innsbruck","CountryCode":"AUT","1":"AUT","Population":"111752","2":"111752"},{"Name":"Klagenfurt","0":"Klagenfurt","CountryCode":"AUT","1":"AUT","Population":"91141","2":"91141"},{"Name":"Spanish Town","0":"Spanish Town","CountryCode":"JAM","1":"JAM","Population":"110379","2":"110379"},{"Name":"Kingston","0":"Kingston","CountryCode":"JAM","1":"JAM","Population":"103962","2":"103962"},{"Name":"Portmore","0":"Portmore","CountryCode":"JAM","1":"JAM","Population":"99799","2":"99799"},{"Name":"Tokyo","0":"Tokyo","CountryCode":"JPN","1":"JPN","Population":"7980230","2":"7980230"},{"Name":"Jokohama [Yokohama]","0":"Jokohama [Yokohama]","CountryCode":"JPN","1":"JPN","Population":"3339594","2":"3339594"},{"Name":"Osaka","0":"Osaka","CountryCode":"JPN","1":"JPN","Population":"2595674","2":"2595674"},{"Name":"Nagoya","0":"Nagoya","CountryCode":"JPN","1":"JPN","Population":"2154376","2":"2154376"},{"Name":"Sapporo","0":"Sapporo","CountryCode":"JPN","1":"JPN","Population":"1790886","2":"1790886"},{"Name":"Kioto","0":"Kioto","CountryCode":"JPN","1":"JPN","Population":"1461974","2":"1461974"},{"Name":"Kobe","0":"Kobe","CountryCode":"JPN","1":"JPN","Population":"1425139","2":"1425139"},{"Name":"Fukuoka","0":"Fukuoka","CountryCode":"JPN","1":"JPN","Population":"1308379","2":"1308379"},{"Name":"Kawasaki","0":"Kawasaki","CountryCode":"JPN","1":"JPN","Population":"1217359","2":"1217359"},{"Name":"Hiroshima","0":"Hiroshima","CountryCode":"JPN","1":"JPN","Population":"1119117","2":"1119117"},{"Name":"Kitakyushu","0":"Kitakyushu","CountryCode":"JPN","1":"JPN","Population":"1016264","2":"1016264"},{"Name":"Sendai","0":"Sendai","CountryCode":"JPN","1":"JPN","Population":"989975","2":"989975"},{"Name":"Chiba","0":"Chiba","CountryCode":"JPN","1":"JPN","Population":"863930","2":"863930"},{"Name":"Sakai","0":"Sakai","CountryCode":"JPN","1":"JPN","Population":"797735","2":"797735"},{"Name":"Kumamoto","0":"Kumamoto","CountryCode":"JPN","1":"JPN","Population":"656734","2":"656734"},{"Name":"Okayama","0":"Okayama","CountryCode":"JPN","1":"JPN","Population":"624269","2":"624269"},{"Name":"Sagamihara","0":"Sagamihara","CountryCode":"JPN","1":"JPN","Population":"586300","2":"586300"},{"Name":"Hamamatsu","0":"Hamamatsu","CountryCode":"JPN","1":"JPN","Population":"568796","2":"568796"},{"Name":"Kagoshima","0":"Kagoshima","CountryCode":"JPN","1":"JPN","Population":"549977","2":"549977"},{"Name":"Funabashi","0":"Funabashi","CountryCode":"JPN","1":"JPN","Population":"545299","2":"545299"},{"Name":"Higashiosaka","0":"Higashiosaka","CountryCode":"JPN","1":"JPN","Population":"517785","2":"517785"},{"Name":"Hachioji","0":"Hachioji","CountryCode":"JPN","1":"JPN","Population":"513451","2":"513451"},{"Name":"Niigata","0":"Niigata","CountryCode":"JPN","1":"JPN","Population":"497464","2":"497464"},{"Name":"Amagasaki","0":"Amagasaki","CountryCode":"JPN","1":"JPN","Population":"481434","2":"481434"},{"Name":"Himeji","0":"Himeji","CountryCode":"JPN","1":"JPN","Population":"475167","2":"475167"},{"Name":"Shizuoka","0":"Shizuoka","CountryCode":"JPN","1":"JPN","Population":"473854","2":"473854"},{"Name":"Urawa","0":"Urawa","CountryCode":"JPN","1":"JPN","Population":"469675","2":"469675"},{"Name":"Matsuyama","0":"Matsuyama","CountryCode":"JPN","1":"JPN","Population":"466133","2":"466133"},{"Name":"Matsudo","0":"Matsudo","CountryCode":"JPN","1":"JPN","Population":"461126","2":"461126"},{"Name":"Kanazawa","0":"Kanazawa","CountryCode":"JPN","1":"JPN","Population":"455386","2":"455386"},{"Name":"Kawaguchi","0":"Kawaguchi","CountryCode":"JPN","1":"JPN","Population":"452155","2":"452155"},{"Name":"Ichikawa","0":"Ichikawa","CountryCode":"JPN","1":"JPN","Population":"441893","2":"441893"},{"Name":"Omiya","0":"Omiya","CountryCode":"JPN","1":"JPN","Population":"441649","2":"441649"},{"Name":"Utsunomiya","0":"Utsunomiya","CountryCode":"JPN","1":"JPN","Population":"440353","2":"440353"},{"Name":"Oita","0":"Oita","CountryCode":"JPN","1":"JPN","Population":"433401","2":"433401"},{"Name":"Nagasaki","0":"Nagasaki","CountryCode":"JPN","1":"JPN","Population":"432759","2":"432759"},{"Name":"Yokosuka","0":"Yokosuka","CountryCode":"JPN","1":"JPN","Population":"430200","2":"430200"},{"Name":"Kurashiki","0":"Kurashiki","CountryCode":"JPN","1":"JPN","Population":"425103","2":"425103"},{"Name":"Gifu","0":"Gifu","CountryCode":"JPN","1":"JPN","Population":"408007","2":"408007"},{"Name":"Hirakata","0":"Hirakata","CountryCode":"JPN","1":"JPN","Population":"403151","2":"403151"},{"Name":"Nishinomiya","0":"Nishinomiya","CountryCode":"JPN","1":"JPN","Population":"397618","2":"397618"},{"Name":"Toyonaka","0":"Toyonaka","CountryCode":"JPN","1":"JPN","Population":"396689","2":"396689"},{"Name":"Wakayama","0":"Wakayama","CountryCode":"JPN","1":"JPN","Population":"391233","2":"391233"},{"Name":"Fukuyama","0":"Fukuyama","CountryCode":"JPN","1":"JPN","Population":"376921","2":"376921"},{"Name":"Fujisawa","0":"Fujisawa","CountryCode":"JPN","1":"JPN","Population":"372840","2":"372840"},{"Name":"Asahikawa","0":"Asahikawa","CountryCode":"JPN","1":"JPN","Population":"364813","2":"364813"},{"Name":"Machida","0":"Machida","CountryCode":"JPN","1":"JPN","Population":"364197","2":"364197"},{"Name":"Nara","0":"Nara","CountryCode":"JPN","1":"JPN","Population":"362812","2":"362812"},{"Name":"Takatsuki","0":"Takatsuki","CountryCode":"JPN","1":"JPN","Population":"361747","2":"361747"},{"Name":"Iwaki","0":"Iwaki","CountryCode":"JPN","1":"JPN","Population":"361737","2":"361737"},{"Name":"Nagano","0":"Nagano","CountryCode":"JPN","1":"JPN","Population":"361391","2":"361391"},{"Name":"Toyohashi","0":"Toyohashi","CountryCode":"JPN","1":"JPN","Population":"360066","2":"360066"},{"Name":"Toyota","0":"Toyota","CountryCode":"JPN","1":"JPN","Population":"346090","2":"346090"},{"Name":"Suita","0":"Suita","CountryCode":"JPN","1":"JPN","Population":"345750","2":"345750"},{"Name":"Takamatsu","0":"Takamatsu","CountryCode":"JPN","1":"JPN","Population":"332471","2":"332471"},{"Name":"Koriyama","0":"Koriyama","CountryCode":"JPN","1":"JPN","Population":"330335","2":"330335"},{"Name":"Okazaki","0":"Okazaki","CountryCode":"JPN","1":"JPN","Population":"328711","2":"328711"},{"Name":"Kawagoe","0":"Kawagoe","CountryCode":"JPN","1":"JPN","Population":"327211","2":"327211"},{"Name":"Tokorozawa","0":"Tokorozawa","CountryCode":"JPN","1":"JPN","Population":"325809","2":"325809"},{"Name":"Toyama","0":"Toyama","CountryCode":"JPN","1":"JPN","Population":"325790","2":"325790"},{"Name":"Kochi","0":"Kochi","CountryCode":"JPN","1":"JPN","Population":"324710","2":"324710"},{"Name":"Kashiwa","0":"Kashiwa","CountryCode":"JPN","1":"JPN","Population":"320296","2":"320296"},{"Name":"Akita","0":"Akita","CountryCode":"JPN","1":"JPN","Population":"314440","2":"314440"},{"Name":"Miyazaki","0":"Miyazaki","CountryCode":"JPN","1":"JPN","Population":"303784","2":"303784"},{"Name":"Koshigaya","0":"Koshigaya","CountryCode":"JPN","1":"JPN","Population":"301446","2":"301446"},{"Name":"Naha","0":"Naha","CountryCode":"JPN","1":"JPN","Population":"299851","2":"299851"},{"Name":"Aomori","0":"Aomori","CountryCode":"JPN","1":"JPN","Population":"295969","2":"295969"},{"Name":"Hakodate","0":"Hakodate","CountryCode":"JPN","1":"JPN","Population":"294788","2":"294788"},{"Name":"Akashi","0":"Akashi","CountryCode":"JPN","1":"JPN","Population":"292253","2":"292253"},{"Name":"Yokkaichi","0":"Yokkaichi","CountryCode":"JPN","1":"JPN","Population":"288173","2":"288173"},{"Name":"Fukushima","0":"Fukushima","CountryCode":"JPN","1":"JPN","Population":"287525","2":"287525"},{"Name":"Morioka","0":"Morioka","CountryCode":"JPN","1":"JPN","Population":"287353","2":"287353"},{"Name":"Maebashi","0":"Maebashi","CountryCode":"JPN","1":"JPN","Population":"284473","2":"284473"},{"Name":"Kasugai","0":"Kasugai","CountryCode":"JPN","1":"JPN","Population":"282348","2":"282348"},{"Name":"Otsu","0":"Otsu","CountryCode":"JPN","1":"JPN","Population":"282070","2":"282070"},{"Name":"Ichihara","0":"Ichihara","CountryCode":"JPN","1":"JPN","Population":"279280","2":"279280"},{"Name":"Yao","0":"Yao","CountryCode":"JPN","1":"JPN","Population":"276421","2":"276421"},{"Name":"Ichinomiya","0":"Ichinomiya","CountryCode":"JPN","1":"JPN","Population":"270828","2":"270828"},{"Name":"Tokushima","0":"Tokushima","CountryCode":"JPN","1":"JPN","Population":"269649","2":"269649"},{"Name":"Kakogawa","0":"Kakogawa","CountryCode":"JPN","1":"JPN","Population":"266281","2":"266281"},{"Name":"Ibaraki","0":"Ibaraki","CountryCode":"JPN","1":"JPN","Population":"261020","2":"261020"},{"Name":"Neyagawa","0":"Neyagawa","CountryCode":"JPN","1":"JPN","Population":"257315","2":"257315"},{"Name":"Shimonoseki","0":"Shimonoseki","CountryCode":"JPN","1":"JPN","Population":"257263","2":"257263"},{"Name":"Yamagata","0":"Yamagata","CountryCode":"JPN","1":"JPN","Population":"255617","2":"255617"},{"Name":"Fukui","0":"Fukui","CountryCode":"JPN","1":"JPN","Population":"254818","2":"254818"},{"Name":"Hiratsuka","0":"Hiratsuka","CountryCode":"JPN","1":"JPN","Population":"254207","2":"254207"},{"Name":"Mito","0":"Mito","CountryCode":"JPN","1":"JPN","Population":"246559","2":"246559"},{"Name":"Sasebo","0":"Sasebo","CountryCode":"JPN","1":"JPN","Population":"244240","2":"244240"},{"Name":"Hachinohe","0":"Hachinohe","CountryCode":"JPN","1":"JPN","Population":"242979","2":"242979"},{"Name":"Takasaki","0":"Takasaki","CountryCode":"JPN","1":"JPN","Population":"239124","2":"239124"},{"Name":"Shimizu","0":"Shimizu","CountryCode":"JPN","1":"JPN","Population":"239123","2":"239123"},{"Name":"Kurume","0":"Kurume","CountryCode":"JPN","1":"JPN","Population":"235611","2":"235611"},{"Name":"Fuji","0":"Fuji","CountryCode":"JPN","1":"JPN","Population":"231527","2":"231527"},{"Name":"Soka","0":"Soka","CountryCode":"JPN","1":"JPN","Population":"222768","2":"222768"},{"Name":"Fuchu","0":"Fuchu","CountryCode":"JPN","1":"JPN","Population":"220576","2":"220576"},{"Name":"Chigasaki","0":"Chigasaki","CountryCode":"JPN","1":"JPN","Population":"216015","2":"216015"},{"Name":"Atsugi","0":"Atsugi","CountryCode":"JPN","1":"JPN","Population":"212407","2":"212407"},{"Name":"Numazu","0":"Numazu","CountryCode":"JPN","1":"JPN","Population":"211382","2":"211382"},{"Name":"Ageo","0":"Ageo","CountryCode":"JPN","1":"JPN","Population":"209442","2":"209442"},{"Name":"Yamato","0":"Yamato","CountryCode":"JPN","1":"JPN","Population":"208234","2":"208234"},{"Name":"Matsumoto","0":"Matsumoto","CountryCode":"JPN","1":"JPN","Population":"206801","2":"206801"},{"Name":"Kure","0":"Kure","CountryCode":"JPN","1":"JPN","Population":"206504","2":"206504"},{"Name":"Takarazuka","0":"Takarazuka","CountryCode":"JPN","1":"JPN","Population":"205993","2":"205993"},{"Name":"Kasukabe","0":"Kasukabe","CountryCode":"JPN","1":"JPN","Population":"201838","2":"201838"},{"Name":"Chofu","0":"Chofu","CountryCode":"JPN","1":"JPN","Population":"201585","2":"201585"},{"Name":"Odawara","0":"Odawara","CountryCode":"JPN","1":"JPN","Population":"200171","2":"200171"},{"Name":"Kofu","0":"Kofu","CountryCode":"JPN","1":"JPN","Population":"199753","2":"199753"},{"Name":"Kushiro","0":"Kushiro","CountryCode":"JPN","1":"JPN","Population":"197608","2":"197608"},{"Name":"Kishiwada","0":"Kishiwada","CountryCode":"JPN","1":"JPN","Population":"197276","2":"197276"},{"Name":"Hitachi","0":"Hitachi","CountryCode":"JPN","1":"JPN","Population":"196622","2":"196622"},{"Name":"Nagaoka","0":"Nagaoka","CountryCode":"JPN","1":"JPN","Population":"192407","2":"192407"},{"Name":"Itami","0":"Itami","CountryCode":"JPN","1":"JPN","Population":"190886","2":"190886"},{"Name":"Uji","0":"Uji","CountryCode":"JPN","1":"JPN","Population":"188735","2":"188735"},{"Name":"Suzuka","0":"Suzuka","CountryCode":"JPN","1":"JPN","Population":"184061","2":"184061"},{"Name":"Hirosaki","0":"Hirosaki","CountryCode":"JPN","1":"JPN","Population":"177522","2":"177522"},{"Name":"Ube","0":"Ube","CountryCode":"JPN","1":"JPN","Population":"175206","2":"175206"},{"Name":"Kodaira","0":"Kodaira","CountryCode":"JPN","1":"JPN","Population":"174984","2":"174984"},{"Name":"Takaoka","0":"Takaoka","CountryCode":"JPN","1":"JPN","Population":"174380","2":"174380"},{"Name":"Obihiro","0":"Obihiro","CountryCode":"JPN","1":"JPN","Population":"173685","2":"173685"},{"Name":"Tomakomai","0":"Tomakomai","CountryCode":"JPN","1":"JPN","Population":"171958","2":"171958"},{"Name":"Saga","0":"Saga","CountryCode":"JPN","1":"JPN","Population":"170034","2":"170034"},{"Name":"Sakura","0":"Sakura","CountryCode":"JPN","1":"JPN","Population":"168072","2":"168072"},{"Name":"Kamakura","0":"Kamakura","CountryCode":"JPN","1":"JPN","Population":"167661","2":"167661"},{"Name":"Mitaka","0":"Mitaka","CountryCode":"JPN","1":"JPN","Population":"167268","2":"167268"},{"Name":"Izumi","0":"Izumi","CountryCode":"JPN","1":"JPN","Population":"166979","2":"166979"},{"Name":"Hino","0":"Hino","CountryCode":"JPN","1":"JPN","Population":"166770","2":"166770"},{"Name":"Hadano","0":"Hadano","CountryCode":"JPN","1":"JPN","Population":"166512","2":"166512"},{"Name":"Ashikaga","0":"Ashikaga","CountryCode":"JPN","1":"JPN","Population":"165243","2":"165243"},{"Name":"Tsu","0":"Tsu","CountryCode":"JPN","1":"JPN","Population":"164543","2":"164543"},{"Name":"Sayama","0":"Sayama","CountryCode":"JPN","1":"JPN","Population":"162472","2":"162472"},{"Name":"Yachiyo","0":"Yachiyo","CountryCode":"JPN","1":"JPN","Population":"161222","2":"161222"},{"Name":"Tsukuba","0":"Tsukuba","CountryCode":"JPN","1":"JPN","Population":"160768","2":"160768"},{"Name":"Tachikawa","0":"Tachikawa","CountryCode":"JPN","1":"JPN","Population":"159430","2":"159430"},{"Name":"Kumagaya","0":"Kumagaya","CountryCode":"JPN","1":"JPN","Population":"157171","2":"157171"},{"Name":"Moriguchi","0":"Moriguchi","CountryCode":"JPN","1":"JPN","Population":"155941","2":"155941"},{"Name":"Otaru","0":"Otaru","CountryCode":"JPN","1":"JPN","Population":"155784","2":"155784"},{"Name":"Anjo","0":"Anjo","CountryCode":"JPN","1":"JPN","Population":"153823","2":"153823"},{"Name":"Narashino","0":"Narashino","CountryCode":"JPN","1":"JPN","Population":"152849","2":"152849"},{"Name":"Oyama","0":"Oyama","CountryCode":"JPN","1":"JPN","Population":"152820","2":"152820"},{"Name":"Ogaki","0":"Ogaki","CountryCode":"JPN","1":"JPN","Population":"151758","2":"151758"},{"Name":"Matsue","0":"Matsue","CountryCode":"JPN","1":"JPN","Population":"149821","2":"149821"},{"Name":"Kawanishi","0":"Kawanishi","CountryCode":"JPN","1":"JPN","Population":"149794","2":"149794"},{"Name":"Hitachinaka","0":"Hitachinaka","CountryCode":"JPN","1":"JPN","Population":"148006","2":"148006"},{"Name":"Niiza","0":"Niiza","CountryCode":"JPN","1":"JPN","Population":"147744","2":"147744"},{"Name":"Nagareyama","0":"Nagareyama","CountryCode":"JPN","1":"JPN","Population":"147738","2":"147738"},{"Name":"Tottori","0":"Tottori","CountryCode":"JPN","1":"JPN","Population":"147523","2":"147523"},{"Name":"Tama","0":"Tama","CountryCode":"JPN","1":"JPN","Population":"146712","2":"146712"},{"Name":"Iruma","0":"Iruma","CountryCode":"JPN","1":"JPN","Population":"145922","2":"145922"},{"Name":"Ota","0":"Ota","CountryCode":"JPN","1":"JPN","Population":"145317","2":"145317"},{"Name":"Omuta","0":"Omuta","CountryCode":"JPN","1":"JPN","Population":"142889","2":"142889"},{"Name":"Komaki","0":"Komaki","CountryCode":"JPN","1":"JPN","Population":"139827","2":"139827"},{"Name":"Ome","0":"Ome","CountryCode":"JPN","1":"JPN","Population":"139216","2":"139216"},{"Name":"Kadoma","0":"Kadoma","CountryCode":"JPN","1":"JPN","Population":"138953","2":"138953"},{"Name":"Yamaguchi","0":"Yamaguchi","CountryCode":"JPN","1":"JPN","Population":"138210","2":"138210"},{"Name":"Higashimurayama","0":"Higashimurayama","CountryCode":"JPN","1":"JPN","Population":"136970","2":"136970"},{"Name":"Yonago","0":"Yonago","CountryCode":"JPN","1":"JPN","Population":"136461","2":"136461"},{"Name":"Matsubara","0":"Matsubara","CountryCode":"JPN","1":"JPN","Population":"135010","2":"135010"},{"Name":"Musashino","0":"Musashino","CountryCode":"JPN","1":"JPN","Population":"134426","2":"134426"},{"Name":"Tsuchiura","0":"Tsuchiura","CountryCode":"JPN","1":"JPN","Population":"134072","2":"134072"},{"Name":"Joetsu","0":"Joetsu","CountryCode":"JPN","1":"JPN","Population":"133505","2":"133505"},{"Name":"Miyakonojo","0":"Miyakonojo","CountryCode":"JPN","1":"JPN","Population":"133183","2":"133183"},{"Name":"Misato","0":"Misato","CountryCode":"JPN","1":"JPN","Population":"132957","2":"132957"},{"Name":"Kakamigahara","0":"Kakamigahara","CountryCode":"JPN","1":"JPN","Population":"131831","2":"131831"},{"Name":"Daito","0":"Daito","CountryCode":"JPN","1":"JPN","Population":"130594","2":"130594"},{"Name":"Seto","0":"Seto","CountryCode":"JPN","1":"JPN","Population":"130470","2":"130470"},{"Name":"Kariya","0":"Kariya","CountryCode":"JPN","1":"JPN","Population":"127969","2":"127969"},{"Name":"Urayasu","0":"Urayasu","CountryCode":"JPN","1":"JPN","Population":"127550","2":"127550"},{"Name":"Beppu","0":"Beppu","CountryCode":"JPN","1":"JPN","Population":"127486","2":"127486"},{"Name":"Niihama","0":"Niihama","CountryCode":"JPN","1":"JPN","Population":"127207","2":"127207"},{"Name":"Minoo","0":"Minoo","CountryCode":"JPN","1":"JPN","Population":"127026","2":"127026"},{"Name":"Fujieda","0":"Fujieda","CountryCode":"JPN","1":"JPN","Population":"126897","2":"126897"},{"Name":"Abiko","0":"Abiko","CountryCode":"JPN","1":"JPN","Population":"126670","2":"126670"},{"Name":"Nobeoka","0":"Nobeoka","CountryCode":"JPN","1":"JPN","Population":"125547","2":"125547"},{"Name":"Tondabayashi","0":"Tondabayashi","CountryCode":"JPN","1":"JPN","Population":"125094","2":"125094"},{"Name":"Ueda","0":"Ueda","CountryCode":"JPN","1":"JPN","Population":"124217","2":"124217"},{"Name":"Kashihara","0":"Kashihara","CountryCode":"JPN","1":"JPN","Population":"124013","2":"124013"},{"Name":"Matsusaka","0":"Matsusaka","CountryCode":"JPN","1":"JPN","Population":"123582","2":"123582"},{"Name":"Isesaki","0":"Isesaki","CountryCode":"JPN","1":"JPN","Population":"123285","2":"123285"},{"Name":"Zama","0":"Zama","CountryCode":"JPN","1":"JPN","Population":"122046","2":"122046"},{"Name":"Kisarazu","0":"Kisarazu","CountryCode":"JPN","1":"JPN","Population":"121967","2":"121967"},{"Name":"Noda","0":"Noda","CountryCode":"JPN","1":"JPN","Population":"121030","2":"121030"},{"Name":"Ishinomaki","0":"Ishinomaki","CountryCode":"JPN","1":"JPN","Population":"120963","2":"120963"},{"Name":"Fujinomiya","0":"Fujinomiya","CountryCode":"JPN","1":"JPN","Population":"119714","2":"119714"},{"Name":"Kawachinagano","0":"Kawachinagano","CountryCode":"JPN","1":"JPN","Population":"119666","2":"119666"},{"Name":"Imabari","0":"Imabari","CountryCode":"JPN","1":"JPN","Population":"119357","2":"119357"},{"Name":"Aizuwakamatsu","0":"Aizuwakamatsu","CountryCode":"JPN","1":"JPN","Population":"119287","2":"119287"},{"Name":"Higashihiroshima","0":"Higashihiroshima","CountryCode":"JPN","1":"JPN","Population":"119166","2":"119166"},{"Name":"Habikino","0":"Habikino","CountryCode":"JPN","1":"JPN","Population":"118968","2":"118968"},{"Name":"Ebetsu","0":"Ebetsu","CountryCode":"JPN","1":"JPN","Population":"118805","2":"118805"},{"Name":"Hofu","0":"Hofu","CountryCode":"JPN","1":"JPN","Population":"118751","2":"118751"},{"Name":"Kiryu","0":"Kiryu","CountryCode":"JPN","1":"JPN","Population":"118326","2":"118326"},{"Name":"Okinawa","0":"Okinawa","CountryCode":"JPN","1":"JPN","Population":"117748","2":"117748"},{"Name":"Yaizu","0":"Yaizu","CountryCode":"JPN","1":"JPN","Population":"117258","2":"117258"},{"Name":"Toyokawa","0":"Toyokawa","CountryCode":"JPN","1":"JPN","Population":"115781","2":"115781"},{"Name":"Ebina","0":"Ebina","CountryCode":"JPN","1":"JPN","Population":"115571","2":"115571"},{"Name":"Asaka","0":"Asaka","CountryCode":"JPN","1":"JPN","Population":"114815","2":"114815"},{"Name":"Higashikurume","0":"Higashikurume","CountryCode":"JPN","1":"JPN","Population":"111666","2":"111666"},{"Name":"Ikoma","0":"Ikoma","CountryCode":"JPN","1":"JPN","Population":"111645","2":"111645"},{"Name":"Kitami","0":"Kitami","CountryCode":"JPN","1":"JPN","Population":"111295","2":"111295"},{"Name":"Koganei","0":"Koganei","CountryCode":"JPN","1":"JPN","Population":"110969","2":"110969"},{"Name":"Iwatsuki","0":"Iwatsuki","CountryCode":"JPN","1":"JPN","Population":"110034","2":"110034"},{"Name":"Mishima","0":"Mishima","CountryCode":"JPN","1":"JPN","Population":"109699","2":"109699"},{"Name":"Handa","0":"Handa","CountryCode":"JPN","1":"JPN","Population":"108600","2":"108600"},{"Name":"Muroran","0":"Muroran","CountryCode":"JPN","1":"JPN","Population":"108275","2":"108275"},{"Name":"Komatsu","0":"Komatsu","CountryCode":"JPN","1":"JPN","Population":"107937","2":"107937"},{"Name":"Yatsushiro","0":"Yatsushiro","CountryCode":"JPN","1":"JPN","Population":"107661","2":"107661"},{"Name":"Iida","0":"Iida","CountryCode":"JPN","1":"JPN","Population":"107583","2":"107583"},{"Name":"Tokuyama","0":"Tokuyama","CountryCode":"JPN","1":"JPN","Population":"107078","2":"107078"},{"Name":"Kokubunji","0":"Kokubunji","CountryCode":"JPN","1":"JPN","Population":"106996","2":"106996"},{"Name":"Akishima","0":"Akishima","CountryCode":"JPN","1":"JPN","Population":"106914","2":"106914"},{"Name":"Iwakuni","0":"Iwakuni","CountryCode":"JPN","1":"JPN","Population":"106647","2":"106647"},{"Name":"Kusatsu","0":"Kusatsu","CountryCode":"JPN","1":"JPN","Population":"106232","2":"106232"},{"Name":"Kuwana","0":"Kuwana","CountryCode":"JPN","1":"JPN","Population":"106121","2":"106121"},{"Name":"Sanda","0":"Sanda","CountryCode":"JPN","1":"JPN","Population":"105643","2":"105643"},{"Name":"Hikone","0":"Hikone","CountryCode":"JPN","1":"JPN","Population":"105508","2":"105508"},{"Name":"Toda","0":"Toda","CountryCode":"JPN","1":"JPN","Population":"103969","2":"103969"},{"Name":"Tajimi","0":"Tajimi","CountryCode":"JPN","1":"JPN","Population":"103171","2":"103171"},{"Name":"Ikeda","0":"Ikeda","CountryCode":"JPN","1":"JPN","Population":"102710","2":"102710"},{"Name":"Fukaya","0":"Fukaya","CountryCode":"JPN","1":"JPN","Population":"102156","2":"102156"},{"Name":"Ise","0":"Ise","CountryCode":"JPN","1":"JPN","Population":"101732","2":"101732"},{"Name":"Sakata","0":"Sakata","CountryCode":"JPN","1":"JPN","Population":"101651","2":"101651"},{"Name":"Kasuga","0":"Kasuga","CountryCode":"JPN","1":"JPN","Population":"101344","2":"101344"},{"Name":"Kamagaya","0":"Kamagaya","CountryCode":"JPN","1":"JPN","Population":"100821","2":"100821"},{"Name":"Tsuruoka","0":"Tsuruoka","CountryCode":"JPN","1":"JPN","Population":"100713","2":"100713"},{"Name":"Hoya","0":"Hoya","CountryCode":"JPN","1":"JPN","Population":"100313","2":"100313"},{"Name":"Nishio","0":"Nishio","CountryCode":"JPN","1":"JPN","Population":"100032","2":"100032"},{"Name":"Tokai","0":"Tokai","CountryCode":"JPN","1":"JPN","Population":"99738","2":"99738"},{"Name":"Inazawa","0":"Inazawa","CountryCode":"JPN","1":"JPN","Population":"98746","2":"98746"},{"Name":"Sakado","0":"Sakado","CountryCode":"JPN","1":"JPN","Population":"98221","2":"98221"},{"Name":"Isehara","0":"Isehara","CountryCode":"JPN","1":"JPN","Population":"98123","2":"98123"},{"Name":"Takasago","0":"Takasago","CountryCode":"JPN","1":"JPN","Population":"97632","2":"97632"},{"Name":"Fujimi","0":"Fujimi","CountryCode":"JPN","1":"JPN","Population":"96972","2":"96972"},{"Name":"Urasoe","0":"Urasoe","CountryCode":"JPN","1":"JPN","Population":"96002","2":"96002"},{"Name":"Yonezawa","0":"Yonezawa","CountryCode":"JPN","1":"JPN","Population":"95592","2":"95592"},{"Name":"Konan","0":"Konan","CountryCode":"JPN","1":"JPN","Population":"95521","2":"95521"},{"Name":"Yamatokoriyama","0":"Yamatokoriyama","CountryCode":"JPN","1":"JPN","Population":"95165","2":"95165"},{"Name":"Maizuru","0":"Maizuru","CountryCode":"JPN","1":"JPN","Population":"94784","2":"94784"},{"Name":"Onomichi","0":"Onomichi","CountryCode":"JPN","1":"JPN","Population":"93756","2":"93756"},{"Name":"Higashimatsuyama","0":"Higashimatsuyama","CountryCode":"JPN","1":"JPN","Population":"93342","2":"93342"},{"Name":"Kimitsu","0":"Kimitsu","CountryCode":"JPN","1":"JPN","Population":"93216","2":"93216"},{"Name":"Isahaya","0":"Isahaya","CountryCode":"JPN","1":"JPN","Population":"93058","2":"93058"},{"Name":"Kanuma","0":"Kanuma","CountryCode":"JPN","1":"JPN","Population":"93053","2":"93053"},{"Name":"Izumisano","0":"Izumisano","CountryCode":"JPN","1":"JPN","Population":"92583","2":"92583"},{"Name":"Kameoka","0":"Kameoka","CountryCode":"JPN","1":"JPN","Population":"92398","2":"92398"},{"Name":"Mobara","0":"Mobara","CountryCode":"JPN","1":"JPN","Population":"91664","2":"91664"},{"Name":"Narita","0":"Narita","CountryCode":"JPN","1":"JPN","Population":"91470","2":"91470"},{"Name":"Kashiwazaki","0":"Kashiwazaki","CountryCode":"JPN","1":"JPN","Population":"91229","2":"91229"},{"Name":"Tsuyama","0":"Tsuyama","CountryCode":"JPN","1":"JPN","Population":"91170","2":"91170"},{"Name":"Sanaa","0":"Sanaa","CountryCode":"YEM","1":"YEM","Population":"503600","2":"503600"},{"Name":"Aden","0":"Aden","CountryCode":"YEM","1":"YEM","Population":"398300","2":"398300"},{"Name":"Taizz","0":"Taizz","CountryCode":"YEM","1":"YEM","Population":"317600","2":"317600"},{"Name":"Hodeida","0":"Hodeida","CountryCode":"YEM","1":"YEM","Population":"298500","2":"298500"},{"Name":"al-Mukalla","0":"al-Mukalla","CountryCode":"YEM","1":"YEM","Population":"122400","2":"122400"},{"Name":"Ibb","0":"Ibb","CountryCode":"YEM","1":"YEM","Population":"103300","2":"103300"},{"Name":"Amman","0":"Amman","CountryCode":"JOR","1":"JOR","Population":"1000000","2":"1000000"},{"Name":"al-Zarqa","0":"al-Zarqa","CountryCode":"JOR","1":"JOR","Population":"389815","2":"389815"},{"Name":"Irbid","0":"Irbid","CountryCode":"JOR","1":"JOR","Population":"231511","2":"231511"},{"Name":"al-Rusayfa","0":"al-Rusayfa","CountryCode":"JOR","1":"JOR","Population":"137247","2":"137247"},{"Name":"Wadi al-Sir","0":"Wadi al-Sir","CountryCode":"JOR","1":"JOR","Population":"89104","2":"89104"},{"Name":"Flying Fish Cove","0":"Flying Fish Cove","CountryCode":"CXR","1":"CXR","Population":"700","2":"700"},{"Name":"Beograd","0":"Beograd","CountryCode":"YUG","1":"YUG","Population":"1204000","2":"1204000"},{"Name":"Novi Sad","0":"Novi Sad","CountryCode":"YUG","1":"YUG","Population":"179626","2":"179626"},{"Name":"Ni\u0161","0":"Ni\u0161","CountryCode":"YUG","1":"YUG","Population":"175391","2":"175391"},{"Name":"Pri\u0161tina","0":"Pri\u0161tina","CountryCode":"YUG","1":"YUG","Population":"155496","2":"155496"},{"Name":"Kragujevac","0":"Kragujevac","CountryCode":"YUG","1":"YUG","Population":"147305","2":"147305"},{"Name":"Podgorica","0":"Podgorica","CountryCode":"YUG","1":"YUG","Population":"135000","2":"135000"},{"Name":"Subotica","0":"Subotica","CountryCode":"YUG","1":"YUG","Population":"100386","2":"100386"},{"Name":"Prizren","0":"Prizren","CountryCode":"YUG","1":"YUG","Population":"92303","2":"92303"},{"Name":"Phnom Penh","0":"Phnom Penh","CountryCode":"KHM","1":"KHM","Population":"570155","2":"570155"},{"Name":"Battambang","0":"Battambang","CountryCode":"KHM","1":"KHM","Population":"129800","2":"129800"},{"Name":"Siem Reap","0":"Siem Reap","CountryCode":"KHM","1":"KHM","Population":"105100","2":"105100"},{"Name":"Douala","0":"Douala","CountryCode":"CMR","1":"CMR","Population":"1448300","2":"1448300"},{"Name":"Yaound\u00e9","0":"Yaound\u00e9","CountryCode":"CMR","1":"CMR","Population":"1372800","2":"1372800"},{"Name":"Garoua","0":"Garoua","CountryCode":"CMR","1":"CMR","Population":"177000","2":"177000"},{"Name":"Maroua","0":"Maroua","CountryCode":"CMR","1":"CMR","Population":"143000","2":"143000"},{"Name":"Bamenda","0":"Bamenda","CountryCode":"CMR","1":"CMR","Population":"138000","2":"138000"},{"Name":"Bafoussam","0":"Bafoussam","CountryCode":"CMR","1":"CMR","Population":"131000","2":"131000"},{"Name":"Nkongsamba","0":"Nkongsamba","CountryCode":"CMR","1":"CMR","Population":"112454","2":"112454"},{"Name":"Montr\u00e9al","0":"Montr\u00e9al","CountryCode":"CAN","1":"CAN","Population":"1016376","2":"1016376"},{"Name":"Calgary","0":"Calgary","CountryCode":"CAN","1":"CAN","Population":"768082","2":"768082"},{"Name":"Toronto","0":"Toronto","CountryCode":"CAN","1":"CAN","Population":"688275","2":"688275"},{"Name":"North York","0":"North York","CountryCode":"CAN","1":"CAN","Population":"622632","2":"622632"},{"Name":"Winnipeg","0":"Winnipeg","CountryCode":"CAN","1":"CAN","Population":"618477","2":"618477"},{"Name":"Edmonton","0":"Edmonton","CountryCode":"CAN","1":"CAN","Population":"616306","2":"616306"},{"Name":"Mississauga","0":"Mississauga","CountryCode":"CAN","1":"CAN","Population":"608072","2":"608072"},{"Name":"Scarborough","0":"Scarborough","CountryCode":"CAN","1":"CAN","Population":"594501","2":"594501"},{"Name":"Vancouver","0":"Vancouver","CountryCode":"CAN","1":"CAN","Population":"514008","2":"514008"},{"Name":"Etobicoke","0":"Etobicoke","CountryCode":"CAN","1":"CAN","Population":"348845","2":"348845"},{"Name":"London","0":"London","CountryCode":"CAN","1":"CAN","Population":"339917","2":"339917"},{"Name":"Hamilton","0":"Hamilton","CountryCode":"CAN","1":"CAN","Population":"335614","2":"335614"},{"Name":"Ottawa","0":"Ottawa","CountryCode":"CAN","1":"CAN","Population":"335277","2":"335277"},{"Name":"Laval","0":"Laval","CountryCode":"CAN","1":"CAN","Population":"330393","2":"330393"},{"Name":"Surrey","0":"Surrey","CountryCode":"CAN","1":"CAN","Population":"304477","2":"304477"},{"Name":"Brampton","0":"Brampton","CountryCode":"CAN","1":"CAN","Population":"296711","2":"296711"},{"Name":"Windsor","0":"Windsor","CountryCode":"CAN","1":"CAN","Population":"207588","2":"207588"},{"Name":"Saskatoon","0":"Saskatoon","CountryCode":"CAN","1":"CAN","Population":"193647","2":"193647"},{"Name":"Kitchener","0":"Kitchener","CountryCode":"CAN","1":"CAN","Population":"189959","2":"189959"},{"Name":"Markham","0":"Markham","CountryCode":"CAN","1":"CAN","Population":"189098","2":"189098"},{"Name":"Regina","0":"Regina","CountryCode":"CAN","1":"CAN","Population":"180400","2":"180400"},{"Name":"Burnaby","0":"Burnaby","CountryCode":"CAN","1":"CAN","Population":"179209","2":"179209"},{"Name":"Qu\u00e9bec","0":"Qu\u00e9bec","CountryCode":"CAN","1":"CAN","Population":"167264","2":"167264"},{"Name":"York","0":"York","CountryCode":"CAN","1":"CAN","Population":"154980","2":"154980"},{"Name":"Richmond","0":"Richmond","CountryCode":"CAN","1":"CAN","Population":"148867","2":"148867"},{"Name":"Vaughan","0":"Vaughan","CountryCode":"CAN","1":"CAN","Population":"147889","2":"147889"},{"Name":"Burlington","0":"Burlington","CountryCode":"CAN","1":"CAN","Population":"145150","2":"145150"},{"Name":"Oshawa","0":"Oshawa","CountryCode":"CAN","1":"CAN","Population":"140173","2":"140173"},{"Name":"Oakville","0":"Oakville","CountryCode":"CAN","1":"CAN","Population":"139192","2":"139192"},{"Name":"Saint Catharines","0":"Saint Catharines","CountryCode":"CAN","1":"CAN","Population":"136216","2":"136216"},{"Name":"Longueuil","0":"Longueuil","CountryCode":"CAN","1":"CAN","Population":"127977","2":"127977"},{"Name":"Richmond Hill","0":"Richmond Hill","CountryCode":"CAN","1":"CAN","Population":"116428","2":"116428"},{"Name":"Thunder Bay","0":"Thunder Bay","CountryCode":"CAN","1":"CAN","Population":"115913","2":"115913"},{"Name":"Nepean","0":"Nepean","CountryCode":"CAN","1":"CAN","Population":"115100","2":"115100"},{"Name":"Cape Breton","0":"Cape Breton","CountryCode":"CAN","1":"CAN","Population":"114733","2":"114733"},{"Name":"East York","0":"East York","CountryCode":"CAN","1":"CAN","Population":"114034","2":"114034"},{"Name":"Halifax","0":"Halifax","CountryCode":"CAN","1":"CAN","Population":"113910","2":"113910"},{"Name":"Cambridge","0":"Cambridge","CountryCode":"CAN","1":"CAN","Population":"109186","2":"109186"},{"Name":"Gloucester","0":"Gloucester","CountryCode":"CAN","1":"CAN","Population":"107314","2":"107314"},{"Name":"Abbotsford","0":"Abbotsford","CountryCode":"CAN","1":"CAN","Population":"105403","2":"105403"},{"Name":"Guelph","0":"Guelph","CountryCode":"CAN","1":"CAN","Population":"103593","2":"103593"},{"Name":"Saint John\u00b4s","0":"Saint John\u00b4s","CountryCode":"CAN","1":"CAN","Population":"101936","2":"101936"},{"Name":"Coquitlam","0":"Coquitlam","CountryCode":"CAN","1":"CAN","Population":"101820","2":"101820"},{"Name":"Saanich","0":"Saanich","CountryCode":"CAN","1":"CAN","Population":"101388","2":"101388"},{"Name":"Gatineau","0":"Gatineau","CountryCode":"CAN","1":"CAN","Population":"100702","2":"100702"},{"Name":"Delta","0":"Delta","CountryCode":"CAN","1":"CAN","Population":"95411","2":"95411"},{"Name":"Sudbury","0":"Sudbury","CountryCode":"CAN","1":"CAN","Population":"92686","2":"92686"},{"Name":"Kelowna","0":"Kelowna","CountryCode":"CAN","1":"CAN","Population":"89442","2":"89442"},{"Name":"Barrie","0":"Barrie","CountryCode":"CAN","1":"CAN","Population":"89269","2":"89269"},{"Name":"Praia","0":"Praia","CountryCode":"CPV","1":"CPV","Population":"94800","2":"94800"},{"Name":"Almaty","0":"Almaty","CountryCode":"KAZ","1":"KAZ","Population":"1129400","2":"1129400"},{"Name":"Qaraghandy","0":"Qaraghandy","CountryCode":"KAZ","1":"KAZ","Population":"436900","2":"436900"},{"Name":"Shymkent","0":"Shymkent","CountryCode":"KAZ","1":"KAZ","Population":"360100","2":"360100"},{"Name":"Taraz","0":"Taraz","CountryCode":"KAZ","1":"KAZ","Population":"330100","2":"330100"},{"Name":"Astana","0":"Astana","CountryCode":"KAZ","1":"KAZ","Population":"311200","2":"311200"},{"Name":"\u00d6skemen","0":"\u00d6skemen","CountryCode":"KAZ","1":"KAZ","Population":"311000","2":"311000"},{"Name":"Pavlodar","0":"Pavlodar","CountryCode":"KAZ","1":"KAZ","Population":"300500","2":"300500"},{"Name":"Semey","0":"Semey","CountryCode":"KAZ","1":"KAZ","Population":"269600","2":"269600"},{"Name":"Aqt\u00f6be","0":"Aqt\u00f6be","CountryCode":"KAZ","1":"KAZ","Population":"253100","2":"253100"},{"Name":"Qostanay","0":"Qostanay","CountryCode":"KAZ","1":"KAZ","Population":"221400","2":"221400"},{"Name":"Petropavl","0":"Petropavl","CountryCode":"KAZ","1":"KAZ","Population":"203500","2":"203500"},{"Name":"Oral","0":"Oral","CountryCode":"KAZ","1":"KAZ","Population":"195500","2":"195500"},{"Name":"Temirtau","0":"Temirtau","CountryCode":"KAZ","1":"KAZ","Population":"170500","2":"170500"},{"Name":"Qyzylorda","0":"Qyzylorda","CountryCode":"KAZ","1":"KAZ","Population":"157400","2":"157400"},{"Name":"Aqtau","0":"Aqtau","CountryCode":"KAZ","1":"KAZ","Population":"143400","2":"143400"},{"Name":"Atyrau","0":"Atyrau","CountryCode":"KAZ","1":"KAZ","Population":"142500","2":"142500"},{"Name":"Ekibastuz","0":"Ekibastuz","CountryCode":"KAZ","1":"KAZ","Population":"127200","2":"127200"},{"Name":"K\u00f6kshetau","0":"K\u00f6kshetau","CountryCode":"KAZ","1":"KAZ","Population":"123400","2":"123400"},{"Name":"Rudnyy","0":"Rudnyy","CountryCode":"KAZ","1":"KAZ","Population":"109500","2":"109500"},{"Name":"Taldyqorghan","0":"Taldyqorghan","CountryCode":"KAZ","1":"KAZ","Population":"98000","2":"98000"},{"Name":"Zhezqazghan","0":"Zhezqazghan","CountryCode":"KAZ","1":"KAZ","Population":"90000","2":"90000"},{"Name":"Nairobi","0":"Nairobi","CountryCode":"KEN","1":"KEN","Population":"2290000","2":"2290000"},{"Name":"Mombasa","0":"Mombasa","CountryCode":"KEN","1":"KEN","Population":"461753","2":"461753"},{"Name":"Kisumu","0":"Kisumu","CountryCode":"KEN","1":"KEN","Population":"192733","2":"192733"},{"Name":"Nakuru","0":"Nakuru","CountryCode":"KEN","1":"KEN","Population":"163927","2":"163927"},{"Name":"Machakos","0":"Machakos","CountryCode":"KEN","1":"KEN","Population":"116293","2":"116293"},{"Name":"Eldoret","0":"Eldoret","CountryCode":"KEN","1":"KEN","Population":"111882","2":"111882"},{"Name":"Meru","0":"Meru","CountryCode":"KEN","1":"KEN","Population":"94947","2":"94947"},{"Name":"Nyeri","0":"Nyeri","CountryCode":"KEN","1":"KEN","Population":"91258","2":"91258"},{"Name":"Bangui","0":"Bangui","CountryCode":"CAF","1":"CAF","Population":"524000","2":"524000"},{"Name":"Shanghai","0":"Shanghai","CountryCode":"CHN","1":"CHN","Population":"9696300","2":"9696300"},{"Name":"Peking","0":"Peking","CountryCode":"CHN","1":"CHN","Population":"7472000","2":"7472000"},{"Name":"Chongqing","0":"Chongqing","CountryCode":"CHN","1":"CHN","Population":"6351600","2":"6351600"},{"Name":"Tianjin","0":"Tianjin","CountryCode":"CHN","1":"CHN","Population":"5286800","2":"5286800"},{"Name":"Wuhan","0":"Wuhan","CountryCode":"CHN","1":"CHN","Population":"4344600","2":"4344600"},{"Name":"Harbin","0":"Harbin","CountryCode":"CHN","1":"CHN","Population":"4289800","2":"4289800"},{"Name":"Shenyang","0":"Shenyang","CountryCode":"CHN","1":"CHN","Population":"4265200","2":"4265200"},{"Name":"Kanton [Guangzhou]","0":"Kanton [Guangzhou]","CountryCode":"CHN","1":"CHN","Population":"4256300","2":"4256300"},{"Name":"Chengdu","0":"Chengdu","CountryCode":"CHN","1":"CHN","Population":"3361500","2":"3361500"},{"Name":"Nanking [Nanjing]","0":"Nanking [Nanjing]","CountryCode":"CHN","1":"CHN","Population":"2870300","2":"2870300"},{"Name":"Changchun","0":"Changchun","CountryCode":"CHN","1":"CHN","Population":"2812000","2":"2812000"},{"Name":"Xi\u00b4an","0":"Xi\u00b4an","CountryCode":"CHN","1":"CHN","Population":"2761400","2":"2761400"},{"Name":"Dalian","0":"Dalian","CountryCode":"CHN","1":"CHN","Population":"2697000","2":"2697000"},{"Name":"Qingdao","0":"Qingdao","CountryCode":"CHN","1":"CHN","Population":"2596000","2":"2596000"},{"Name":"Jinan","0":"Jinan","CountryCode":"CHN","1":"CHN","Population":"2278100","2":"2278100"},{"Name":"Hangzhou","0":"Hangzhou","CountryCode":"CHN","1":"CHN","Population":"2190500","2":"2190500"},{"Name":"Zhengzhou","0":"Zhengzhou","CountryCode":"CHN","1":"CHN","Population":"2107200","2":"2107200"},{"Name":"Shijiazhuang","0":"Shijiazhuang","CountryCode":"CHN","1":"CHN","Population":"2041500","2":"2041500"},{"Name":"Taiyuan","0":"Taiyuan","CountryCode":"CHN","1":"CHN","Population":"1968400","2":"1968400"},{"Name":"Kunming","0":"Kunming","CountryCode":"CHN","1":"CHN","Population":"1829500","2":"1829500"},{"Name":"Changsha","0":"Changsha","CountryCode":"CHN","1":"CHN","Population":"1809800","2":"1809800"},{"Name":"Nanchang","0":"Nanchang","CountryCode":"CHN","1":"CHN","Population":"1691600","2":"1691600"},{"Name":"Fuzhou","0":"Fuzhou","CountryCode":"CHN","1":"CHN","Population":"1593800","2":"1593800"},{"Name":"Lanzhou","0":"Lanzhou","CountryCode":"CHN","1":"CHN","Population":"1565800","2":"1565800"},{"Name":"Guiyang","0":"Guiyang","CountryCode":"CHN","1":"CHN","Population":"1465200","2":"1465200"},{"Name":"Ningbo","0":"Ningbo","CountryCode":"CHN","1":"CHN","Population":"1371200","2":"1371200"},{"Name":"Hefei","0":"Hefei","CountryCode":"CHN","1":"CHN","Population":"1369100","2":"1369100"},{"Name":"Urumt\u0161i [\u00dcr\u00fcmqi]","0":"Urumt\u0161i [\u00dcr\u00fcmqi]","CountryCode":"CHN","1":"CHN","Population":"1310100","2":"1310100"},{"Name":"Anshan","0":"Anshan","CountryCode":"CHN","1":"CHN","Population":"1200000","2":"1200000"},{"Name":"Fushun","0":"Fushun","CountryCode":"CHN","1":"CHN","Population":"1200000","2":"1200000"},{"Name":"Nanning","0":"Nanning","CountryCode":"CHN","1":"CHN","Population":"1161800","2":"1161800"},{"Name":"Zibo","0":"Zibo","CountryCode":"CHN","1":"CHN","Population":"1140000","2":"1140000"},{"Name":"Qiqihar","0":"Qiqihar","CountryCode":"CHN","1":"CHN","Population":"1070000","2":"1070000"},{"Name":"Jilin","0":"Jilin","CountryCode":"CHN","1":"CHN","Population":"1040000","2":"1040000"},{"Name":"Tangshan","0":"Tangshan","CountryCode":"CHN","1":"CHN","Population":"1040000","2":"1040000"},{"Name":"Baotou","0":"Baotou","CountryCode":"CHN","1":"CHN","Population":"980000","2":"980000"},{"Name":"Shenzhen","0":"Shenzhen","CountryCode":"CHN","1":"CHN","Population":"950500","2":"950500"},{"Name":"Hohhot","0":"Hohhot","CountryCode":"CHN","1":"CHN","Population":"916700","2":"916700"},{"Name":"Handan","0":"Handan","CountryCode":"CHN","1":"CHN","Population":"840000","2":"840000"},{"Name":"Wuxi","0":"Wuxi","CountryCode":"CHN","1":"CHN","Population":"830000","2":"830000"},{"Name":"Xuzhou","0":"Xuzhou","CountryCode":"CHN","1":"CHN","Population":"810000","2":"810000"},{"Name":"Datong","0":"Datong","CountryCode":"CHN","1":"CHN","Population":"800000","2":"800000"},{"Name":"Yichun","0":"Yichun","CountryCode":"CHN","1":"CHN","Population":"800000","2":"800000"},{"Name":"Benxi","0":"Benxi","CountryCode":"CHN","1":"CHN","Population":"770000","2":"770000"},{"Name":"Luoyang","0":"Luoyang","CountryCode":"CHN","1":"CHN","Population":"760000","2":"760000"},{"Name":"Suzhou","0":"Suzhou","CountryCode":"CHN","1":"CHN","Population":"710000","2":"710000"},{"Name":"Xining","0":"Xining","CountryCode":"CHN","1":"CHN","Population":"700200","2":"700200"},{"Name":"Huainan","0":"Huainan","CountryCode":"CHN","1":"CHN","Population":"700000","2":"700000"},{"Name":"Jixi","0":"Jixi","CountryCode":"CHN","1":"CHN","Population":"683885","2":"683885"},{"Name":"Daqing","0":"Daqing","CountryCode":"CHN","1":"CHN","Population":"660000","2":"660000"},{"Name":"Fuxin","0":"Fuxin","CountryCode":"CHN","1":"CHN","Population":"640000","2":"640000"},{"Name":"Amoy [Xiamen]","0":"Amoy [Xiamen]","CountryCode":"CHN","1":"CHN","Population":"627500","2":"627500"},{"Name":"Liuzhou","0":"Liuzhou","CountryCode":"CHN","1":"CHN","Population":"610000","2":"610000"},{"Name":"Shantou","0":"Shantou","CountryCode":"CHN","1":"CHN","Population":"580000","2":"580000"},{"Name":"Jinzhou","0":"Jinzhou","CountryCode":"CHN","1":"CHN","Population":"570000","2":"570000"},{"Name":"Mudanjiang","0":"Mudanjiang","CountryCode":"CHN","1":"CHN","Population":"570000","2":"570000"},{"Name":"Yinchuan","0":"Yinchuan","CountryCode":"CHN","1":"CHN","Population":"544500","2":"544500"},{"Name":"Changzhou","0":"Changzhou","CountryCode":"CHN","1":"CHN","Population":"530000","2":"530000"},{"Name":"Zhangjiakou","0":"Zhangjiakou","CountryCode":"CHN","1":"CHN","Population":"530000","2":"530000"},{"Name":"Dandong","0":"Dandong","CountryCode":"CHN","1":"CHN","Population":"520000","2":"520000"},{"Name":"Hegang","0":"Hegang","CountryCode":"CHN","1":"CHN","Population":"520000","2":"520000"},{"Name":"Kaifeng","0":"Kaifeng","CountryCode":"CHN","1":"CHN","Population":"510000","2":"510000"},{"Name":"Jiamusi","0":"Jiamusi","CountryCode":"CHN","1":"CHN","Population":"493409","2":"493409"},{"Name":"Liaoyang","0":"Liaoyang","CountryCode":"CHN","1":"CHN","Population":"492559","2":"492559"},{"Name":"Hengyang","0":"Hengyang","CountryCode":"CHN","1":"CHN","Population":"487148","2":"487148"},{"Name":"Baoding","0":"Baoding","CountryCode":"CHN","1":"CHN","Population":"483155","2":"483155"},{"Name":"Hunjiang","0":"Hunjiang","CountryCode":"CHN","1":"CHN","Population":"482043","2":"482043"},{"Name":"Xinxiang","0":"Xinxiang","CountryCode":"CHN","1":"CHN","Population":"473762","2":"473762"},{"Name":"Huangshi","0":"Huangshi","CountryCode":"CHN","1":"CHN","Population":"457601","2":"457601"},{"Name":"Haikou","0":"Haikou","CountryCode":"CHN","1":"CHN","Population":"454300","2":"454300"},{"Name":"Yantai","0":"Yantai","CountryCode":"CHN","1":"CHN","Population":"452127","2":"452127"},{"Name":"Bengbu","0":"Bengbu","CountryCode":"CHN","1":"CHN","Population":"449245","2":"449245"},{"Name":"Xiangtan","0":"Xiangtan","CountryCode":"CHN","1":"CHN","Population":"441968","2":"441968"},{"Name":"Weifang","0":"Weifang","CountryCode":"CHN","1":"CHN","Population":"428522","2":"428522"},{"Name":"Wuhu","0":"Wuhu","CountryCode":"CHN","1":"CHN","Population":"425740","2":"425740"},{"Name":"Pingxiang","0":"Pingxiang","CountryCode":"CHN","1":"CHN","Population":"425579","2":"425579"},{"Name":"Yingkou","0":"Yingkou","CountryCode":"CHN","1":"CHN","Population":"421589","2":"421589"},{"Name":"Anyang","0":"Anyang","CountryCode":"CHN","1":"CHN","Population":"420332","2":"420332"},{"Name":"Panzhihua","0":"Panzhihua","CountryCode":"CHN","1":"CHN","Population":"415466","2":"415466"},{"Name":"Pingdingshan","0":"Pingdingshan","CountryCode":"CHN","1":"CHN","Population":"410775","2":"410775"},{"Name":"Xiangfan","0":"Xiangfan","CountryCode":"CHN","1":"CHN","Population":"410407","2":"410407"},{"Name":"Zhuzhou","0":"Zhuzhou","CountryCode":"CHN","1":"CHN","Population":"409924","2":"409924"},{"Name":"Jiaozuo","0":"Jiaozuo","CountryCode":"CHN","1":"CHN","Population":"409100","2":"409100"},{"Name":"Wenzhou","0":"Wenzhou","CountryCode":"CHN","1":"CHN","Population":"401871","2":"401871"},{"Name":"Zhangjiang","0":"Zhangjiang","CountryCode":"CHN","1":"CHN","Population":"400997","2":"400997"},{"Name":"Zigong","0":"Zigong","CountryCode":"CHN","1":"CHN","Population":"393184","2":"393184"},{"Name":"Shuangyashan","0":"Shuangyashan","CountryCode":"CHN","1":"CHN","Population":"386081","2":"386081"},{"Name":"Zaozhuang","0":"Zaozhuang","CountryCode":"CHN","1":"CHN","Population":"380846","2":"380846"},{"Name":"Yakeshi","0":"Yakeshi","CountryCode":"CHN","1":"CHN","Population":"377869","2":"377869"},{"Name":"Yichang","0":"Yichang","CountryCode":"CHN","1":"CHN","Population":"371601","2":"371601"},{"Name":"Zhenjiang","0":"Zhenjiang","CountryCode":"CHN","1":"CHN","Population":"368316","2":"368316"},{"Name":"Huaibei","0":"Huaibei","CountryCode":"CHN","1":"CHN","Population":"366549","2":"366549"},{"Name":"Qinhuangdao","0":"Qinhuangdao","CountryCode":"CHN","1":"CHN","Population":"364972","2":"364972"},{"Name":"Guilin","0":"Guilin","CountryCode":"CHN","1":"CHN","Population":"364130","2":"364130"},{"Name":"Liupanshui","0":"Liupanshui","CountryCode":"CHN","1":"CHN","Population":"363954","2":"363954"},{"Name":"Panjin","0":"Panjin","CountryCode":"CHN","1":"CHN","Population":"362773","2":"362773"},{"Name":"Yangquan","0":"Yangquan","CountryCode":"CHN","1":"CHN","Population":"362268","2":"362268"},{"Name":"Jinxi","0":"Jinxi","CountryCode":"CHN","1":"CHN","Population":"357052","2":"357052"},{"Name":"Liaoyuan","0":"Liaoyuan","CountryCode":"CHN","1":"CHN","Population":"354141","2":"354141"},{"Name":"Lianyungang","0":"Lianyungang","CountryCode":"CHN","1":"CHN","Population":"354139","2":"354139"},{"Name":"Xianyang","0":"Xianyang","CountryCode":"CHN","1":"CHN","Population":"352125","2":"352125"},{"Name":"Tai\u00b4an","0":"Tai\u00b4an","CountryCode":"CHN","1":"CHN","Population":"350696","2":"350696"},{"Name":"Chifeng","0":"Chifeng","CountryCode":"CHN","1":"CHN","Population":"350077","2":"350077"},{"Name":"Shaoguan","0":"Shaoguan","CountryCode":"CHN","1":"CHN","Population":"350043","2":"350043"},{"Name":"Nantong","0":"Nantong","CountryCode":"CHN","1":"CHN","Population":"343341","2":"343341"},{"Name":"Leshan","0":"Leshan","CountryCode":"CHN","1":"CHN","Population":"341128","2":"341128"},{"Name":"Baoji","0":"Baoji","CountryCode":"CHN","1":"CHN","Population":"337765","2":"337765"},{"Name":"Linyi","0":"Linyi","CountryCode":"CHN","1":"CHN","Population":"324720","2":"324720"},{"Name":"Tonghua","0":"Tonghua","CountryCode":"CHN","1":"CHN","Population":"324600","2":"324600"},{"Name":"Siping","0":"Siping","CountryCode":"CHN","1":"CHN","Population":"317223","2":"317223"},{"Name":"Changzhi","0":"Changzhi","CountryCode":"CHN","1":"CHN","Population":"317144","2":"317144"},{"Name":"Tengzhou","0":"Tengzhou","CountryCode":"CHN","1":"CHN","Population":"315083","2":"315083"},{"Name":"Chaozhou","0":"Chaozhou","CountryCode":"CHN","1":"CHN","Population":"313469","2":"313469"},{"Name":"Yangzhou","0":"Yangzhou","CountryCode":"CHN","1":"CHN","Population":"312892","2":"312892"},{"Name":"Dongwan","0":"Dongwan","CountryCode":"CHN","1":"CHN","Population":"308669","2":"308669"},{"Name":"Ma\u00b4anshan","0":"Ma\u00b4anshan","CountryCode":"CHN","1":"CHN","Population":"305421","2":"305421"},{"Name":"Foshan","0":"Foshan","CountryCode":"CHN","1":"CHN","Population":"303160","2":"303160"},{"Name":"Yueyang","0":"Yueyang","CountryCode":"CHN","1":"CHN","Population":"302800","2":"302800"},{"Name":"Xingtai","0":"Xingtai","CountryCode":"CHN","1":"CHN","Population":"302789","2":"302789"},{"Name":"Changde","0":"Changde","CountryCode":"CHN","1":"CHN","Population":"301276","2":"301276"},{"Name":"Shihezi","0":"Shihezi","CountryCode":"CHN","1":"CHN","Population":"299676","2":"299676"},{"Name":"Yancheng","0":"Yancheng","CountryCode":"CHN","1":"CHN","Population":"296831","2":"296831"},{"Name":"Jiujiang","0":"Jiujiang","CountryCode":"CHN","1":"CHN","Population":"291187","2":"291187"},{"Name":"Dongying","0":"Dongying","CountryCode":"CHN","1":"CHN","Population":"281728","2":"281728"},{"Name":"Shashi","0":"Shashi","CountryCode":"CHN","1":"CHN","Population":"281352","2":"281352"},{"Name":"Xintai","0":"Xintai","CountryCode":"CHN","1":"CHN","Population":"281248","2":"281248"},{"Name":"Jingdezhen","0":"Jingdezhen","CountryCode":"CHN","1":"CHN","Population":"281183","2":"281183"},{"Name":"Tongchuan","0":"Tongchuan","CountryCode":"CHN","1":"CHN","Population":"280657","2":"280657"},{"Name":"Zhongshan","0":"Zhongshan","CountryCode":"CHN","1":"CHN","Population":"278829","2":"278829"},{"Name":"Shiyan","0":"Shiyan","CountryCode":"CHN","1":"CHN","Population":"273786","2":"273786"},{"Name":"Tieli","0":"Tieli","CountryCode":"CHN","1":"CHN","Population":"265683","2":"265683"},{"Name":"Jining","0":"Jining","CountryCode":"CHN","1":"CHN","Population":"265248","2":"265248"},{"Name":"Wuhai","0":"Wuhai","CountryCode":"CHN","1":"CHN","Population":"264081","2":"264081"},{"Name":"Mianyang","0":"Mianyang","CountryCode":"CHN","1":"CHN","Population":"262947","2":"262947"},{"Name":"Luzhou","0":"Luzhou","CountryCode":"CHN","1":"CHN","Population":"262892","2":"262892"},{"Name":"Zunyi","0":"Zunyi","CountryCode":"CHN","1":"CHN","Population":"261862","2":"261862"},{"Name":"Shizuishan","0":"Shizuishan","CountryCode":"CHN","1":"CHN","Population":"257862","2":"257862"},{"Name":"Neijiang","0":"Neijiang","CountryCode":"CHN","1":"CHN","Population":"256012","2":"256012"},{"Name":"Tongliao","0":"Tongliao","CountryCode":"CHN","1":"CHN","Population":"255129","2":"255129"},{"Name":"Tieling","0":"Tieling","CountryCode":"CHN","1":"CHN","Population":"254842","2":"254842"},{"Name":"Wafangdian","0":"Wafangdian","CountryCode":"CHN","1":"CHN","Population":"251733","2":"251733"},{"Name":"Anqing","0":"Anqing","CountryCode":"CHN","1":"CHN","Population":"250718","2":"250718"},{"Name":"Shaoyang","0":"Shaoyang","CountryCode":"CHN","1":"CHN","Population":"247227","2":"247227"},{"Name":"Laiwu","0":"Laiwu","CountryCode":"CHN","1":"CHN","Population":"246833","2":"246833"},{"Name":"Chengde","0":"Chengde","CountryCode":"CHN","1":"CHN","Population":"246799","2":"246799"},{"Name":"Tianshui","0":"Tianshui","CountryCode":"CHN","1":"CHN","Population":"244974","2":"244974"},{"Name":"Nanyang","0":"Nanyang","CountryCode":"CHN","1":"CHN","Population":"243303","2":"243303"},{"Name":"Cangzhou","0":"Cangzhou","CountryCode":"CHN","1":"CHN","Population":"242708","2":"242708"},{"Name":"Yibin","0":"Yibin","CountryCode":"CHN","1":"CHN","Population":"241019","2":"241019"},{"Name":"Huaiyin","0":"Huaiyin","CountryCode":"CHN","1":"CHN","Population":"239675","2":"239675"},{"Name":"Dunhua","0":"Dunhua","CountryCode":"CHN","1":"CHN","Population":"235100","2":"235100"},{"Name":"Yanji","0":"Yanji","CountryCode":"CHN","1":"CHN","Population":"230892","2":"230892"},{"Name":"Jiangmen","0":"Jiangmen","CountryCode":"CHN","1":"CHN","Population":"230587","2":"230587"},{"Name":"Tongling","0":"Tongling","CountryCode":"CHN","1":"CHN","Population":"228017","2":"228017"},{"Name":"Suihua","0":"Suihua","CountryCode":"CHN","1":"CHN","Population":"227881","2":"227881"},{"Name":"Gongziling","0":"Gongziling","CountryCode":"CHN","1":"CHN","Population":"226569","2":"226569"},{"Name":"Xiantao","0":"Xiantao","CountryCode":"CHN","1":"CHN","Population":"222884","2":"222884"},{"Name":"Chaoyang","0":"Chaoyang","CountryCode":"CHN","1":"CHN","Population":"222394","2":"222394"},{"Name":"Ganzhou","0":"Ganzhou","CountryCode":"CHN","1":"CHN","Population":"220129","2":"220129"},{"Name":"Huzhou","0":"Huzhou","CountryCode":"CHN","1":"CHN","Population":"218071","2":"218071"},{"Name":"Baicheng","0":"Baicheng","CountryCode":"CHN","1":"CHN","Population":"217987","2":"217987"},{"Name":"Shangzi","0":"Shangzi","CountryCode":"CHN","1":"CHN","Population":"215373","2":"215373"},{"Name":"Yangjiang","0":"Yangjiang","CountryCode":"CHN","1":"CHN","Population":"215196","2":"215196"},{"Name":"Qitaihe","0":"Qitaihe","CountryCode":"CHN","1":"CHN","Population":"214957","2":"214957"},{"Name":"Gejiu","0":"Gejiu","CountryCode":"CHN","1":"CHN","Population":"214294","2":"214294"},{"Name":"Jiangyin","0":"Jiangyin","CountryCode":"CHN","1":"CHN","Population":"213659","2":"213659"},{"Name":"Hebi","0":"Hebi","CountryCode":"CHN","1":"CHN","Population":"212976","2":"212976"},{"Name":"Jiaxing","0":"Jiaxing","CountryCode":"CHN","1":"CHN","Population":"211526","2":"211526"},{"Name":"Wuzhou","0":"Wuzhou","CountryCode":"CHN","1":"CHN","Population":"210452","2":"210452"},{"Name":"Meihekou","0":"Meihekou","CountryCode":"CHN","1":"CHN","Population":"209038","2":"209038"},{"Name":"Xuchang","0":"Xuchang","CountryCode":"CHN","1":"CHN","Population":"208815","2":"208815"},{"Name":"Liaocheng","0":"Liaocheng","CountryCode":"CHN","1":"CHN","Population":"207844","2":"207844"},{"Name":"Haicheng","0":"Haicheng","CountryCode":"CHN","1":"CHN","Population":"205560","2":"205560"},{"Name":"Qianjiang","0":"Qianjiang","CountryCode":"CHN","1":"CHN","Population":"205504","2":"205504"},{"Name":"Baiyin","0":"Baiyin","CountryCode":"CHN","1":"CHN","Population":"204970","2":"204970"},{"Name":"Bei\u00b4an","0":"Bei\u00b4an","CountryCode":"CHN","1":"CHN","Population":"204899","2":"204899"},{"Name":"Yixing","0":"Yixing","CountryCode":"CHN","1":"CHN","Population":"200824","2":"200824"},{"Name":"Laizhou","0":"Laizhou","CountryCode":"CHN","1":"CHN","Population":"198664","2":"198664"},{"Name":"Qaramay","0":"Qaramay","CountryCode":"CHN","1":"CHN","Population":"197602","2":"197602"},{"Name":"Acheng","0":"Acheng","CountryCode":"CHN","1":"CHN","Population":"197595","2":"197595"},{"Name":"Dezhou","0":"Dezhou","CountryCode":"CHN","1":"CHN","Population":"195485","2":"195485"},{"Name":"Nanping","0":"Nanping","CountryCode":"CHN","1":"CHN","Population":"195064","2":"195064"},{"Name":"Zhaoqing","0":"Zhaoqing","CountryCode":"CHN","1":"CHN","Population":"194784","2":"194784"},{"Name":"Beipiao","0":"Beipiao","CountryCode":"CHN","1":"CHN","Population":"194301","2":"194301"},{"Name":"Fengcheng","0":"Fengcheng","CountryCode":"CHN","1":"CHN","Population":"193784","2":"193784"},{"Name":"Fuyu","0":"Fuyu","CountryCode":"CHN","1":"CHN","Population":"192981","2":"192981"},{"Name":"Xinyang","0":"Xinyang","CountryCode":"CHN","1":"CHN","Population":"192509","2":"192509"},{"Name":"Dongtai","0":"Dongtai","CountryCode":"CHN","1":"CHN","Population":"192247","2":"192247"},{"Name":"Yuci","0":"Yuci","CountryCode":"CHN","1":"CHN","Population":"191356","2":"191356"},{"Name":"Honghu","0":"Honghu","CountryCode":"CHN","1":"CHN","Population":"190772","2":"190772"},{"Name":"Ezhou","0":"Ezhou","CountryCode":"CHN","1":"CHN","Population":"190123","2":"190123"},{"Name":"Heze","0":"Heze","CountryCode":"CHN","1":"CHN","Population":"189293","2":"189293"},{"Name":"Daxian","0":"Daxian","CountryCode":"CHN","1":"CHN","Population":"188101","2":"188101"},{"Name":"Linfen","0":"Linfen","CountryCode":"CHN","1":"CHN","Population":"187309","2":"187309"},{"Name":"Tianmen","0":"Tianmen","CountryCode":"CHN","1":"CHN","Population":"186332","2":"186332"},{"Name":"Yiyang","0":"Yiyang","CountryCode":"CHN","1":"CHN","Population":"185818","2":"185818"},{"Name":"Quanzhou","0":"Quanzhou","CountryCode":"CHN","1":"CHN","Population":"185154","2":"185154"},{"Name":"Rizhao","0":"Rizhao","CountryCode":"CHN","1":"CHN","Population":"185048","2":"185048"},{"Name":"Deyang","0":"Deyang","CountryCode":"CHN","1":"CHN","Population":"182488","2":"182488"},{"Name":"Guangyuan","0":"Guangyuan","CountryCode":"CHN","1":"CHN","Population":"182241","2":"182241"},{"Name":"Changshu","0":"Changshu","CountryCode":"CHN","1":"CHN","Population":"181805","2":"181805"},{"Name":"Zhangzhou","0":"Zhangzhou","CountryCode":"CHN","1":"CHN","Population":"181424","2":"181424"},{"Name":"Hailar","0":"Hailar","CountryCode":"CHN","1":"CHN","Population":"180650","2":"180650"},{"Name":"Nanchong","0":"Nanchong","CountryCode":"CHN","1":"CHN","Population":"180273","2":"180273"},{"Name":"Jiutai","0":"Jiutai","CountryCode":"CHN","1":"CHN","Population":"180130","2":"180130"},{"Name":"Zhaodong","0":"Zhaodong","CountryCode":"CHN","1":"CHN","Population":"179976","2":"179976"},{"Name":"Shaoxing","0":"Shaoxing","CountryCode":"CHN","1":"CHN","Population":"179818","2":"179818"},{"Name":"Fuyang","0":"Fuyang","CountryCode":"CHN","1":"CHN","Population":"179572","2":"179572"},{"Name":"Maoming","0":"Maoming","CountryCode":"CHN","1":"CHN","Population":"178683","2":"178683"},{"Name":"Qujing","0":"Qujing","CountryCode":"CHN","1":"CHN","Population":"178669","2":"178669"},{"Name":"Ghulja","0":"Ghulja","CountryCode":"CHN","1":"CHN","Population":"177193","2":"177193"},{"Name":"Jiaohe","0":"Jiaohe","CountryCode":"CHN","1":"CHN","Population":"176367","2":"176367"},{"Name":"Puyang","0":"Puyang","CountryCode":"CHN","1":"CHN","Population":"175988","2":"175988"},{"Name":"Huadian","0":"Huadian","CountryCode":"CHN","1":"CHN","Population":"175873","2":"175873"},{"Name":"Jiangyou","0":"Jiangyou","CountryCode":"CHN","1":"CHN","Population":"175753","2":"175753"},{"Name":"Qashqar","0":"Qashqar","CountryCode":"CHN","1":"CHN","Population":"174570","2":"174570"},{"Name":"Anshun","0":"Anshun","CountryCode":"CHN","1":"CHN","Population":"174142","2":"174142"},{"Name":"Fuling","0":"Fuling","CountryCode":"CHN","1":"CHN","Population":"173878","2":"173878"},{"Name":"Xinyu","0":"Xinyu","CountryCode":"CHN","1":"CHN","Population":"173524","2":"173524"},{"Name":"Hanzhong","0":"Hanzhong","CountryCode":"CHN","1":"CHN","Population":"169930","2":"169930"},{"Name":"Danyang","0":"Danyang","CountryCode":"CHN","1":"CHN","Population":"169603","2":"169603"},{"Name":"Chenzhou","0":"Chenzhou","CountryCode":"CHN","1":"CHN","Population":"169400","2":"169400"},{"Name":"Xiaogan","0":"Xiaogan","CountryCode":"CHN","1":"CHN","Population":"166280","2":"166280"},{"Name":"Shangqiu","0":"Shangqiu","CountryCode":"CHN","1":"CHN","Population":"164880","2":"164880"},{"Name":"Zhuhai","0":"Zhuhai","CountryCode":"CHN","1":"CHN","Population":"164747","2":"164747"},{"Name":"Qingyuan","0":"Qingyuan","CountryCode":"CHN","1":"CHN","Population":"164641","2":"164641"},{"Name":"Aqsu","0":"Aqsu","CountryCode":"CHN","1":"CHN","Population":"164092","2":"164092"},{"Name":"Jining","0":"Jining","CountryCode":"CHN","1":"CHN","Population":"163552","2":"163552"},{"Name":"Xiaoshan","0":"Xiaoshan","CountryCode":"CHN","1":"CHN","Population":"162930","2":"162930"},{"Name":"Zaoyang","0":"Zaoyang","CountryCode":"CHN","1":"CHN","Population":"162198","2":"162198"},{"Name":"Xinghua","0":"Xinghua","CountryCode":"CHN","1":"CHN","Population":"161910","2":"161910"},{"Name":"Hami","0":"Hami","CountryCode":"CHN","1":"CHN","Population":"161315","2":"161315"},{"Name":"Huizhou","0":"Huizhou","CountryCode":"CHN","1":"CHN","Population":"161023","2":"161023"},{"Name":"Jinmen","0":"Jinmen","CountryCode":"CHN","1":"CHN","Population":"160794","2":"160794"},{"Name":"Sanming","0":"Sanming","CountryCode":"CHN","1":"CHN","Population":"160691","2":"160691"},{"Name":"Ulanhot","0":"Ulanhot","CountryCode":"CHN","1":"CHN","Population":"159538","2":"159538"},{"Name":"Korla","0":"Korla","CountryCode":"CHN","1":"CHN","Population":"159344","2":"159344"},{"Name":"Wanxian","0":"Wanxian","CountryCode":"CHN","1":"CHN","Population":"156823","2":"156823"},{"Name":"Rui\u00b4an","0":"Rui\u00b4an","CountryCode":"CHN","1":"CHN","Population":"156468","2":"156468"},{"Name":"Zhoushan","0":"Zhoushan","CountryCode":"CHN","1":"CHN","Population":"156317","2":"156317"},{"Name":"Liangcheng","0":"Liangcheng","CountryCode":"CHN","1":"CHN","Population":"156307","2":"156307"},{"Name":"Jiaozhou","0":"Jiaozhou","CountryCode":"CHN","1":"CHN","Population":"153364","2":"153364"},{"Name":"Taizhou","0":"Taizhou","CountryCode":"CHN","1":"CHN","Population":"152442","2":"152442"},{"Name":"Suzhou","0":"Suzhou","CountryCode":"CHN","1":"CHN","Population":"151862","2":"151862"},{"Name":"Yichun","0":"Yichun","CountryCode":"CHN","1":"CHN","Population":"151585","2":"151585"},{"Name":"Taonan","0":"Taonan","CountryCode":"CHN","1":"CHN","Population":"150168","2":"150168"},{"Name":"Pingdu","0":"Pingdu","CountryCode":"CHN","1":"CHN","Population":"150123","2":"150123"},{"Name":"Ji\u00b4an","0":"Ji\u00b4an","CountryCode":"CHN","1":"CHN","Population":"148583","2":"148583"},{"Name":"Longkou","0":"Longkou","CountryCode":"CHN","1":"CHN","Population":"148362","2":"148362"},{"Name":"Langfang","0":"Langfang","CountryCode":"CHN","1":"CHN","Population":"148105","2":"148105"},{"Name":"Zhoukou","0":"Zhoukou","CountryCode":"CHN","1":"CHN","Population":"146288","2":"146288"},{"Name":"Suining","0":"Suining","CountryCode":"CHN","1":"CHN","Population":"146086","2":"146086"},{"Name":"Yulin","0":"Yulin","CountryCode":"CHN","1":"CHN","Population":"144467","2":"144467"},{"Name":"Jinhua","0":"Jinhua","CountryCode":"CHN","1":"CHN","Population":"144280","2":"144280"},{"Name":"Liu\u00b4an","0":"Liu\u00b4an","CountryCode":"CHN","1":"CHN","Population":"144248","2":"144248"},{"Name":"Shuangcheng","0":"Shuangcheng","CountryCode":"CHN","1":"CHN","Population":"142659","2":"142659"},{"Name":"Suizhou","0":"Suizhou","CountryCode":"CHN","1":"CHN","Population":"142302","2":"142302"},{"Name":"Ankang","0":"Ankang","CountryCode":"CHN","1":"CHN","Population":"142170","2":"142170"},{"Name":"Weinan","0":"Weinan","CountryCode":"CHN","1":"CHN","Population":"140169","2":"140169"},{"Name":"Longjing","0":"Longjing","CountryCode":"CHN","1":"CHN","Population":"139417","2":"139417"},{"Name":"Da\u00b4an","0":"Da\u00b4an","CountryCode":"CHN","1":"CHN","Population":"138963","2":"138963"},{"Name":"Lengshuijiang","0":"Lengshuijiang","CountryCode":"CHN","1":"CHN","Population":"137994","2":"137994"},{"Name":"Laiyang","0":"Laiyang","CountryCode":"CHN","1":"CHN","Population":"137080","2":"137080"},{"Name":"Xianning","0":"Xianning","CountryCode":"CHN","1":"CHN","Population":"136811","2":"136811"},{"Name":"Dali","0":"Dali","CountryCode":"CHN","1":"CHN","Population":"136554","2":"136554"},{"Name":"Anda","0":"Anda","CountryCode":"CHN","1":"CHN","Population":"136446","2":"136446"},{"Name":"Jincheng","0":"Jincheng","CountryCode":"CHN","1":"CHN","Population":"136396","2":"136396"},{"Name":"Longyan","0":"Longyan","CountryCode":"CHN","1":"CHN","Population":"134481","2":"134481"},{"Name":"Xichang","0":"Xichang","CountryCode":"CHN","1":"CHN","Population":"134419","2":"134419"},{"Name":"Wendeng","0":"Wendeng","CountryCode":"CHN","1":"CHN","Population":"133910","2":"133910"},{"Name":"Hailun","0":"Hailun","CountryCode":"CHN","1":"CHN","Population":"133565","2":"133565"},{"Name":"Binzhou","0":"Binzhou","CountryCode":"CHN","1":"CHN","Population":"133555","2":"133555"},{"Name":"Linhe","0":"Linhe","CountryCode":"CHN","1":"CHN","Population":"133183","2":"133183"},{"Name":"Wuwei","0":"Wuwei","CountryCode":"CHN","1":"CHN","Population":"133101","2":"133101"},{"Name":"Duyun","0":"Duyun","CountryCode":"CHN","1":"CHN","Population":"132971","2":"132971"},{"Name":"Mishan","0":"Mishan","CountryCode":"CHN","1":"CHN","Population":"132744","2":"132744"},{"Name":"Shangrao","0":"Shangrao","CountryCode":"CHN","1":"CHN","Population":"132455","2":"132455"},{"Name":"Changji","0":"Changji","CountryCode":"CHN","1":"CHN","Population":"132260","2":"132260"},{"Name":"Meixian","0":"Meixian","CountryCode":"CHN","1":"CHN","Population":"132156","2":"132156"},{"Name":"Yushu","0":"Yushu","CountryCode":"CHN","1":"CHN","Population":"131861","2":"131861"},{"Name":"Tiefa","0":"Tiefa","CountryCode":"CHN","1":"CHN","Population":"131807","2":"131807"},{"Name":"Huai\u00b4an","0":"Huai\u00b4an","CountryCode":"CHN","1":"CHN","Population":"131149","2":"131149"},{"Name":"Leiyang","0":"Leiyang","CountryCode":"CHN","1":"CHN","Population":"130115","2":"130115"},{"Name":"Zalantun","0":"Zalantun","CountryCode":"CHN","1":"CHN","Population":"130031","2":"130031"},{"Name":"Weihai","0":"Weihai","CountryCode":"CHN","1":"CHN","Population":"128888","2":"128888"},{"Name":"Loudi","0":"Loudi","CountryCode":"CHN","1":"CHN","Population":"128418","2":"128418"},{"Name":"Qingzhou","0":"Qingzhou","CountryCode":"CHN","1":"CHN","Population":"128258","2":"128258"},{"Name":"Qidong","0":"Qidong","CountryCode":"CHN","1":"CHN","Population":"126872","2":"126872"},{"Name":"Huaihua","0":"Huaihua","CountryCode":"CHN","1":"CHN","Population":"126785","2":"126785"},{"Name":"Luohe","0":"Luohe","CountryCode":"CHN","1":"CHN","Population":"126438","2":"126438"},{"Name":"Chuzhou","0":"Chuzhou","CountryCode":"CHN","1":"CHN","Population":"125341","2":"125341"},{"Name":"Kaiyuan","0":"Kaiyuan","CountryCode":"CHN","1":"CHN","Population":"124219","2":"124219"},{"Name":"Linqing","0":"Linqing","CountryCode":"CHN","1":"CHN","Population":"123958","2":"123958"},{"Name":"Chaohu","0":"Chaohu","CountryCode":"CHN","1":"CHN","Population":"123676","2":"123676"},{"Name":"Laohekou","0":"Laohekou","CountryCode":"CHN","1":"CHN","Population":"123366","2":"123366"},{"Name":"Dujiangyan","0":"Dujiangyan","CountryCode":"CHN","1":"CHN","Population":"123357","2":"123357"},{"Name":"Zhumadian","0":"Zhumadian","CountryCode":"CHN","1":"CHN","Population":"123232","2":"123232"},{"Name":"Linchuan","0":"Linchuan","CountryCode":"CHN","1":"CHN","Population":"121949","2":"121949"},{"Name":"Jiaonan","0":"Jiaonan","CountryCode":"CHN","1":"CHN","Population":"121397","2":"121397"},{"Name":"Sanmenxia","0":"Sanmenxia","CountryCode":"CHN","1":"CHN","Population":"120523","2":"120523"},{"Name":"Heyuan","0":"Heyuan","CountryCode":"CHN","1":"CHN","Population":"120101","2":"120101"},{"Name":"Manzhouli","0":"Manzhouli","CountryCode":"CHN","1":"CHN","Population":"120023","2":"120023"},{"Name":"Lhasa","0":"Lhasa","CountryCode":"CHN","1":"CHN","Population":"120000","2":"120000"},{"Name":"Lianyuan","0":"Lianyuan","CountryCode":"CHN","1":"CHN","Population":"118858","2":"118858"},{"Name":"Kuytun","0":"Kuytun","CountryCode":"CHN","1":"CHN","Population":"118553","2":"118553"},{"Name":"Puqi","0":"Puqi","CountryCode":"CHN","1":"CHN","Population":"117264","2":"117264"},{"Name":"Hongjiang","0":"Hongjiang","CountryCode":"CHN","1":"CHN","Population":"116188","2":"116188"},{"Name":"Qinzhou","0":"Qinzhou","CountryCode":"CHN","1":"CHN","Population":"114586","2":"114586"},{"Name":"Renqiu","0":"Renqiu","CountryCode":"CHN","1":"CHN","Population":"114256","2":"114256"},{"Name":"Yuyao","0":"Yuyao","CountryCode":"CHN","1":"CHN","Population":"114065","2":"114065"},{"Name":"Guigang","0":"Guigang","CountryCode":"CHN","1":"CHN","Population":"114025","2":"114025"},{"Name":"Kaili","0":"Kaili","CountryCode":"CHN","1":"CHN","Population":"113958","2":"113958"},{"Name":"Yan\u00b4an","0":"Yan\u00b4an","CountryCode":"CHN","1":"CHN","Population":"113277","2":"113277"},{"Name":"Beihai","0":"Beihai","CountryCode":"CHN","1":"CHN","Population":"112673","2":"112673"},{"Name":"Xuangzhou","0":"Xuangzhou","CountryCode":"CHN","1":"CHN","Population":"112673","2":"112673"},{"Name":"Quzhou","0":"Quzhou","CountryCode":"CHN","1":"CHN","Population":"112373","2":"112373"},{"Name":"Yong\u00b4an","0":"Yong\u00b4an","CountryCode":"CHN","1":"CHN","Population":"111762","2":"111762"},{"Name":"Zixing","0":"Zixing","CountryCode":"CHN","1":"CHN","Population":"110048","2":"110048"},{"Name":"Liyang","0":"Liyang","CountryCode":"CHN","1":"CHN","Population":"109520","2":"109520"},{"Name":"Yizheng","0":"Yizheng","CountryCode":"CHN","1":"CHN","Population":"109268","2":"109268"},{"Name":"Yumen","0":"Yumen","CountryCode":"CHN","1":"CHN","Population":"109234","2":"109234"},{"Name":"Liling","0":"Liling","CountryCode":"CHN","1":"CHN","Population":"108504","2":"108504"},{"Name":"Yuncheng","0":"Yuncheng","CountryCode":"CHN","1":"CHN","Population":"108359","2":"108359"},{"Name":"Shanwei","0":"Shanwei","CountryCode":"CHN","1":"CHN","Population":"107847","2":"107847"},{"Name":"Cixi","0":"Cixi","CountryCode":"CHN","1":"CHN","Population":"107329","2":"107329"},{"Name":"Yuanjiang","0":"Yuanjiang","CountryCode":"CHN","1":"CHN","Population":"107004","2":"107004"},{"Name":"Bozhou","0":"Bozhou","CountryCode":"CHN","1":"CHN","Population":"106346","2":"106346"},{"Name":"Jinchang","0":"Jinchang","CountryCode":"CHN","1":"CHN","Population":"105287","2":"105287"},{"Name":"Fu\u00b4an","0":"Fu\u00b4an","CountryCode":"CHN","1":"CHN","Population":"105265","2":"105265"},{"Name":"Suqian","0":"Suqian","CountryCode":"CHN","1":"CHN","Population":"105021","2":"105021"},{"Name":"Shishou","0":"Shishou","CountryCode":"CHN","1":"CHN","Population":"104571","2":"104571"},{"Name":"Hengshui","0":"Hengshui","CountryCode":"CHN","1":"CHN","Population":"104269","2":"104269"},{"Name":"Danjiangkou","0":"Danjiangkou","CountryCode":"CHN","1":"CHN","Population":"103211","2":"103211"},{"Name":"Fujin","0":"Fujin","CountryCode":"CHN","1":"CHN","Population":"103104","2":"103104"},{"Name":"Sanya","0":"Sanya","CountryCode":"CHN","1":"CHN","Population":"102820","2":"102820"},{"Name":"Guangshui","0":"Guangshui","CountryCode":"CHN","1":"CHN","Population":"102770","2":"102770"},{"Name":"Huangshan","0":"Huangshan","CountryCode":"CHN","1":"CHN","Population":"102628","2":"102628"},{"Name":"Xingcheng","0":"Xingcheng","CountryCode":"CHN","1":"CHN","Population":"102384","2":"102384"},{"Name":"Zhucheng","0":"Zhucheng","CountryCode":"CHN","1":"CHN","Population":"102134","2":"102134"},{"Name":"Kunshan","0":"Kunshan","CountryCode":"CHN","1":"CHN","Population":"102052","2":"102052"},{"Name":"Haining","0":"Haining","CountryCode":"CHN","1":"CHN","Population":"100478","2":"100478"},{"Name":"Pingliang","0":"Pingliang","CountryCode":"CHN","1":"CHN","Population":"99265","2":"99265"},{"Name":"Fuqing","0":"Fuqing","CountryCode":"CHN","1":"CHN","Population":"99193","2":"99193"},{"Name":"Xinzhou","0":"Xinzhou","CountryCode":"CHN","1":"CHN","Population":"98667","2":"98667"},{"Name":"Jieyang","0":"Jieyang","CountryCode":"CHN","1":"CHN","Population":"98531","2":"98531"},{"Name":"Zhangjiagang","0":"Zhangjiagang","CountryCode":"CHN","1":"CHN","Population":"97994","2":"97994"},{"Name":"Tong Xian","0":"Tong Xian","CountryCode":"CHN","1":"CHN","Population":"97168","2":"97168"},{"Name":"Ya\u00b4an","0":"Ya\u00b4an","CountryCode":"CHN","1":"CHN","Population":"95900","2":"95900"},{"Name":"Jinzhou","0":"Jinzhou","CountryCode":"CHN","1":"CHN","Population":"95761","2":"95761"},{"Name":"Emeishan","0":"Emeishan","CountryCode":"CHN","1":"CHN","Population":"94000","2":"94000"},{"Name":"Enshi","0":"Enshi","CountryCode":"CHN","1":"CHN","Population":"93056","2":"93056"},{"Name":"Bose","0":"Bose","CountryCode":"CHN","1":"CHN","Population":"93009","2":"93009"},{"Name":"Yuzhou","0":"Yuzhou","CountryCode":"CHN","1":"CHN","Population":"92889","2":"92889"},{"Name":"Kaiyuan","0":"Kaiyuan","CountryCode":"CHN","1":"CHN","Population":"91999","2":"91999"},{"Name":"Tumen","0":"Tumen","CountryCode":"CHN","1":"CHN","Population":"91471","2":"91471"},{"Name":"Putian","0":"Putian","CountryCode":"CHN","1":"CHN","Population":"91030","2":"91030"},{"Name":"Linhai","0":"Linhai","CountryCode":"CHN","1":"CHN","Population":"90870","2":"90870"},{"Name":"Xilin Hot","0":"Xilin Hot","CountryCode":"CHN","1":"CHN","Population":"90646","2":"90646"},{"Name":"Shaowu","0":"Shaowu","CountryCode":"CHN","1":"CHN","Population":"90286","2":"90286"},{"Name":"Junan","0":"Junan","CountryCode":"CHN","1":"CHN","Population":"90222","2":"90222"},{"Name":"Huaying","0":"Huaying","CountryCode":"CHN","1":"CHN","Population":"89400","2":"89400"},{"Name":"Pingyi","0":"Pingyi","CountryCode":"CHN","1":"CHN","Population":"89373","2":"89373"},{"Name":"Huangyan","0":"Huangyan","CountryCode":"CHN","1":"CHN","Population":"89288","2":"89288"},{"Name":"Bishkek","0":"Bishkek","CountryCode":"KGZ","1":"KGZ","Population":"589400","2":"589400"},{"Name":"Osh","0":"Osh","CountryCode":"KGZ","1":"KGZ","Population":"222700","2":"222700"},{"Name":"Bikenibeu","0":"Bikenibeu","CountryCode":"KIR","1":"KIR","Population":"5055","2":"5055"},{"Name":"Bairiki","0":"Bairiki","CountryCode":"KIR","1":"KIR","Population":"2226","2":"2226"},{"Name":"Santaf\u00e9 de Bogot\u00e1","0":"Santaf\u00e9 de Bogot\u00e1","CountryCode":"COL","1":"COL","Population":"6260862","2":"6260862"},{"Name":"Cali","0":"Cali","CountryCode":"COL","1":"COL","Population":"2077386","2":"2077386"},{"Name":"Medell\u00edn","0":"Medell\u00edn","CountryCode":"COL","1":"COL","Population":"1861265","2":"1861265"},{"Name":"Barranquilla","0":"Barranquilla","CountryCode":"COL","1":"COL","Population":"1223260","2":"1223260"},{"Name":"Cartagena","0":"Cartagena","CountryCode":"COL","1":"COL","Population":"805757","2":"805757"},{"Name":"C\u00facuta","0":"C\u00facuta","CountryCode":"COL","1":"COL","Population":"606932","2":"606932"},{"Name":"Bucaramanga","0":"Bucaramanga","CountryCode":"COL","1":"COL","Population":"515555","2":"515555"},{"Name":"Ibagu\u00e9","0":"Ibagu\u00e9","CountryCode":"COL","1":"COL","Population":"393664","2":"393664"},{"Name":"Pereira","0":"Pereira","CountryCode":"COL","1":"COL","Population":"381725","2":"381725"},{"Name":"Santa Marta","0":"Santa Marta","CountryCode":"COL","1":"COL","Population":"359147","2":"359147"},{"Name":"Manizales","0":"Manizales","CountryCode":"COL","1":"COL","Population":"337580","2":"337580"},{"Name":"Bello","0":"Bello","CountryCode":"COL","1":"COL","Population":"333470","2":"333470"},{"Name":"Pasto","0":"Pasto","CountryCode":"COL","1":"COL","Population":"332396","2":"332396"},{"Name":"Neiva","0":"Neiva","CountryCode":"COL","1":"COL","Population":"300052","2":"300052"},{"Name":"Soledad","0":"Soledad","CountryCode":"COL","1":"COL","Population":"295058","2":"295058"},{"Name":"Armenia","0":"Armenia","CountryCode":"COL","1":"COL","Population":"288977","2":"288977"},{"Name":"Villavicencio","0":"Villavicencio","CountryCode":"COL","1":"COL","Population":"273140","2":"273140"},{"Name":"Soacha","0":"Soacha","CountryCode":"COL","1":"COL","Population":"272058","2":"272058"},{"Name":"Valledupar","0":"Valledupar","CountryCode":"COL","1":"COL","Population":"263247","2":"263247"},{"Name":"Monter\u00eda","0":"Monter\u00eda","CountryCode":"COL","1":"COL","Population":"248245","2":"248245"},{"Name":"Itag\u00fc\u00ed","0":"Itag\u00fc\u00ed","CountryCode":"COL","1":"COL","Population":"228985","2":"228985"},{"Name":"Palmira","0":"Palmira","CountryCode":"COL","1":"COL","Population":"226509","2":"226509"},{"Name":"Buenaventura","0":"Buenaventura","CountryCode":"COL","1":"COL","Population":"224336","2":"224336"},{"Name":"Floridablanca","0":"Floridablanca","CountryCode":"COL","1":"COL","Population":"221913","2":"221913"},{"Name":"Sincelejo","0":"Sincelejo","CountryCode":"COL","1":"COL","Population":"220704","2":"220704"},{"Name":"Popay\u00e1n","0":"Popay\u00e1n","CountryCode":"COL","1":"COL","Population":"200719","2":"200719"},{"Name":"Barrancabermeja","0":"Barrancabermeja","CountryCode":"COL","1":"COL","Population":"178020","2":"178020"},{"Name":"Dos Quebradas","0":"Dos Quebradas","CountryCode":"COL","1":"COL","Population":"159363","2":"159363"},{"Name":"Tulu\u00e1","0":"Tulu\u00e1","CountryCode":"COL","1":"COL","Population":"152488","2":"152488"},{"Name":"Envigado","0":"Envigado","CountryCode":"COL","1":"COL","Population":"135848","2":"135848"},{"Name":"Cartago","0":"Cartago","CountryCode":"COL","1":"COL","Population":"125884","2":"125884"},{"Name":"Girardot","0":"Girardot","CountryCode":"COL","1":"COL","Population":"110963","2":"110963"},{"Name":"Buga","0":"Buga","CountryCode":"COL","1":"COL","Population":"110699","2":"110699"},{"Name":"Tunja","0":"Tunja","CountryCode":"COL","1":"COL","Population":"109740","2":"109740"},{"Name":"Florencia","0":"Florencia","CountryCode":"COL","1":"COL","Population":"108574","2":"108574"},{"Name":"Maicao","0":"Maicao","CountryCode":"COL","1":"COL","Population":"108053","2":"108053"},{"Name":"Sogamoso","0":"Sogamoso","CountryCode":"COL","1":"COL","Population":"107728","2":"107728"},{"Name":"Giron","0":"Giron","CountryCode":"COL","1":"COL","Population":"90688","2":"90688"},{"Name":"Moroni","0":"Moroni","CountryCode":"COM","1":"COM","Population":"36000","2":"36000"},{"Name":"Brazzaville","0":"Brazzaville","CountryCode":"COG","1":"COG","Population":"950000","2":"950000"},{"Name":"Pointe-Noire","0":"Pointe-Noire","CountryCode":"COG","1":"COG","Population":"500000","2":"500000"},{"Name":"Kinshasa","0":"Kinshasa","CountryCode":"COD","1":"COD","Population":"5064000","2":"5064000"},{"Name":"Lubumbashi","0":"Lubumbashi","CountryCode":"COD","1":"COD","Population":"851381","2":"851381"},{"Name":"Mbuji-Mayi","0":"Mbuji-Mayi","CountryCode":"COD","1":"COD","Population":"806475","2":"806475"},{"Name":"Kolwezi","0":"Kolwezi","CountryCode":"COD","1":"COD","Population":"417810","2":"417810"},{"Name":"Kisangani","0":"Kisangani","CountryCode":"COD","1":"COD","Population":"417517","2":"417517"},{"Name":"Kananga","0":"Kananga","CountryCode":"COD","1":"COD","Population":"393030","2":"393030"},{"Name":"Likasi","0":"Likasi","CountryCode":"COD","1":"COD","Population":"299118","2":"299118"},{"Name":"Bukavu","0":"Bukavu","CountryCode":"COD","1":"COD","Population":"201569","2":"201569"},{"Name":"Kikwit","0":"Kikwit","CountryCode":"COD","1":"COD","Population":"182142","2":"182142"},{"Name":"Tshikapa","0":"Tshikapa","CountryCode":"COD","1":"COD","Population":"180860","2":"180860"},{"Name":"Matadi","0":"Matadi","CountryCode":"COD","1":"COD","Population":"172730","2":"172730"},{"Name":"Mbandaka","0":"Mbandaka","CountryCode":"COD","1":"COD","Population":"169841","2":"169841"},{"Name":"Mwene-Ditu","0":"Mwene-Ditu","CountryCode":"COD","1":"COD","Population":"137459","2":"137459"},{"Name":"Boma","0":"Boma","CountryCode":"COD","1":"COD","Population":"135284","2":"135284"},{"Name":"Uvira","0":"Uvira","CountryCode":"COD","1":"COD","Population":"115590","2":"115590"},{"Name":"Butembo","0":"Butembo","CountryCode":"COD","1":"COD","Population":"109406","2":"109406"},{"Name":"Goma","0":"Goma","CountryCode":"COD","1":"COD","Population":"109094","2":"109094"},{"Name":"Kalemie","0":"Kalemie","CountryCode":"COD","1":"COD","Population":"101309","2":"101309"},{"Name":"Bantam","0":"Bantam","CountryCode":"CCK","1":"CCK","Population":"503","2":"503"},{"Name":"West Island","0":"West Island","CountryCode":"CCK","1":"CCK","Population":"167","2":"167"},{"Name":"Pyongyang","0":"Pyongyang","CountryCode":"PRK","1":"PRK","Population":"2484000","2":"2484000"},{"Name":"Hamhung","0":"Hamhung","CountryCode":"PRK","1":"PRK","Population":"709730","2":"709730"},{"Name":"Chongjin","0":"Chongjin","CountryCode":"PRK","1":"PRK","Population":"582480","2":"582480"},{"Name":"Nampo","0":"Nampo","CountryCode":"PRK","1":"PRK","Population":"566200","2":"566200"},{"Name":"Sinuiju","0":"Sinuiju","CountryCode":"PRK","1":"PRK","Population":"326011","2":"326011"},{"Name":"Wonsan","0":"Wonsan","CountryCode":"PRK","1":"PRK","Population":"300148","2":"300148"},{"Name":"Phyongsong","0":"Phyongsong","CountryCode":"PRK","1":"PRK","Population":"272934","2":"272934"},{"Name":"Sariwon","0":"Sariwon","CountryCode":"PRK","1":"PRK","Population":"254146","2":"254146"},{"Name":"Haeju","0":"Haeju","CountryCode":"PRK","1":"PRK","Population":"229172","2":"229172"},{"Name":"Kanggye","0":"Kanggye","CountryCode":"PRK","1":"PRK","Population":"223410","2":"223410"},{"Name":"Kimchaek","0":"Kimchaek","CountryCode":"PRK","1":"PRK","Population":"179000","2":"179000"},{"Name":"Hyesan","0":"Hyesan","CountryCode":"PRK","1":"PRK","Population":"178020","2":"178020"},{"Name":"Kaesong","0":"Kaesong","CountryCode":"PRK","1":"PRK","Population":"171500","2":"171500"},{"Name":"Seoul","0":"Seoul","CountryCode":"KOR","1":"KOR","Population":"9981619","2":"9981619"},{"Name":"Pusan","0":"Pusan","CountryCode":"KOR","1":"KOR","Population":"3804522","2":"3804522"},{"Name":"Inchon","0":"Inchon","CountryCode":"KOR","1":"KOR","Population":"2559424","2":"2559424"},{"Name":"Taegu","0":"Taegu","CountryCode":"KOR","1":"KOR","Population":"2548568","2":"2548568"},{"Name":"Taejon","0":"Taejon","CountryCode":"KOR","1":"KOR","Population":"1425835","2":"1425835"},{"Name":"Kwangju","0":"Kwangju","CountryCode":"KOR","1":"KOR","Population":"1368341","2":"1368341"},{"Name":"Ulsan","0":"Ulsan","CountryCode":"KOR","1":"KOR","Population":"1084891","2":"1084891"},{"Name":"Songnam","0":"Songnam","CountryCode":"KOR","1":"KOR","Population":"869094","2":"869094"},{"Name":"Puchon","0":"Puchon","CountryCode":"KOR","1":"KOR","Population":"779412","2":"779412"},{"Name":"Suwon","0":"Suwon","CountryCode":"KOR","1":"KOR","Population":"755550","2":"755550"},{"Name":"Anyang","0":"Anyang","CountryCode":"KOR","1":"KOR","Population":"591106","2":"591106"},{"Name":"Chonju","0":"Chonju","CountryCode":"KOR","1":"KOR","Population":"563153","2":"563153"},{"Name":"Chongju","0":"Chongju","CountryCode":"KOR","1":"KOR","Population":"531376","2":"531376"},{"Name":"Koyang","0":"Koyang","CountryCode":"KOR","1":"KOR","Population":"518282","2":"518282"},{"Name":"Ansan","0":"Ansan","CountryCode":"KOR","1":"KOR","Population":"510314","2":"510314"},{"Name":"Pohang","0":"Pohang","CountryCode":"KOR","1":"KOR","Population":"508899","2":"508899"},{"Name":"Chang-won","0":"Chang-won","CountryCode":"KOR","1":"KOR","Population":"481694","2":"481694"},{"Name":"Masan","0":"Masan","CountryCode":"KOR","1":"KOR","Population":"441242","2":"441242"},{"Name":"Kwangmyong","0":"Kwangmyong","CountryCode":"KOR","1":"KOR","Population":"350914","2":"350914"},{"Name":"Chonan","0":"Chonan","CountryCode":"KOR","1":"KOR","Population":"330259","2":"330259"},{"Name":"Chinju","0":"Chinju","CountryCode":"KOR","1":"KOR","Population":"329886","2":"329886"},{"Name":"Iksan","0":"Iksan","CountryCode":"KOR","1":"KOR","Population":"322685","2":"322685"},{"Name":"Pyongtaek","0":"Pyongtaek","CountryCode":"KOR","1":"KOR","Population":"312927","2":"312927"},{"Name":"Kumi","0":"Kumi","CountryCode":"KOR","1":"KOR","Population":"311431","2":"311431"},{"Name":"Uijongbu","0":"Uijongbu","CountryCode":"KOR","1":"KOR","Population":"276111","2":"276111"},{"Name":"Kyongju","0":"Kyongju","CountryCode":"KOR","1":"KOR","Population":"272968","2":"272968"},{"Name":"Kunsan","0":"Kunsan","CountryCode":"KOR","1":"KOR","Population":"266569","2":"266569"},{"Name":"Cheju","0":"Cheju","CountryCode":"KOR","1":"KOR","Population":"258511","2":"258511"},{"Name":"Kimhae","0":"Kimhae","CountryCode":"KOR","1":"KOR","Population":"256370","2":"256370"},{"Name":"Sunchon","0":"Sunchon","CountryCode":"KOR","1":"KOR","Population":"249263","2":"249263"},{"Name":"Mokpo","0":"Mokpo","CountryCode":"KOR","1":"KOR","Population":"247452","2":"247452"},{"Name":"Yong-in","0":"Yong-in","CountryCode":"KOR","1":"KOR","Population":"242643","2":"242643"},{"Name":"Wonju","0":"Wonju","CountryCode":"KOR","1":"KOR","Population":"237460","2":"237460"},{"Name":"Kunpo","0":"Kunpo","CountryCode":"KOR","1":"KOR","Population":"235233","2":"235233"},{"Name":"Chunchon","0":"Chunchon","CountryCode":"KOR","1":"KOR","Population":"234528","2":"234528"},{"Name":"Namyangju","0":"Namyangju","CountryCode":"KOR","1":"KOR","Population":"229060","2":"229060"},{"Name":"Kangnung","0":"Kangnung","CountryCode":"KOR","1":"KOR","Population":"220403","2":"220403"},{"Name":"Chungju","0":"Chungju","CountryCode":"KOR","1":"KOR","Population":"205206","2":"205206"},{"Name":"Andong","0":"Andong","CountryCode":"KOR","1":"KOR","Population":"188443","2":"188443"},{"Name":"Yosu","0":"Yosu","CountryCode":"KOR","1":"KOR","Population":"183596","2":"183596"},{"Name":"Kyongsan","0":"Kyongsan","CountryCode":"KOR","1":"KOR","Population":"173746","2":"173746"},{"Name":"Paju","0":"Paju","CountryCode":"KOR","1":"KOR","Population":"163379","2":"163379"},{"Name":"Yangsan","0":"Yangsan","CountryCode":"KOR","1":"KOR","Population":"163351","2":"163351"},{"Name":"Ichon","0":"Ichon","CountryCode":"KOR","1":"KOR","Population":"155332","2":"155332"},{"Name":"Asan","0":"Asan","CountryCode":"KOR","1":"KOR","Population":"154663","2":"154663"},{"Name":"Koje","0":"Koje","CountryCode":"KOR","1":"KOR","Population":"147562","2":"147562"},{"Name":"Kimchon","0":"Kimchon","CountryCode":"KOR","1":"KOR","Population":"147027","2":"147027"},{"Name":"Nonsan","0":"Nonsan","CountryCode":"KOR","1":"KOR","Population":"146619","2":"146619"},{"Name":"Kuri","0":"Kuri","CountryCode":"KOR","1":"KOR","Population":"142173","2":"142173"},{"Name":"Chong-up","0":"Chong-up","CountryCode":"KOR","1":"KOR","Population":"139111","2":"139111"},{"Name":"Chechon","0":"Chechon","CountryCode":"KOR","1":"KOR","Population":"137070","2":"137070"},{"Name":"Sosan","0":"Sosan","CountryCode":"KOR","1":"KOR","Population":"134746","2":"134746"},{"Name":"Shihung","0":"Shihung","CountryCode":"KOR","1":"KOR","Population":"133443","2":"133443"},{"Name":"Tong-yong","0":"Tong-yong","CountryCode":"KOR","1":"KOR","Population":"131717","2":"131717"},{"Name":"Kongju","0":"Kongju","CountryCode":"KOR","1":"KOR","Population":"131229","2":"131229"},{"Name":"Yongju","0":"Yongju","CountryCode":"KOR","1":"KOR","Population":"131097","2":"131097"},{"Name":"Chinhae","0":"Chinhae","CountryCode":"KOR","1":"KOR","Population":"125997","2":"125997"},{"Name":"Sangju","0":"Sangju","CountryCode":"KOR","1":"KOR","Population":"124116","2":"124116"},{"Name":"Poryong","0":"Poryong","CountryCode":"KOR","1":"KOR","Population":"122604","2":"122604"},{"Name":"Kwang-yang","0":"Kwang-yang","CountryCode":"KOR","1":"KOR","Population":"122052","2":"122052"},{"Name":"Miryang","0":"Miryang","CountryCode":"KOR","1":"KOR","Population":"121501","2":"121501"},{"Name":"Hanam","0":"Hanam","CountryCode":"KOR","1":"KOR","Population":"115812","2":"115812"},{"Name":"Kimje","0":"Kimje","CountryCode":"KOR","1":"KOR","Population":"115427","2":"115427"},{"Name":"Yongchon","0":"Yongchon","CountryCode":"KOR","1":"KOR","Population":"113511","2":"113511"},{"Name":"Sachon","0":"Sachon","CountryCode":"KOR","1":"KOR","Population":"113494","2":"113494"},{"Name":"Uiwang","0":"Uiwang","CountryCode":"KOR","1":"KOR","Population":"108788","2":"108788"},{"Name":"Naju","0":"Naju","CountryCode":"KOR","1":"KOR","Population":"107831","2":"107831"},{"Name":"Namwon","0":"Namwon","CountryCode":"KOR","1":"KOR","Population":"103544","2":"103544"},{"Name":"Tonghae","0":"Tonghae","CountryCode":"KOR","1":"KOR","Population":"95472","2":"95472"},{"Name":"Mun-gyong","0":"Mun-gyong","CountryCode":"KOR","1":"KOR","Population":"92239","2":"92239"},{"Name":"Athenai","0":"Athenai","CountryCode":"GRC","1":"GRC","Population":"772072","2":"772072"},{"Name":"Thessaloniki","0":"Thessaloniki","CountryCode":"GRC","1":"GRC","Population":"383967","2":"383967"},{"Name":"Pireus","0":"Pireus","CountryCode":"GRC","1":"GRC","Population":"182671","2":"182671"},{"Name":"Patras","0":"Patras","CountryCode":"GRC","1":"GRC","Population":"153344","2":"153344"},{"Name":"Peristerion","0":"Peristerion","CountryCode":"GRC","1":"GRC","Population":"137288","2":"137288"},{"Name":"Herakleion","0":"Herakleion","CountryCode":"GRC","1":"GRC","Population":"116178","2":"116178"},{"Name":"Kallithea","0":"Kallithea","CountryCode":"GRC","1":"GRC","Population":"114233","2":"114233"},{"Name":"Larisa","0":"Larisa","CountryCode":"GRC","1":"GRC","Population":"113090","2":"113090"},{"Name":"Zagreb","0":"Zagreb","CountryCode":"HRV","1":"HRV","Population":"706770","2":"706770"},{"Name":"Split","0":"Split","CountryCode":"HRV","1":"HRV","Population":"189388","2":"189388"},{"Name":"Rijeka","0":"Rijeka","CountryCode":"HRV","1":"HRV","Population":"167964","2":"167964"},{"Name":"Osijek","0":"Osijek","CountryCode":"HRV","1":"HRV","Population":"104761","2":"104761"},{"Name":"La Habana","0":"La Habana","CountryCode":"CUB","1":"CUB","Population":"2256000","2":"2256000"},{"Name":"Santiago de Cuba","0":"Santiago de Cuba","CountryCode":"CUB","1":"CUB","Population":"433180","2":"433180"},{"Name":"Camag\u00fcey","0":"Camag\u00fcey","CountryCode":"CUB","1":"CUB","Population":"298726","2":"298726"},{"Name":"Holgu\u00edn","0":"Holgu\u00edn","CountryCode":"CUB","1":"CUB","Population":"249492","2":"249492"},{"Name":"Santa Clara","0":"Santa Clara","CountryCode":"CUB","1":"CUB","Population":"207350","2":"207350"},{"Name":"Guant\u00e1namo","0":"Guant\u00e1namo","CountryCode":"CUB","1":"CUB","Population":"205078","2":"205078"},{"Name":"Pinar del R\u00edo","0":"Pinar del R\u00edo","CountryCode":"CUB","1":"CUB","Population":"142100","2":"142100"},{"Name":"Bayamo","0":"Bayamo","CountryCode":"CUB","1":"CUB","Population":"141000","2":"141000"},{"Name":"Cienfuegos","0":"Cienfuegos","CountryCode":"CUB","1":"CUB","Population":"132770","2":"132770"},{"Name":"Victoria de las Tunas","0":"Victoria de las Tunas","CountryCode":"CUB","1":"CUB","Population":"132350","2":"132350"},{"Name":"Matanzas","0":"Matanzas","CountryCode":"CUB","1":"CUB","Population":"123273","2":"123273"},{"Name":"Manzanillo","0":"Manzanillo","CountryCode":"CUB","1":"CUB","Population":"109350","2":"109350"},{"Name":"Sancti-Sp\u00edritus","0":"Sancti-Sp\u00edritus","CountryCode":"CUB","1":"CUB","Population":"100751","2":"100751"},{"Name":"Ciego de \u00c1vila","0":"Ciego de \u00c1vila","CountryCode":"CUB","1":"CUB","Population":"98505","2":"98505"},{"Name":"al-Salimiya","0":"al-Salimiya","CountryCode":"KWT","1":"KWT","Population":"130215","2":"130215"},{"Name":"Jalib al-Shuyukh","0":"Jalib al-Shuyukh","CountryCode":"KWT","1":"KWT","Population":"102178","2":"102178"},{"Name":"Kuwait","0":"Kuwait","CountryCode":"KWT","1":"KWT","Population":"28859","2":"28859"},{"Name":"Nicosia","0":"Nicosia","CountryCode":"CYP","1":"CYP","Population":"195000","2":"195000"},{"Name":"Limassol","0":"Limassol","CountryCode":"CYP","1":"CYP","Population":"154400","2":"154400"},{"Name":"Vientiane","0":"Vientiane","CountryCode":"LAO","1":"LAO","Population":"531800","2":"531800"},{"Name":"Savannakhet","0":"Savannakhet","CountryCode":"LAO","1":"LAO","Population":"96652","2":"96652"},{"Name":"Riga","0":"Riga","CountryCode":"LVA","1":"LVA","Population":"764328","2":"764328"},{"Name":"Daugavpils","0":"Daugavpils","CountryCode":"LVA","1":"LVA","Population":"114829","2":"114829"},{"Name":"Liepaja","0":"Liepaja","CountryCode":"LVA","1":"LVA","Population":"89439","2":"89439"},{"Name":"Maseru","0":"Maseru","CountryCode":"LSO","1":"LSO","Population":"297000","2":"297000"},{"Name":"Beirut","0":"Beirut","CountryCode":"LBN","1":"LBN","Population":"1100000","2":"1100000"},{"Name":"Tripoli","0":"Tripoli","CountryCode":"LBN","1":"LBN","Population":"240000","2":"240000"},{"Name":"Monrovia","0":"Monrovia","CountryCode":"LBR","1":"LBR","Population":"850000","2":"850000"},{"Name":"Tripoli","0":"Tripoli","CountryCode":"LBY","1":"LBY","Population":"1682000","2":"1682000"},{"Name":"Bengasi","0":"Bengasi","CountryCode":"LBY","1":"LBY","Population":"804000","2":"804000"},{"Name":"Misrata","0":"Misrata","CountryCode":"LBY","1":"LBY","Population":"121669","2":"121669"},{"Name":"al-Zawiya","0":"al-Zawiya","CountryCode":"LBY","1":"LBY","Population":"89338","2":"89338"},{"Name":"Schaan","0":"Schaan","CountryCode":"LIE","1":"LIE","Population":"5346","2":"5346"},{"Name":"Vaduz","0":"Vaduz","CountryCode":"LIE","1":"LIE","Population":"5043","2":"5043"},{"Name":"Vilnius","0":"Vilnius","CountryCode":"LTU","1":"LTU","Population":"577969","2":"577969"},{"Name":"Kaunas","0":"Kaunas","CountryCode":"LTU","1":"LTU","Population":"412639","2":"412639"},{"Name":"Klaipeda","0":"Klaipeda","CountryCode":"LTU","1":"LTU","Population":"202451","2":"202451"},{"Name":"\u0160iauliai","0":"\u0160iauliai","CountryCode":"LTU","1":"LTU","Population":"146563","2":"146563"},{"Name":"Panevezys","0":"Panevezys","CountryCode":"LTU","1":"LTU","Population":"133695","2":"133695"},{"Name":"Luxembourg [Luxemburg\/L\u00ebtzebuerg]","0":"Luxembourg [Luxemburg\/L\u00ebtzebuerg]","CountryCode":"LUX","1":"LUX","Population":"80700","2":"80700"},{"Name":"El-Aai\u00fan","0":"El-Aai\u00fan","CountryCode":"ESH","1":"ESH","Population":"169000","2":"169000"},{"Name":"Macao","0":"Macao","CountryCode":"MAC","1":"MAC","Population":"437500","2":"437500"},{"Name":"Antananarivo","0":"Antananarivo","CountryCode":"MDG","1":"MDG","Population":"675669","2":"675669"},{"Name":"Toamasina","0":"Toamasina","CountryCode":"MDG","1":"MDG","Population":"127441","2":"127441"},{"Name":"Antsirab\u00e9","0":"Antsirab\u00e9","CountryCode":"MDG","1":"MDG","Population":"120239","2":"120239"},{"Name":"Mahajanga","0":"Mahajanga","CountryCode":"MDG","1":"MDG","Population":"100807","2":"100807"},{"Name":"Fianarantsoa","0":"Fianarantsoa","CountryCode":"MDG","1":"MDG","Population":"99005","2":"99005"},{"Name":"Skopje","0":"Skopje","CountryCode":"MKD","1":"MKD","Population":"444299","2":"444299"},{"Name":"Blantyre","0":"Blantyre","CountryCode":"MWI","1":"MWI","Population":"478155","2":"478155"},{"Name":"Lilongwe","0":"Lilongwe","CountryCode":"MWI","1":"MWI","Population":"435964","2":"435964"},{"Name":"Male","0":"Male","CountryCode":"MDV","1":"MDV","Population":"71000","2":"71000"},{"Name":"Kuala Lumpur","0":"Kuala Lumpur","CountryCode":"MYS","1":"MYS","Population":"1297526","2":"1297526"},{"Name":"Ipoh","0":"Ipoh","CountryCode":"MYS","1":"MYS","Population":"382853","2":"382853"},{"Name":"Johor Baharu","0":"Johor Baharu","CountryCode":"MYS","1":"MYS","Population":"328436","2":"328436"},{"Name":"Petaling Jaya","0":"Petaling Jaya","CountryCode":"MYS","1":"MYS","Population":"254350","2":"254350"},{"Name":"Kelang","0":"Kelang","CountryCode":"MYS","1":"MYS","Population":"243355","2":"243355"},{"Name":"Kuala Terengganu","0":"Kuala Terengganu","CountryCode":"MYS","1":"MYS","Population":"228119","2":"228119"},{"Name":"Pinang","0":"Pinang","CountryCode":"MYS","1":"MYS","Population":"219603","2":"219603"},{"Name":"Kota Bharu","0":"Kota Bharu","CountryCode":"MYS","1":"MYS","Population":"219582","2":"219582"},{"Name":"Kuantan","0":"Kuantan","CountryCode":"MYS","1":"MYS","Population":"199484","2":"199484"},{"Name":"Taiping","0":"Taiping","CountryCode":"MYS","1":"MYS","Population":"183261","2":"183261"},{"Name":"Seremban","0":"Seremban","CountryCode":"MYS","1":"MYS","Population":"182869","2":"182869"},{"Name":"Kuching","0":"Kuching","CountryCode":"MYS","1":"MYS","Population":"148059","2":"148059"},{"Name":"Sibu","0":"Sibu","CountryCode":"MYS","1":"MYS","Population":"126381","2":"126381"},{"Name":"Sandakan","0":"Sandakan","CountryCode":"MYS","1":"MYS","Population":"125841","2":"125841"},{"Name":"Alor Setar","0":"Alor Setar","CountryCode":"MYS","1":"MYS","Population":"124412","2":"124412"},{"Name":"Selayang Baru","0":"Selayang Baru","CountryCode":"MYS","1":"MYS","Population":"124228","2":"124228"},{"Name":"Sungai Petani","0":"Sungai Petani","CountryCode":"MYS","1":"MYS","Population":"114763","2":"114763"},{"Name":"Shah Alam","0":"Shah Alam","CountryCode":"MYS","1":"MYS","Population":"102019","2":"102019"},{"Name":"Bamako","0":"Bamako","CountryCode":"MLI","1":"MLI","Population":"809552","2":"809552"},{"Name":"Birkirkara","0":"Birkirkara","CountryCode":"MLT","1":"MLT","Population":"21445","2":"21445"},{"Name":"Valletta","0":"Valletta","CountryCode":"MLT","1":"MLT","Population":"7073","2":"7073"},{"Name":"Casablanca","0":"Casablanca","CountryCode":"MAR","1":"MAR","Population":"2940623","2":"2940623"},{"Name":"Rabat","0":"Rabat","CountryCode":"MAR","1":"MAR","Population":"623457","2":"623457"},{"Name":"Marrakech","0":"Marrakech","CountryCode":"MAR","1":"MAR","Population":"621914","2":"621914"},{"Name":"F\u00e8s","0":"F\u00e8s","CountryCode":"MAR","1":"MAR","Population":"541162","2":"541162"},{"Name":"Tanger","0":"Tanger","CountryCode":"MAR","1":"MAR","Population":"521735","2":"521735"},{"Name":"Sal\u00e9","0":"Sal\u00e9","CountryCode":"MAR","1":"MAR","Population":"504420","2":"504420"},{"Name":"Mekn\u00e8s","0":"Mekn\u00e8s","CountryCode":"MAR","1":"MAR","Population":"460000","2":"460000"},{"Name":"Oujda","0":"Oujda","CountryCode":"MAR","1":"MAR","Population":"365382","2":"365382"},{"Name":"K\u00e9nitra","0":"K\u00e9nitra","CountryCode":"MAR","1":"MAR","Population":"292600","2":"292600"},{"Name":"T\u00e9touan","0":"T\u00e9touan","CountryCode":"MAR","1":"MAR","Population":"277516","2":"277516"},{"Name":"Safi","0":"Safi","CountryCode":"MAR","1":"MAR","Population":"262300","2":"262300"},{"Name":"Agadir","0":"Agadir","CountryCode":"MAR","1":"MAR","Population":"155244","2":"155244"},{"Name":"Mohammedia","0":"Mohammedia","CountryCode":"MAR","1":"MAR","Population":"154706","2":"154706"},{"Name":"Khouribga","0":"Khouribga","CountryCode":"MAR","1":"MAR","Population":"152090","2":"152090"},{"Name":"Beni-Mellal","0":"Beni-Mellal","CountryCode":"MAR","1":"MAR","Population":"140212","2":"140212"},{"Name":"T\u00e9mara","0":"T\u00e9mara","CountryCode":"MAR","1":"MAR","Population":"126303","2":"126303"},{"Name":"El Jadida","0":"El Jadida","CountryCode":"MAR","1":"MAR","Population":"119083","2":"119083"},{"Name":"Nador","0":"Nador","CountryCode":"MAR","1":"MAR","Population":"112450","2":"112450"},{"Name":"Ksar el Kebir","0":"Ksar el Kebir","CountryCode":"MAR","1":"MAR","Population":"107065","2":"107065"},{"Name":"Settat","0":"Settat","CountryCode":"MAR","1":"MAR","Population":"96200","2":"96200"},{"Name":"Taza","0":"Taza","CountryCode":"MAR","1":"MAR","Population":"92700","2":"92700"},{"Name":"El Araich","0":"El Araich","CountryCode":"MAR","1":"MAR","Population":"90400","2":"90400"},{"Name":"Dalap-Uliga-Darrit","0":"Dalap-Uliga-Darrit","CountryCode":"MHL","1":"MHL","Population":"28000","2":"28000"},{"Name":"Fort-de-France","0":"Fort-de-France","CountryCode":"MTQ","1":"MTQ","Population":"94050","2":"94050"},{"Name":"Nouakchott","0":"Nouakchott","CountryCode":"MRT","1":"MRT","Population":"667300","2":"667300"},{"Name":"Nou\u00e2dhibou","0":"Nou\u00e2dhibou","CountryCode":"MRT","1":"MRT","Population":"97600","2":"97600"},{"Name":"Port-Louis","0":"Port-Louis","CountryCode":"MUS","1":"MUS","Population":"138200","2":"138200"},{"Name":"Beau Bassin-Rose Hill","0":"Beau Bassin-Rose Hill","CountryCode":"MUS","1":"MUS","Population":"100616","2":"100616"},{"Name":"Vacoas-Phoenix","0":"Vacoas-Phoenix","CountryCode":"MUS","1":"MUS","Population":"98464","2":"98464"},{"Name":"Mamoutzou","0":"Mamoutzou","CountryCode":"MYT","1":"MYT","Population":"12000","2":"12000"},{"Name":"Ciudad de M\u00e9xico","0":"Ciudad de M\u00e9xico","CountryCode":"MEX","1":"MEX","Population":"8591309","2":"8591309"},{"Name":"Guadalajara","0":"Guadalajara","CountryCode":"MEX","1":"MEX","Population":"1647720","2":"1647720"},{"Name":"Ecatepec de Morelos","0":"Ecatepec de Morelos","CountryCode":"MEX","1":"MEX","Population":"1620303","2":"1620303"},{"Name":"Puebla","0":"Puebla","CountryCode":"MEX","1":"MEX","Population":"1346176","2":"1346176"},{"Name":"Nezahualc\u00f3yotl","0":"Nezahualc\u00f3yotl","CountryCode":"MEX","1":"MEX","Population":"1224924","2":"1224924"},{"Name":"Ju\u00e1rez","0":"Ju\u00e1rez","CountryCode":"MEX","1":"MEX","Population":"1217818","2":"1217818"},{"Name":"Tijuana","0":"Tijuana","CountryCode":"MEX","1":"MEX","Population":"1212232","2":"1212232"},{"Name":"Le\u00f3n","0":"Le\u00f3n","CountryCode":"MEX","1":"MEX","Population":"1133576","2":"1133576"},{"Name":"Monterrey","0":"Monterrey","CountryCode":"MEX","1":"MEX","Population":"1108499","2":"1108499"},{"Name":"Zapopan","0":"Zapopan","CountryCode":"MEX","1":"MEX","Population":"1002239","2":"1002239"},{"Name":"Naucalpan de Ju\u00e1rez","0":"Naucalpan de Ju\u00e1rez","CountryCode":"MEX","1":"MEX","Population":"857511","2":"857511"},{"Name":"Mexicali","0":"Mexicali","CountryCode":"MEX","1":"MEX","Population":"764902","2":"764902"},{"Name":"Culiac\u00e1n","0":"Culiac\u00e1n","CountryCode":"MEX","1":"MEX","Population":"744859","2":"744859"},{"Name":"Acapulco de Ju\u00e1rez","0":"Acapulco de Ju\u00e1rez","CountryCode":"MEX","1":"MEX","Population":"721011","2":"721011"},{"Name":"Tlalnepantla de Baz","0":"Tlalnepantla de Baz","CountryCode":"MEX","1":"MEX","Population":"720755","2":"720755"},{"Name":"M\u00e9rida","0":"M\u00e9rida","CountryCode":"MEX","1":"MEX","Population":"703324","2":"703324"},{"Name":"Chihuahua","0":"Chihuahua","CountryCode":"MEX","1":"MEX","Population":"670208","2":"670208"},{"Name":"San Luis Potos\u00ed","0":"San Luis Potos\u00ed","CountryCode":"MEX","1":"MEX","Population":"669353","2":"669353"},{"Name":"Guadalupe","0":"Guadalupe","CountryCode":"MEX","1":"MEX","Population":"668780","2":"668780"},{"Name":"Toluca","0":"Toluca","CountryCode":"MEX","1":"MEX","Population":"665617","2":"665617"},{"Name":"Aguascalientes","0":"Aguascalientes","CountryCode":"MEX","1":"MEX","Population":"643360","2":"643360"},{"Name":"Quer\u00e9taro","0":"Quer\u00e9taro","CountryCode":"MEX","1":"MEX","Population":"639839","2":"639839"},{"Name":"Morelia","0":"Morelia","CountryCode":"MEX","1":"MEX","Population":"619958","2":"619958"},{"Name":"Hermosillo","0":"Hermosillo","CountryCode":"MEX","1":"MEX","Population":"608697","2":"608697"},{"Name":"Saltillo","0":"Saltillo","CountryCode":"MEX","1":"MEX","Population":"577352","2":"577352"},{"Name":"Torre\u00f3n","0":"Torre\u00f3n","CountryCode":"MEX","1":"MEX","Population":"529093","2":"529093"},{"Name":"Centro (Villahermosa)","0":"Centro (Villahermosa)","CountryCode":"MEX","1":"MEX","Population":"519873","2":"519873"},{"Name":"San Nicol\u00e1s de los Garza","0":"San Nicol\u00e1s de los Garza","CountryCode":"MEX","1":"MEX","Population":"495540","2":"495540"},{"Name":"Durango","0":"Durango","CountryCode":"MEX","1":"MEX","Population":"490524","2":"490524"},{"Name":"Chimalhuac\u00e1n","0":"Chimalhuac\u00e1n","CountryCode":"MEX","1":"MEX","Population":"490245","2":"490245"},{"Name":"Tlaquepaque","0":"Tlaquepaque","CountryCode":"MEX","1":"MEX","Population":"475472","2":"475472"},{"Name":"Atizap\u00e1n de Zaragoza","0":"Atizap\u00e1n de Zaragoza","CountryCode":"MEX","1":"MEX","Population":"467262","2":"467262"},{"Name":"Veracruz","0":"Veracruz","CountryCode":"MEX","1":"MEX","Population":"457119","2":"457119"},{"Name":"Cuautitl\u00e1n Izcalli","0":"Cuautitl\u00e1n Izcalli","CountryCode":"MEX","1":"MEX","Population":"452976","2":"452976"},{"Name":"Irapuato","0":"Irapuato","CountryCode":"MEX","1":"MEX","Population":"440039","2":"440039"},{"Name":"Tuxtla Guti\u00e9rrez","0":"Tuxtla Guti\u00e9rrez","CountryCode":"MEX","1":"MEX","Population":"433544","2":"433544"},{"Name":"Tultitl\u00e1n","0":"Tultitl\u00e1n","CountryCode":"MEX","1":"MEX","Population":"432411","2":"432411"},{"Name":"Reynosa","0":"Reynosa","CountryCode":"MEX","1":"MEX","Population":"419776","2":"419776"},{"Name":"Benito Ju\u00e1rez","0":"Benito Ju\u00e1rez","CountryCode":"MEX","1":"MEX","Population":"419276","2":"419276"},{"Name":"Matamoros","0":"Matamoros","CountryCode":"MEX","1":"MEX","Population":"416428","2":"416428"},{"Name":"Xalapa","0":"Xalapa","CountryCode":"MEX","1":"MEX","Population":"390058","2":"390058"},{"Name":"Celaya","0":"Celaya","CountryCode":"MEX","1":"MEX","Population":"382140","2":"382140"},{"Name":"Mazatl\u00e1n","0":"Mazatl\u00e1n","CountryCode":"MEX","1":"MEX","Population":"380265","2":"380265"},{"Name":"Ensenada","0":"Ensenada","CountryCode":"MEX","1":"MEX","Population":"369573","2":"369573"},{"Name":"Ahome","0":"Ahome","CountryCode":"MEX","1":"MEX","Population":"358663","2":"358663"},{"Name":"Cajeme","0":"Cajeme","CountryCode":"MEX","1":"MEX","Population":"355679","2":"355679"},{"Name":"Cuernavaca","0":"Cuernavaca","CountryCode":"MEX","1":"MEX","Population":"337966","2":"337966"},{"Name":"Tonal\u00e1","0":"Tonal\u00e1","CountryCode":"MEX","1":"MEX","Population":"336109","2":"336109"},{"Name":"Valle de Chalco Solidaridad","0":"Valle de Chalco Solidaridad","CountryCode":"MEX","1":"MEX","Population":"323113","2":"323113"},{"Name":"Nuevo Laredo","0":"Nuevo Laredo","CountryCode":"MEX","1":"MEX","Population":"310277","2":"310277"},{"Name":"Tepic","0":"Tepic","CountryCode":"MEX","1":"MEX","Population":"305025","2":"305025"},{"Name":"Tampico","0":"Tampico","CountryCode":"MEX","1":"MEX","Population":"294789","2":"294789"},{"Name":"Ixtapaluca","0":"Ixtapaluca","CountryCode":"MEX","1":"MEX","Population":"293160","2":"293160"},{"Name":"Apodaca","0":"Apodaca","CountryCode":"MEX","1":"MEX","Population":"282941","2":"282941"},{"Name":"Guasave","0":"Guasave","CountryCode":"MEX","1":"MEX","Population":"277201","2":"277201"},{"Name":"G\u00f3mez Palacio","0":"G\u00f3mez Palacio","CountryCode":"MEX","1":"MEX","Population":"272806","2":"272806"},{"Name":"Tapachula","0":"Tapachula","CountryCode":"MEX","1":"MEX","Population":"271141","2":"271141"},{"Name":"Nicol\u00e1s Romero","0":"Nicol\u00e1s Romero","CountryCode":"MEX","1":"MEX","Population":"269393","2":"269393"},{"Name":"Coatzacoalcos","0":"Coatzacoalcos","CountryCode":"MEX","1":"MEX","Population":"267037","2":"267037"},{"Name":"Uruapan","0":"Uruapan","CountryCode":"MEX","1":"MEX","Population":"265211","2":"265211"},{"Name":"Victoria","0":"Victoria","CountryCode":"MEX","1":"MEX","Population":"262686","2":"262686"},{"Name":"Oaxaca de Ju\u00e1rez","0":"Oaxaca de Ju\u00e1rez","CountryCode":"MEX","1":"MEX","Population":"256848","2":"256848"},{"Name":"Coacalco de Berrioz\u00e1bal","0":"Coacalco de Berrioz\u00e1bal","CountryCode":"MEX","1":"MEX","Population":"252270","2":"252270"},{"Name":"Pachuca de Soto","0":"Pachuca de Soto","CountryCode":"MEX","1":"MEX","Population":"244688","2":"244688"},{"Name":"General Escobedo","0":"General Escobedo","CountryCode":"MEX","1":"MEX","Population":"232961","2":"232961"},{"Name":"Salamanca","0":"Salamanca","CountryCode":"MEX","1":"MEX","Population":"226864","2":"226864"},{"Name":"Santa Catarina","0":"Santa Catarina","CountryCode":"MEX","1":"MEX","Population":"226573","2":"226573"},{"Name":"Tehuac\u00e1n","0":"Tehuac\u00e1n","CountryCode":"MEX","1":"MEX","Population":"225943","2":"225943"},{"Name":"Chalco","0":"Chalco","CountryCode":"MEX","1":"MEX","Population":"222201","2":"222201"},{"Name":"C\u00e1rdenas","0":"C\u00e1rdenas","CountryCode":"MEX","1":"MEX","Population":"216903","2":"216903"},{"Name":"Campeche","0":"Campeche","CountryCode":"MEX","1":"MEX","Population":"216735","2":"216735"},{"Name":"La Paz","0":"La Paz","CountryCode":"MEX","1":"MEX","Population":"213045","2":"213045"},{"Name":"Oth\u00f3n P. Blanco (Chetumal)","0":"Oth\u00f3n P. Blanco (Chetumal)","CountryCode":"MEX","1":"MEX","Population":"208014","2":"208014"},{"Name":"Texcoco","0":"Texcoco","CountryCode":"MEX","1":"MEX","Population":"203681","2":"203681"},{"Name":"La Paz","0":"La Paz","CountryCode":"MEX","1":"MEX","Population":"196708","2":"196708"},{"Name":"Metepec","0":"Metepec","CountryCode":"MEX","1":"MEX","Population":"194265","2":"194265"},{"Name":"Monclova","0":"Monclova","CountryCode":"MEX","1":"MEX","Population":"193657","2":"193657"},{"Name":"Huixquilucan","0":"Huixquilucan","CountryCode":"MEX","1":"MEX","Population":"193156","2":"193156"},{"Name":"Chilpancingo de los Bravo","0":"Chilpancingo de los Bravo","CountryCode":"MEX","1":"MEX","Population":"192509","2":"192509"},{"Name":"Puerto Vallarta","0":"Puerto Vallarta","CountryCode":"MEX","1":"MEX","Population":"183741","2":"183741"},{"Name":"Fresnillo","0":"Fresnillo","CountryCode":"MEX","1":"MEX","Population":"182744","2":"182744"},{"Name":"Ciudad Madero","0":"Ciudad Madero","CountryCode":"MEX","1":"MEX","Population":"182012","2":"182012"},{"Name":"Soledad de Graciano S\u00e1nchez","0":"Soledad de Graciano S\u00e1nchez","CountryCode":"MEX","1":"MEX","Population":"179956","2":"179956"},{"Name":"San Juan del R\u00edo","0":"San Juan del R\u00edo","CountryCode":"MEX","1":"MEX","Population":"179300","2":"179300"},{"Name":"San Felipe del Progreso","0":"San Felipe del Progreso","CountryCode":"MEX","1":"MEX","Population":"177330","2":"177330"},{"Name":"C\u00f3rdoba","0":"C\u00f3rdoba","CountryCode":"MEX","1":"MEX","Population":"176952","2":"176952"},{"Name":"Tec\u00e1mac","0":"Tec\u00e1mac","CountryCode":"MEX","1":"MEX","Population":"172410","2":"172410"},{"Name":"Ocosingo","0":"Ocosingo","CountryCode":"MEX","1":"MEX","Population":"171495","2":"171495"},{"Name":"Carmen","0":"Carmen","CountryCode":"MEX","1":"MEX","Population":"171367","2":"171367"},{"Name":"L\u00e1zaro C\u00e1rdenas","0":"L\u00e1zaro C\u00e1rdenas","CountryCode":"MEX","1":"MEX","Population":"170878","2":"170878"},{"Name":"Jiutepec","0":"Jiutepec","CountryCode":"MEX","1":"MEX","Population":"170428","2":"170428"},{"Name":"Papantla","0":"Papantla","CountryCode":"MEX","1":"MEX","Population":"170123","2":"170123"},{"Name":"Comalcalco","0":"Comalcalco","CountryCode":"MEX","1":"MEX","Population":"164640","2":"164640"},{"Name":"Zamora","0":"Zamora","CountryCode":"MEX","1":"MEX","Population":"161191","2":"161191"},{"Name":"Nogales","0":"Nogales","CountryCode":"MEX","1":"MEX","Population":"159103","2":"159103"},{"Name":"Huimanguillo","0":"Huimanguillo","CountryCode":"MEX","1":"MEX","Population":"158335","2":"158335"},{"Name":"Cuautla","0":"Cuautla","CountryCode":"MEX","1":"MEX","Population":"153132","2":"153132"},{"Name":"Minatitl\u00e1n","0":"Minatitl\u00e1n","CountryCode":"MEX","1":"MEX","Population":"152983","2":"152983"},{"Name":"Poza Rica de Hidalgo","0":"Poza Rica de Hidalgo","CountryCode":"MEX","1":"MEX","Population":"152678","2":"152678"},{"Name":"Ciudad Valles","0":"Ciudad Valles","CountryCode":"MEX","1":"MEX","Population":"146411","2":"146411"},{"Name":"Navolato","0":"Navolato","CountryCode":"MEX","1":"MEX","Population":"145396","2":"145396"},{"Name":"San Luis R\u00edo Colorado","0":"San Luis R\u00edo Colorado","CountryCode":"MEX","1":"MEX","Population":"145276","2":"145276"},{"Name":"P\u00e9njamo","0":"P\u00e9njamo","CountryCode":"MEX","1":"MEX","Population":"143927","2":"143927"},{"Name":"San Andr\u00e9s Tuxtla","0":"San Andr\u00e9s Tuxtla","CountryCode":"MEX","1":"MEX","Population":"142251","2":"142251"},{"Name":"Guanajuato","0":"Guanajuato","CountryCode":"MEX","1":"MEX","Population":"141215","2":"141215"},{"Name":"Navojoa","0":"Navojoa","CountryCode":"MEX","1":"MEX","Population":"140495","2":"140495"},{"Name":"Zit\u00e1cuaro","0":"Zit\u00e1cuaro","CountryCode":"MEX","1":"MEX","Population":"137970","2":"137970"},{"Name":"Boca del R\u00edo","0":"Boca del R\u00edo","CountryCode":"MEX","1":"MEX","Population":"135721","2":"135721"},{"Name":"Allende","0":"Allende","CountryCode":"MEX","1":"MEX","Population":"134645","2":"134645"},{"Name":"Silao","0":"Silao","CountryCode":"MEX","1":"MEX","Population":"134037","2":"134037"},{"Name":"Macuspana","0":"Macuspana","CountryCode":"MEX","1":"MEX","Population":"133795","2":"133795"},{"Name":"San Juan Bautista Tuxtepec","0":"San Juan Bautista Tuxtepec","CountryCode":"MEX","1":"MEX","Population":"133675","2":"133675"},{"Name":"San Crist\u00f3bal de las Casas","0":"San Crist\u00f3bal de las Casas","CountryCode":"MEX","1":"MEX","Population":"132317","2":"132317"},{"Name":"Valle de Santiago","0":"Valle de Santiago","CountryCode":"MEX","1":"MEX","Population":"130557","2":"130557"},{"Name":"Guaymas","0":"Guaymas","CountryCode":"MEX","1":"MEX","Population":"130108","2":"130108"},{"Name":"Colima","0":"Colima","CountryCode":"MEX","1":"MEX","Population":"129454","2":"129454"},{"Name":"Dolores Hidalgo","0":"Dolores Hidalgo","CountryCode":"MEX","1":"MEX","Population":"128675","2":"128675"},{"Name":"Lagos de Moreno","0":"Lagos de Moreno","CountryCode":"MEX","1":"MEX","Population":"127949","2":"127949"},{"Name":"Piedras Negras","0":"Piedras Negras","CountryCode":"MEX","1":"MEX","Population":"127898","2":"127898"},{"Name":"Altamira","0":"Altamira","CountryCode":"MEX","1":"MEX","Population":"127490","2":"127490"},{"Name":"T\u00faxpam","0":"T\u00faxpam","CountryCode":"MEX","1":"MEX","Population":"126475","2":"126475"},{"Name":"San Pedro Garza Garc\u00eda","0":"San Pedro Garza Garc\u00eda","CountryCode":"MEX","1":"MEX","Population":"126147","2":"126147"},{"Name":"Cuauht\u00e9moc","0":"Cuauht\u00e9moc","CountryCode":"MEX","1":"MEX","Population":"124279","2":"124279"},{"Name":"Manzanillo","0":"Manzanillo","CountryCode":"MEX","1":"MEX","Population":"124014","2":"124014"},{"Name":"Iguala de la Independencia","0":"Iguala de la Independencia","CountryCode":"MEX","1":"MEX","Population":"123883","2":"123883"},{"Name":"Zacatecas","0":"Zacatecas","CountryCode":"MEX","1":"MEX","Population":"123700","2":"123700"},{"Name":"Tlajomulco de Z\u00fa\u00f1iga","0":"Tlajomulco de Z\u00fa\u00f1iga","CountryCode":"MEX","1":"MEX","Population":"123220","2":"123220"},{"Name":"Tulancingo de Bravo","0":"Tulancingo de Bravo","CountryCode":"MEX","1":"MEX","Population":"121946","2":"121946"},{"Name":"Zinacantepec","0":"Zinacantepec","CountryCode":"MEX","1":"MEX","Population":"121715","2":"121715"},{"Name":"San Mart\u00edn Texmelucan","0":"San Mart\u00edn Texmelucan","CountryCode":"MEX","1":"MEX","Population":"121093","2":"121093"},{"Name":"Tepatitl\u00e1n de Morelos","0":"Tepatitl\u00e1n de Morelos","CountryCode":"MEX","1":"MEX","Population":"118948","2":"118948"},{"Name":"Mart\u00ednez de la Torre","0":"Mart\u00ednez de la Torre","CountryCode":"MEX","1":"MEX","Population":"118815","2":"118815"},{"Name":"Orizaba","0":"Orizaba","CountryCode":"MEX","1":"MEX","Population":"118488","2":"118488"},{"Name":"Apatzing\u00e1n","0":"Apatzing\u00e1n","CountryCode":"MEX","1":"MEX","Population":"117849","2":"117849"},{"Name":"Atlixco","0":"Atlixco","CountryCode":"MEX","1":"MEX","Population":"117019","2":"117019"},{"Name":"Delicias","0":"Delicias","CountryCode":"MEX","1":"MEX","Population":"116132","2":"116132"},{"Name":"Ixtlahuaca","0":"Ixtlahuaca","CountryCode":"MEX","1":"MEX","Population":"115548","2":"115548"},{"Name":"El Mante","0":"El Mante","CountryCode":"MEX","1":"MEX","Population":"112453","2":"112453"},{"Name":"Lerdo","0":"Lerdo","CountryCode":"MEX","1":"MEX","Population":"112272","2":"112272"},{"Name":"Almoloya de Ju\u00e1rez","0":"Almoloya de Ju\u00e1rez","CountryCode":"MEX","1":"MEX","Population":"110550","2":"110550"},{"Name":"Ac\u00e1mbaro","0":"Ac\u00e1mbaro","CountryCode":"MEX","1":"MEX","Population":"110487","2":"110487"},{"Name":"Acu\u00f1a","0":"Acu\u00f1a","CountryCode":"MEX","1":"MEX","Population":"110388","2":"110388"},{"Name":"Guadalupe","0":"Guadalupe","CountryCode":"MEX","1":"MEX","Population":"108881","2":"108881"},{"Name":"Huejutla de Reyes","0":"Huejutla de Reyes","CountryCode":"MEX","1":"MEX","Population":"108017","2":"108017"},{"Name":"Hidalgo","0":"Hidalgo","CountryCode":"MEX","1":"MEX","Population":"106198","2":"106198"},{"Name":"Los Cabos","0":"Los Cabos","CountryCode":"MEX","1":"MEX","Population":"105199","2":"105199"},{"Name":"Comit\u00e1n de Dom\u00ednguez","0":"Comit\u00e1n de Dom\u00ednguez","CountryCode":"MEX","1":"MEX","Population":"104986","2":"104986"},{"Name":"Cunduac\u00e1n","0":"Cunduac\u00e1n","CountryCode":"MEX","1":"MEX","Population":"104164","2":"104164"},{"Name":"R\u00edo Bravo","0":"R\u00edo Bravo","CountryCode":"MEX","1":"MEX","Population":"103901","2":"103901"},{"Name":"Temapache","0":"Temapache","CountryCode":"MEX","1":"MEX","Population":"102824","2":"102824"},{"Name":"Chilapa de Alvarez","0":"Chilapa de Alvarez","CountryCode":"MEX","1":"MEX","Population":"102716","2":"102716"},{"Name":"Hidalgo del Parral","0":"Hidalgo del Parral","CountryCode":"MEX","1":"MEX","Population":"100881","2":"100881"},{"Name":"San Francisco del Rinc\u00f3n","0":"San Francisco del Rinc\u00f3n","CountryCode":"MEX","1":"MEX","Population":"100149","2":"100149"},{"Name":"Taxco de Alarc\u00f3n","0":"Taxco de Alarc\u00f3n","CountryCode":"MEX","1":"MEX","Population":"99907","2":"99907"},{"Name":"Zumpango","0":"Zumpango","CountryCode":"MEX","1":"MEX","Population":"99781","2":"99781"},{"Name":"San Pedro Cholula","0":"San Pedro Cholula","CountryCode":"MEX","1":"MEX","Population":"99734","2":"99734"},{"Name":"Lerma","0":"Lerma","CountryCode":"MEX","1":"MEX","Population":"99714","2":"99714"},{"Name":"Tecom\u00e1n","0":"Tecom\u00e1n","CountryCode":"MEX","1":"MEX","Population":"99296","2":"99296"},{"Name":"Las Margaritas","0":"Las Margaritas","CountryCode":"MEX","1":"MEX","Population":"97389","2":"97389"},{"Name":"Cosoleacaque","0":"Cosoleacaque","CountryCode":"MEX","1":"MEX","Population":"97199","2":"97199"},{"Name":"San Luis de la Paz","0":"San Luis de la Paz","CountryCode":"MEX","1":"MEX","Population":"96763","2":"96763"},{"Name":"Jos\u00e9 Azueta","0":"Jos\u00e9 Azueta","CountryCode":"MEX","1":"MEX","Population":"95448","2":"95448"},{"Name":"Santiago Ixcuintla","0":"Santiago Ixcuintla","CountryCode":"MEX","1":"MEX","Population":"95311","2":"95311"},{"Name":"San Felipe","0":"San Felipe","CountryCode":"MEX","1":"MEX","Population":"95305","2":"95305"},{"Name":"Tejupilco","0":"Tejupilco","CountryCode":"MEX","1":"MEX","Population":"94934","2":"94934"},{"Name":"Tantoyuca","0":"Tantoyuca","CountryCode":"MEX","1":"MEX","Population":"94709","2":"94709"},{"Name":"Salvatierra","0":"Salvatierra","CountryCode":"MEX","1":"MEX","Population":"94322","2":"94322"},{"Name":"Tultepec","0":"Tultepec","CountryCode":"MEX","1":"MEX","Population":"93364","2":"93364"},{"Name":"Temixco","0":"Temixco","CountryCode":"MEX","1":"MEX","Population":"92686","2":"92686"},{"Name":"Matamoros","0":"Matamoros","CountryCode":"MEX","1":"MEX","Population":"91858","2":"91858"},{"Name":"P\u00e1nuco","0":"P\u00e1nuco","CountryCode":"MEX","1":"MEX","Population":"90551","2":"90551"},{"Name":"El Fuerte","0":"El Fuerte","CountryCode":"MEX","1":"MEX","Population":"89556","2":"89556"},{"Name":"Tierra Blanca","0":"Tierra Blanca","CountryCode":"MEX","1":"MEX","Population":"89143","2":"89143"},{"Name":"Weno","0":"Weno","CountryCode":"FSM","1":"FSM","Population":"22000","2":"22000"},{"Name":"Palikir","0":"Palikir","CountryCode":"FSM","1":"FSM","Population":"8600","2":"8600"},{"Name":"Chisinau","0":"Chisinau","CountryCode":"MDA","1":"MDA","Population":"719900","2":"719900"},{"Name":"Tiraspol","0":"Tiraspol","CountryCode":"MDA","1":"MDA","Population":"194300","2":"194300"},{"Name":"Balti","0":"Balti","CountryCode":"MDA","1":"MDA","Population":"153400","2":"153400"},{"Name":"Bender (T\u00eeghina)","0":"Bender (T\u00eeghina)","CountryCode":"MDA","1":"MDA","Population":"125700","2":"125700"},{"Name":"Monte-Carlo","0":"Monte-Carlo","CountryCode":"MCO","1":"MCO","Population":"13154","2":"13154"},{"Name":"Monaco-Ville","0":"Monaco-Ville","CountryCode":"MCO","1":"MCO","Population":"1234","2":"1234"},{"Name":"Ulan Bator","0":"Ulan Bator","CountryCode":"MNG","1":"MNG","Population":"773700","2":"773700"},{"Name":"Plymouth","0":"Plymouth","CountryCode":"MSR","1":"MSR","Population":"2000","2":"2000"},{"Name":"Maputo","0":"Maputo","CountryCode":"MOZ","1":"MOZ","Population":"1018938","2":"1018938"},{"Name":"Matola","0":"Matola","CountryCode":"MOZ","1":"MOZ","Population":"424662","2":"424662"},{"Name":"Beira","0":"Beira","CountryCode":"MOZ","1":"MOZ","Population":"397368","2":"397368"},{"Name":"Nampula","0":"Nampula","CountryCode":"MOZ","1":"MOZ","Population":"303346","2":"303346"},{"Name":"Chimoio","0":"Chimoio","CountryCode":"MOZ","1":"MOZ","Population":"171056","2":"171056"},{"Name":"Na\u00e7ala-Porto","0":"Na\u00e7ala-Porto","CountryCode":"MOZ","1":"MOZ","Population":"158248","2":"158248"},{"Name":"Quelimane","0":"Quelimane","CountryCode":"MOZ","1":"MOZ","Population":"150116","2":"150116"},{"Name":"Mocuba","0":"Mocuba","CountryCode":"MOZ","1":"MOZ","Population":"124700","2":"124700"},{"Name":"Tete","0":"Tete","CountryCode":"MOZ","1":"MOZ","Population":"101984","2":"101984"},{"Name":"Xai-Xai","0":"Xai-Xai","CountryCode":"MOZ","1":"MOZ","Population":"99442","2":"99442"},{"Name":"Gurue","0":"Gurue","CountryCode":"MOZ","1":"MOZ","Population":"99300","2":"99300"},{"Name":"Maxixe","0":"Maxixe","CountryCode":"MOZ","1":"MOZ","Population":"93985","2":"93985"},{"Name":"Rangoon (Yangon)","0":"Rangoon (Yangon)","CountryCode":"MMR","1":"MMR","Population":"3361700","2":"3361700"},{"Name":"Mandalay","0":"Mandalay","CountryCode":"MMR","1":"MMR","Population":"885300","2":"885300"},{"Name":"Moulmein (Mawlamyine)","0":"Moulmein (Mawlamyine)","CountryCode":"MMR","1":"MMR","Population":"307900","2":"307900"},{"Name":"Pegu (Bago)","0":"Pegu (Bago)","CountryCode":"MMR","1":"MMR","Population":"190900","2":"190900"},{"Name":"Bassein (Pathein)","0":"Bassein (Pathein)","CountryCode":"MMR","1":"MMR","Population":"183900","2":"183900"},{"Name":"Monywa","0":"Monywa","CountryCode":"MMR","1":"MMR","Population":"138600","2":"138600"},{"Name":"Sittwe (Akyab)","0":"Sittwe (Akyab)","CountryCode":"MMR","1":"MMR","Population":"137600","2":"137600"},{"Name":"Taunggyi (Taunggye)","0":"Taunggyi (Taunggye)","CountryCode":"MMR","1":"MMR","Population":"131500","2":"131500"},{"Name":"Meikhtila","0":"Meikhtila","CountryCode":"MMR","1":"MMR","Population":"129700","2":"129700"},{"Name":"Mergui (Myeik)","0":"Mergui (Myeik)","CountryCode":"MMR","1":"MMR","Population":"122700","2":"122700"},{"Name":"Lashio (Lasho)","0":"Lashio (Lasho)","CountryCode":"MMR","1":"MMR","Population":"107600","2":"107600"},{"Name":"Prome (Pyay)","0":"Prome (Pyay)","CountryCode":"MMR","1":"MMR","Population":"105700","2":"105700"},{"Name":"Henzada (Hinthada)","0":"Henzada (Hinthada)","CountryCode":"MMR","1":"MMR","Population":"104700","2":"104700"},{"Name":"Myingyan","0":"Myingyan","CountryCode":"MMR","1":"MMR","Population":"103600","2":"103600"},{"Name":"Tavoy (Dawei)","0":"Tavoy (Dawei)","CountryCode":"MMR","1":"MMR","Population":"96800","2":"96800"},{"Name":"Pagakku (Pakokku)","0":"Pagakku (Pakokku)","CountryCode":"MMR","1":"MMR","Population":"94800","2":"94800"},{"Name":"Windhoek","0":"Windhoek","CountryCode":"NAM","1":"NAM","Population":"169000","2":"169000"},{"Name":"Yangor","0":"Yangor","CountryCode":"NRU","1":"NRU","Population":"4050","2":"4050"},{"Name":"Yaren","0":"Yaren","CountryCode":"NRU","1":"NRU","Population":"559","2":"559"},{"Name":"Kathmandu","0":"Kathmandu","CountryCode":"NPL","1":"NPL","Population":"591835","2":"591835"},{"Name":"Biratnagar","0":"Biratnagar","CountryCode":"NPL","1":"NPL","Population":"157764","2":"157764"},{"Name":"Pokhara","0":"Pokhara","CountryCode":"NPL","1":"NPL","Population":"146318","2":"146318"},{"Name":"Lalitapur","0":"Lalitapur","CountryCode":"NPL","1":"NPL","Population":"145847","2":"145847"},{"Name":"Birgunj","0":"Birgunj","CountryCode":"NPL","1":"NPL","Population":"90639","2":"90639"},{"Name":"Managua","0":"Managua","CountryCode":"NIC","1":"NIC","Population":"959000","2":"959000"},{"Name":"Le\u00f3n","0":"Le\u00f3n","CountryCode":"NIC","1":"NIC","Population":"123865","2":"123865"},{"Name":"Chinandega","0":"Chinandega","CountryCode":"NIC","1":"NIC","Population":"97387","2":"97387"},{"Name":"Masaya","0":"Masaya","CountryCode":"NIC","1":"NIC","Population":"88971","2":"88971"},{"Name":"Niamey","0":"Niamey","CountryCode":"NER","1":"NER","Population":"420000","2":"420000"},{"Name":"Zinder","0":"Zinder","CountryCode":"NER","1":"NER","Population":"120892","2":"120892"},{"Name":"Maradi","0":"Maradi","CountryCode":"NER","1":"NER","Population":"112965","2":"112965"},{"Name":"Lagos","0":"Lagos","CountryCode":"NGA","1":"NGA","Population":"1518000","2":"1518000"},{"Name":"Ibadan","0":"Ibadan","CountryCode":"NGA","1":"NGA","Population":"1432000","2":"1432000"},{"Name":"Ogbomosho","0":"Ogbomosho","CountryCode":"NGA","1":"NGA","Population":"730000","2":"730000"},{"Name":"Kano","0":"Kano","CountryCode":"NGA","1":"NGA","Population":"674100","2":"674100"},{"Name":"Oshogbo","0":"Oshogbo","CountryCode":"NGA","1":"NGA","Population":"476800","2":"476800"},{"Name":"Ilorin","0":"Ilorin","CountryCode":"NGA","1":"NGA","Population":"475800","2":"475800"},{"Name":"Abeokuta","0":"Abeokuta","CountryCode":"NGA","1":"NGA","Population":"427400","2":"427400"},{"Name":"Port Harcourt","0":"Port Harcourt","CountryCode":"NGA","1":"NGA","Population":"410000","2":"410000"},{"Name":"Zaria","0":"Zaria","CountryCode":"NGA","1":"NGA","Population":"379200","2":"379200"},{"Name":"Ilesha","0":"Ilesha","CountryCode":"NGA","1":"NGA","Population":"378400","2":"378400"},{"Name":"Onitsha","0":"Onitsha","CountryCode":"NGA","1":"NGA","Population":"371900","2":"371900"},{"Name":"Iwo","0":"Iwo","CountryCode":"NGA","1":"NGA","Population":"362000","2":"362000"},{"Name":"Ado-Ekiti","0":"Ado-Ekiti","CountryCode":"NGA","1":"NGA","Population":"359400","2":"359400"},{"Name":"Abuja","0":"Abuja","CountryCode":"NGA","1":"NGA","Population":"350100","2":"350100"},{"Name":"Kaduna","0":"Kaduna","CountryCode":"NGA","1":"NGA","Population":"342200","2":"342200"},{"Name":"Mushin","0":"Mushin","CountryCode":"NGA","1":"NGA","Population":"333200","2":"333200"},{"Name":"Maiduguri","0":"Maiduguri","CountryCode":"NGA","1":"NGA","Population":"320000","2":"320000"},{"Name":"Enugu","0":"Enugu","CountryCode":"NGA","1":"NGA","Population":"316100","2":"316100"},{"Name":"Ede","0":"Ede","CountryCode":"NGA","1":"NGA","Population":"307100","2":"307100"},{"Name":"Aba","0":"Aba","CountryCode":"NGA","1":"NGA","Population":"298900","2":"298900"},{"Name":"Ife","0":"Ife","CountryCode":"NGA","1":"NGA","Population":"296800","2":"296800"},{"Name":"Ila","0":"Ila","CountryCode":"NGA","1":"NGA","Population":"264000","2":"264000"},{"Name":"Oyo","0":"Oyo","CountryCode":"NGA","1":"NGA","Population":"256400","2":"256400"},{"Name":"Ikerre","0":"Ikerre","CountryCode":"NGA","1":"NGA","Population":"244600","2":"244600"},{"Name":"Benin City","0":"Benin City","CountryCode":"NGA","1":"NGA","Population":"229400","2":"229400"},{"Name":"Iseyin","0":"Iseyin","CountryCode":"NGA","1":"NGA","Population":"217300","2":"217300"},{"Name":"Katsina","0":"Katsina","CountryCode":"NGA","1":"NGA","Population":"206500","2":"206500"},{"Name":"Jos","0":"Jos","CountryCode":"NGA","1":"NGA","Population":"206300","2":"206300"},{"Name":"Sokoto","0":"Sokoto","CountryCode":"NGA","1":"NGA","Population":"204900","2":"204900"},{"Name":"Ilobu","0":"Ilobu","CountryCode":"NGA","1":"NGA","Population":"199000","2":"199000"},{"Name":"Offa","0":"Offa","CountryCode":"NGA","1":"NGA","Population":"197200","2":"197200"},{"Name":"Ikorodu","0":"Ikorodu","CountryCode":"NGA","1":"NGA","Population":"184900","2":"184900"},{"Name":"Ilawe-Ekiti","0":"Ilawe-Ekiti","CountryCode":"NGA","1":"NGA","Population":"184500","2":"184500"},{"Name":"Owo","0":"Owo","CountryCode":"NGA","1":"NGA","Population":"183500","2":"183500"},{"Name":"Ikirun","0":"Ikirun","CountryCode":"NGA","1":"NGA","Population":"181400","2":"181400"},{"Name":"Shaki","0":"Shaki","CountryCode":"NGA","1":"NGA","Population":"174500","2":"174500"},{"Name":"Calabar","0":"Calabar","CountryCode":"NGA","1":"NGA","Population":"174400","2":"174400"},{"Name":"Ondo","0":"Ondo","CountryCode":"NGA","1":"NGA","Population":"173600","2":"173600"},{"Name":"Akure","0":"Akure","CountryCode":"NGA","1":"NGA","Population":"162300","2":"162300"},{"Name":"Gusau","0":"Gusau","CountryCode":"NGA","1":"NGA","Population":"158000","2":"158000"},{"Name":"Ijebu-Ode","0":"Ijebu-Ode","CountryCode":"NGA","1":"NGA","Population":"156400","2":"156400"},{"Name":"Effon-Alaiye","0":"Effon-Alaiye","CountryCode":"NGA","1":"NGA","Population":"153100","2":"153100"},{"Name":"Kumo","0":"Kumo","CountryCode":"NGA","1":"NGA","Population":"148000","2":"148000"},{"Name":"Shomolu","0":"Shomolu","CountryCode":"NGA","1":"NGA","Population":"147700","2":"147700"},{"Name":"Oka-Akoko","0":"Oka-Akoko","CountryCode":"NGA","1":"NGA","Population":"142900","2":"142900"},{"Name":"Ikare","0":"Ikare","CountryCode":"NGA","1":"NGA","Population":"140800","2":"140800"},{"Name":"Sapele","0":"Sapele","CountryCode":"NGA","1":"NGA","Population":"139200","2":"139200"},{"Name":"Deba Habe","0":"Deba Habe","CountryCode":"NGA","1":"NGA","Population":"138600","2":"138600"},{"Name":"Minna","0":"Minna","CountryCode":"NGA","1":"NGA","Population":"136900","2":"136900"},{"Name":"Warri","0":"Warri","CountryCode":"NGA","1":"NGA","Population":"126100","2":"126100"},{"Name":"Bida","0":"Bida","CountryCode":"NGA","1":"NGA","Population":"125500","2":"125500"},{"Name":"Ikire","0":"Ikire","CountryCode":"NGA","1":"NGA","Population":"123300","2":"123300"},{"Name":"Makurdi","0":"Makurdi","CountryCode":"NGA","1":"NGA","Population":"123100","2":"123100"},{"Name":"Lafia","0":"Lafia","CountryCode":"NGA","1":"NGA","Population":"122500","2":"122500"},{"Name":"Inisa","0":"Inisa","CountryCode":"NGA","1":"NGA","Population":"119800","2":"119800"},{"Name":"Shagamu","0":"Shagamu","CountryCode":"NGA","1":"NGA","Population":"117200","2":"117200"},{"Name":"Awka","0":"Awka","CountryCode":"NGA","1":"NGA","Population":"111200","2":"111200"},{"Name":"Gombe","0":"Gombe","CountryCode":"NGA","1":"NGA","Population":"107800","2":"107800"},{"Name":"Igboho","0":"Igboho","CountryCode":"NGA","1":"NGA","Population":"106800","2":"106800"},{"Name":"Ejigbo","0":"Ejigbo","CountryCode":"NGA","1":"NGA","Population":"105900","2":"105900"},{"Name":"Agege","0":"Agege","CountryCode":"NGA","1":"NGA","Population":"105000","2":"105000"},{"Name":"Ise-Ekiti","0":"Ise-Ekiti","CountryCode":"NGA","1":"NGA","Population":"103400","2":"103400"},{"Name":"Ugep","0":"Ugep","CountryCode":"NGA","1":"NGA","Population":"102600","2":"102600"},{"Name":"Epe","0":"Epe","CountryCode":"NGA","1":"NGA","Population":"101000","2":"101000"},{"Name":"Alofi","0":"Alofi","CountryCode":"NIU","1":"NIU","Population":"682","2":"682"},{"Name":"Kingston","0":"Kingston","CountryCode":"NFK","1":"NFK","Population":"800","2":"800"},{"Name":"Oslo","0":"Oslo","CountryCode":"NOR","1":"NOR","Population":"508726","2":"508726"},{"Name":"Bergen","0":"Bergen","CountryCode":"NOR","1":"NOR","Population":"230948","2":"230948"},{"Name":"Trondheim","0":"Trondheim","CountryCode":"NOR","1":"NOR","Population":"150166","2":"150166"},{"Name":"Stavanger","0":"Stavanger","CountryCode":"NOR","1":"NOR","Population":"108848","2":"108848"},{"Name":"B\u00e6rum","0":"B\u00e6rum","CountryCode":"NOR","1":"NOR","Population":"101340","2":"101340"},{"Name":"Abidjan","0":"Abidjan","CountryCode":"CIV","1":"CIV","Population":"2500000","2":"2500000"},{"Name":"Bouak\u00e9","0":"Bouak\u00e9","CountryCode":"CIV","1":"CIV","Population":"329850","2":"329850"},{"Name":"Yamoussoukro","0":"Yamoussoukro","CountryCode":"CIV","1":"CIV","Population":"130000","2":"130000"},{"Name":"Daloa","0":"Daloa","CountryCode":"CIV","1":"CIV","Population":"121842","2":"121842"},{"Name":"Korhogo","0":"Korhogo","CountryCode":"CIV","1":"CIV","Population":"109445","2":"109445"},{"Name":"al-Sib","0":"al-Sib","CountryCode":"OMN","1":"OMN","Population":"155000","2":"155000"},{"Name":"Salala","0":"Salala","CountryCode":"OMN","1":"OMN","Population":"131813","2":"131813"},{"Name":"Bawshar","0":"Bawshar","CountryCode":"OMN","1":"OMN","Population":"107500","2":"107500"},{"Name":"Suhar","0":"Suhar","CountryCode":"OMN","1":"OMN","Population":"90814","2":"90814"},{"Name":"Masqat","0":"Masqat","CountryCode":"OMN","1":"OMN","Population":"51969","2":"51969"},{"Name":"Karachi","0":"Karachi","CountryCode":"PAK","1":"PAK","Population":"9269265","2":"9269265"},{"Name":"Lahore","0":"Lahore","CountryCode":"PAK","1":"PAK","Population":"5063499","2":"5063499"},{"Name":"Faisalabad","0":"Faisalabad","CountryCode":"PAK","1":"PAK","Population":"1977246","2":"1977246"},{"Name":"Rawalpindi","0":"Rawalpindi","CountryCode":"PAK","1":"PAK","Population":"1406214","2":"1406214"},{"Name":"Multan","0":"Multan","CountryCode":"PAK","1":"PAK","Population":"1182441","2":"1182441"},{"Name":"Hyderabad","0":"Hyderabad","CountryCode":"PAK","1":"PAK","Population":"1151274","2":"1151274"},{"Name":"Gujranwala","0":"Gujranwala","CountryCode":"PAK","1":"PAK","Population":"1124749","2":"1124749"},{"Name":"Peshawar","0":"Peshawar","CountryCode":"PAK","1":"PAK","Population":"988005","2":"988005"},{"Name":"Quetta","0":"Quetta","CountryCode":"PAK","1":"PAK","Population":"560307","2":"560307"},{"Name":"Islamabad","0":"Islamabad","CountryCode":"PAK","1":"PAK","Population":"524500","2":"524500"},{"Name":"Sargodha","0":"Sargodha","CountryCode":"PAK","1":"PAK","Population":"455360","2":"455360"},{"Name":"Sialkot","0":"Sialkot","CountryCode":"PAK","1":"PAK","Population":"417597","2":"417597"},{"Name":"Bahawalpur","0":"Bahawalpur","CountryCode":"PAK","1":"PAK","Population":"403408","2":"403408"},{"Name":"Sukkur","0":"Sukkur","CountryCode":"PAK","1":"PAK","Population":"329176","2":"329176"},{"Name":"Jhang","0":"Jhang","CountryCode":"PAK","1":"PAK","Population":"292214","2":"292214"},{"Name":"Sheikhupura","0":"Sheikhupura","CountryCode":"PAK","1":"PAK","Population":"271875","2":"271875"},{"Name":"Larkana","0":"Larkana","CountryCode":"PAK","1":"PAK","Population":"270366","2":"270366"},{"Name":"Gujrat","0":"Gujrat","CountryCode":"PAK","1":"PAK","Population":"250121","2":"250121"},{"Name":"Mardan","0":"Mardan","CountryCode":"PAK","1":"PAK","Population":"244511","2":"244511"},{"Name":"Kasur","0":"Kasur","CountryCode":"PAK","1":"PAK","Population":"241649","2":"241649"},{"Name":"Rahim Yar Khan","0":"Rahim Yar Khan","CountryCode":"PAK","1":"PAK","Population":"228479","2":"228479"},{"Name":"Sahiwal","0":"Sahiwal","CountryCode":"PAK","1":"PAK","Population":"207388","2":"207388"},{"Name":"Okara","0":"Okara","CountryCode":"PAK","1":"PAK","Population":"200901","2":"200901"},{"Name":"Wah","0":"Wah","CountryCode":"PAK","1":"PAK","Population":"198400","2":"198400"},{"Name":"Dera Ghazi Khan","0":"Dera Ghazi Khan","CountryCode":"PAK","1":"PAK","Population":"188100","2":"188100"},{"Name":"Mirpur Khas","0":"Mirpur Khas","CountryCode":"PAK","1":"PAK","Population":"184500","2":"184500"},{"Name":"Nawabshah","0":"Nawabshah","CountryCode":"PAK","1":"PAK","Population":"183100","2":"183100"},{"Name":"Mingora","0":"Mingora","CountryCode":"PAK","1":"PAK","Population":"174500","2":"174500"},{"Name":"Chiniot","0":"Chiniot","CountryCode":"PAK","1":"PAK","Population":"169300","2":"169300"},{"Name":"Kamoke","0":"Kamoke","CountryCode":"PAK","1":"PAK","Population":"151000","2":"151000"},{"Name":"Mandi Burewala","0":"Mandi Burewala","CountryCode":"PAK","1":"PAK","Population":"149900","2":"149900"},{"Name":"Jhelum","0":"Jhelum","CountryCode":"PAK","1":"PAK","Population":"145800","2":"145800"},{"Name":"Sadiqabad","0":"Sadiqabad","CountryCode":"PAK","1":"PAK","Population":"141500","2":"141500"},{"Name":"Jacobabad","0":"Jacobabad","CountryCode":"PAK","1":"PAK","Population":"137700","2":"137700"},{"Name":"Shikarpur","0":"Shikarpur","CountryCode":"PAK","1":"PAK","Population":"133300","2":"133300"},{"Name":"Khanewal","0":"Khanewal","CountryCode":"PAK","1":"PAK","Population":"133000","2":"133000"},{"Name":"Hafizabad","0":"Hafizabad","CountryCode":"PAK","1":"PAK","Population":"130200","2":"130200"},{"Name":"Kohat","0":"Kohat","CountryCode":"PAK","1":"PAK","Population":"125300","2":"125300"},{"Name":"Muzaffargarh","0":"Muzaffargarh","CountryCode":"PAK","1":"PAK","Population":"121600","2":"121600"},{"Name":"Khanpur","0":"Khanpur","CountryCode":"PAK","1":"PAK","Population":"117800","2":"117800"},{"Name":"Gojra","0":"Gojra","CountryCode":"PAK","1":"PAK","Population":"115000","2":"115000"},{"Name":"Bahawalnagar","0":"Bahawalnagar","CountryCode":"PAK","1":"PAK","Population":"109600","2":"109600"},{"Name":"Muridke","0":"Muridke","CountryCode":"PAK","1":"PAK","Population":"108600","2":"108600"},{"Name":"Pak Pattan","0":"Pak Pattan","CountryCode":"PAK","1":"PAK","Population":"107800","2":"107800"},{"Name":"Abottabad","0":"Abottabad","CountryCode":"PAK","1":"PAK","Population":"106000","2":"106000"},{"Name":"Tando Adam","0":"Tando Adam","CountryCode":"PAK","1":"PAK","Population":"103400","2":"103400"},{"Name":"Jaranwala","0":"Jaranwala","CountryCode":"PAK","1":"PAK","Population":"103300","2":"103300"},{"Name":"Khairpur","0":"Khairpur","CountryCode":"PAK","1":"PAK","Population":"102200","2":"102200"},{"Name":"Chishtian Mandi","0":"Chishtian Mandi","CountryCode":"PAK","1":"PAK","Population":"101700","2":"101700"},{"Name":"Daska","0":"Daska","CountryCode":"PAK","1":"PAK","Population":"101500","2":"101500"},{"Name":"Dadu","0":"Dadu","CountryCode":"PAK","1":"PAK","Population":"98600","2":"98600"},{"Name":"Mandi Bahauddin","0":"Mandi Bahauddin","CountryCode":"PAK","1":"PAK","Population":"97300","2":"97300"},{"Name":"Ahmadpur East","0":"Ahmadpur East","CountryCode":"PAK","1":"PAK","Population":"96000","2":"96000"},{"Name":"Kamalia","0":"Kamalia","CountryCode":"PAK","1":"PAK","Population":"95300","2":"95300"},{"Name":"Khuzdar","0":"Khuzdar","CountryCode":"PAK","1":"PAK","Population":"93100","2":"93100"},{"Name":"Vihari","0":"Vihari","CountryCode":"PAK","1":"PAK","Population":"92300","2":"92300"},{"Name":"Dera Ismail Khan","0":"Dera Ismail Khan","CountryCode":"PAK","1":"PAK","Population":"90400","2":"90400"},{"Name":"Wazirabad","0":"Wazirabad","CountryCode":"PAK","1":"PAK","Population":"89700","2":"89700"},{"Name":"Nowshera","0":"Nowshera","CountryCode":"PAK","1":"PAK","Population":"89400","2":"89400"},{"Name":"Koror","0":"Koror","CountryCode":"PLW","1":"PLW","Population":"12000","2":"12000"},{"Name":"Ciudad de Panam\u00e1","0":"Ciudad de Panam\u00e1","CountryCode":"PAN","1":"PAN","Population":"471373","2":"471373"},{"Name":"San Miguelito","0":"San Miguelito","CountryCode":"PAN","1":"PAN","Population":"315382","2":"315382"},{"Name":"Port Moresby","0":"Port Moresby","CountryCode":"PNG","1":"PNG","Population":"247000","2":"247000"},{"Name":"Asunci\u00f3n","0":"Asunci\u00f3n","CountryCode":"PRY","1":"PRY","Population":"557776","2":"557776"},{"Name":"Ciudad del Este","0":"Ciudad del Este","CountryCode":"PRY","1":"PRY","Population":"133881","2":"133881"},{"Name":"San Lorenzo","0":"San Lorenzo","CountryCode":"PRY","1":"PRY","Population":"133395","2":"133395"},{"Name":"Lambar\u00e9","0":"Lambar\u00e9","CountryCode":"PRY","1":"PRY","Population":"99681","2":"99681"},{"Name":"Fernando de la Mora","0":"Fernando de la Mora","CountryCode":"PRY","1":"PRY","Population":"95287","2":"95287"},{"Name":"Lima","0":"Lima","CountryCode":"PER","1":"PER","Population":"6464693","2":"6464693"},{"Name":"Arequipa","0":"Arequipa","CountryCode":"PER","1":"PER","Population":"762000","2":"762000"},{"Name":"Trujillo","0":"Trujillo","CountryCode":"PER","1":"PER","Population":"652000","2":"652000"},{"Name":"Chiclayo","0":"Chiclayo","CountryCode":"PER","1":"PER","Population":"517000","2":"517000"},{"Name":"Callao","0":"Callao","CountryCode":"PER","1":"PER","Population":"424294","2":"424294"},{"Name":"Iquitos","0":"Iquitos","CountryCode":"PER","1":"PER","Population":"367000","2":"367000"},{"Name":"Chimbote","0":"Chimbote","CountryCode":"PER","1":"PER","Population":"336000","2":"336000"},{"Name":"Huancayo","0":"Huancayo","CountryCode":"PER","1":"PER","Population":"327000","2":"327000"},{"Name":"Piura","0":"Piura","CountryCode":"PER","1":"PER","Population":"325000","2":"325000"},{"Name":"Cusco","0":"Cusco","CountryCode":"PER","1":"PER","Population":"291000","2":"291000"},{"Name":"Pucallpa","0":"Pucallpa","CountryCode":"PER","1":"PER","Population":"220866","2":"220866"},{"Name":"Tacna","0":"Tacna","CountryCode":"PER","1":"PER","Population":"215683","2":"215683"},{"Name":"Ica","0":"Ica","CountryCode":"PER","1":"PER","Population":"194820","2":"194820"},{"Name":"Sullana","0":"Sullana","CountryCode":"PER","1":"PER","Population":"147361","2":"147361"},{"Name":"Juliaca","0":"Juliaca","CountryCode":"PER","1":"PER","Population":"142576","2":"142576"},{"Name":"Hu\u00e1nuco","0":"Hu\u00e1nuco","CountryCode":"PER","1":"PER","Population":"129688","2":"129688"},{"Name":"Ayacucho","0":"Ayacucho","CountryCode":"PER","1":"PER","Population":"118960","2":"118960"},{"Name":"Chincha Alta","0":"Chincha Alta","CountryCode":"PER","1":"PER","Population":"110016","2":"110016"},{"Name":"Cajamarca","0":"Cajamarca","CountryCode":"PER","1":"PER","Population":"108009","2":"108009"},{"Name":"Puno","0":"Puno","CountryCode":"PER","1":"PER","Population":"101578","2":"101578"},{"Name":"Ventanilla","0":"Ventanilla","CountryCode":"PER","1":"PER","Population":"101056","2":"101056"},{"Name":"Castilla","0":"Castilla","CountryCode":"PER","1":"PER","Population":"90642","2":"90642"},{"Name":"Adamstown","0":"Adamstown","CountryCode":"PCN","1":"PCN","Population":"42","2":"42"},{"Name":"Garapan","0":"Garapan","CountryCode":"MNP","1":"MNP","Population":"9200","2":"9200"},{"Name":"Lisboa","0":"Lisboa","CountryCode":"PRT","1":"PRT","Population":"563210","2":"563210"},{"Name":"Porto","0":"Porto","CountryCode":"PRT","1":"PRT","Population":"273060","2":"273060"},{"Name":"Amadora","0":"Amadora","CountryCode":"PRT","1":"PRT","Population":"122106","2":"122106"},{"Name":"Co\u00edmbra","0":"Co\u00edmbra","CountryCode":"PRT","1":"PRT","Population":"96100","2":"96100"},{"Name":"Braga","0":"Braga","CountryCode":"PRT","1":"PRT","Population":"90535","2":"90535"},{"Name":"San Juan","0":"San Juan","CountryCode":"PRI","1":"PRI","Population":"434374","2":"434374"},{"Name":"Bayam\u00f3n","0":"Bayam\u00f3n","CountryCode":"PRI","1":"PRI","Population":"224044","2":"224044"},{"Name":"Ponce","0":"Ponce","CountryCode":"PRI","1":"PRI","Population":"186475","2":"186475"},{"Name":"Carolina","0":"Carolina","CountryCode":"PRI","1":"PRI","Population":"186076","2":"186076"},{"Name":"Caguas","0":"Caguas","CountryCode":"PRI","1":"PRI","Population":"140502","2":"140502"},{"Name":"Arecibo","0":"Arecibo","CountryCode":"PRI","1":"PRI","Population":"100131","2":"100131"},{"Name":"Guaynabo","0":"Guaynabo","CountryCode":"PRI","1":"PRI","Population":"100053","2":"100053"},{"Name":"Mayag\u00fcez","0":"Mayag\u00fcez","CountryCode":"PRI","1":"PRI","Population":"98434","2":"98434"},{"Name":"Toa Baja","0":"Toa Baja","CountryCode":"PRI","1":"PRI","Population":"94085","2":"94085"},{"Name":"Warszawa","0":"Warszawa","CountryCode":"POL","1":"POL","Population":"1615369","2":"1615369"},{"Name":"L\u00f3dz","0":"L\u00f3dz","CountryCode":"POL","1":"POL","Population":"800110","2":"800110"},{"Name":"Krak\u00f3w","0":"Krak\u00f3w","CountryCode":"POL","1":"POL","Population":"738150","2":"738150"},{"Name":"Wroclaw","0":"Wroclaw","CountryCode":"POL","1":"POL","Population":"636765","2":"636765"},{"Name":"Poznan","0":"Poznan","CountryCode":"POL","1":"POL","Population":"576899","2":"576899"},{"Name":"Gdansk","0":"Gdansk","CountryCode":"POL","1":"POL","Population":"458988","2":"458988"},{"Name":"Szczecin","0":"Szczecin","CountryCode":"POL","1":"POL","Population":"416988","2":"416988"},{"Name":"Bydgoszcz","0":"Bydgoszcz","CountryCode":"POL","1":"POL","Population":"386855","2":"386855"},{"Name":"Lublin","0":"Lublin","CountryCode":"POL","1":"POL","Population":"356251","2":"356251"},{"Name":"Katowice","0":"Katowice","CountryCode":"POL","1":"POL","Population":"345934","2":"345934"},{"Name":"Bialystok","0":"Bialystok","CountryCode":"POL","1":"POL","Population":"283937","2":"283937"},{"Name":"Czestochowa","0":"Czestochowa","CountryCode":"POL","1":"POL","Population":"257812","2":"257812"},{"Name":"Gdynia","0":"Gdynia","CountryCode":"POL","1":"POL","Population":"253521","2":"253521"},{"Name":"Sosnowiec","0":"Sosnowiec","CountryCode":"POL","1":"POL","Population":"244102","2":"244102"},{"Name":"Radom","0":"Radom","CountryCode":"POL","1":"POL","Population":"232262","2":"232262"},{"Name":"Kielce","0":"Kielce","CountryCode":"POL","1":"POL","Population":"212383","2":"212383"},{"Name":"Gliwice","0":"Gliwice","CountryCode":"POL","1":"POL","Population":"212164","2":"212164"},{"Name":"Torun","0":"Torun","CountryCode":"POL","1":"POL","Population":"206158","2":"206158"},{"Name":"Bytom","0":"Bytom","CountryCode":"POL","1":"POL","Population":"205560","2":"205560"},{"Name":"Zabrze","0":"Zabrze","CountryCode":"POL","1":"POL","Population":"200177","2":"200177"},{"Name":"Bielsko-Biala","0":"Bielsko-Biala","CountryCode":"POL","1":"POL","Population":"180307","2":"180307"},{"Name":"Olsztyn","0":"Olsztyn","CountryCode":"POL","1":"POL","Population":"170904","2":"170904"},{"Name":"Rzesz\u00f3w","0":"Rzesz\u00f3w","CountryCode":"POL","1":"POL","Population":"162049","2":"162049"},{"Name":"Ruda Slaska","0":"Ruda Slaska","CountryCode":"POL","1":"POL","Population":"159665","2":"159665"},{"Name":"Rybnik","0":"Rybnik","CountryCode":"POL","1":"POL","Population":"144582","2":"144582"},{"Name":"Walbrzych","0":"Walbrzych","CountryCode":"POL","1":"POL","Population":"136923","2":"136923"},{"Name":"Tychy","0":"Tychy","CountryCode":"POL","1":"POL","Population":"133178","2":"133178"},{"Name":"Dabrowa G\u00f3rnicza","0":"Dabrowa G\u00f3rnicza","CountryCode":"POL","1":"POL","Population":"131037","2":"131037"},{"Name":"Plock","0":"Plock","CountryCode":"POL","1":"POL","Population":"131011","2":"131011"},{"Name":"Elblag","0":"Elblag","CountryCode":"POL","1":"POL","Population":"129782","2":"129782"},{"Name":"Opole","0":"Opole","CountryCode":"POL","1":"POL","Population":"129553","2":"129553"},{"Name":"Gorz\u00f3w Wielkopolski","0":"Gorz\u00f3w Wielkopolski","CountryCode":"POL","1":"POL","Population":"126019","2":"126019"},{"Name":"Wloclawek","0":"Wloclawek","CountryCode":"POL","1":"POL","Population":"123373","2":"123373"},{"Name":"Chorz\u00f3w","0":"Chorz\u00f3w","CountryCode":"POL","1":"POL","Population":"121708","2":"121708"},{"Name":"Tarn\u00f3w","0":"Tarn\u00f3w","CountryCode":"POL","1":"POL","Population":"121494","2":"121494"},{"Name":"Zielona G\u00f3ra","0":"Zielona G\u00f3ra","CountryCode":"POL","1":"POL","Population":"118182","2":"118182"},{"Name":"Koszalin","0":"Koszalin","CountryCode":"POL","1":"POL","Population":"112375","2":"112375"},{"Name":"Legnica","0":"Legnica","CountryCode":"POL","1":"POL","Population":"109335","2":"109335"},{"Name":"Kalisz","0":"Kalisz","CountryCode":"POL","1":"POL","Population":"106641","2":"106641"},{"Name":"Grudziadz","0":"Grudziadz","CountryCode":"POL","1":"POL","Population":"102434","2":"102434"},{"Name":"Slupsk","0":"Slupsk","CountryCode":"POL","1":"POL","Population":"102370","2":"102370"},{"Name":"Jastrzebie-Zdr\u00f3j","0":"Jastrzebie-Zdr\u00f3j","CountryCode":"POL","1":"POL","Population":"102294","2":"102294"},{"Name":"Jaworzno","0":"Jaworzno","CountryCode":"POL","1":"POL","Population":"97929","2":"97929"},{"Name":"Jelenia G\u00f3ra","0":"Jelenia G\u00f3ra","CountryCode":"POL","1":"POL","Population":"93901","2":"93901"},{"Name":"Malabo","0":"Malabo","CountryCode":"GNQ","1":"GNQ","Population":"40000","2":"40000"},{"Name":"Doha","0":"Doha","CountryCode":"QAT","1":"QAT","Population":"355000","2":"355000"},{"Name":"Paris","0":"Paris","CountryCode":"FRA","1":"FRA","Population":"2125246","2":"2125246"},{"Name":"Marseille","0":"Marseille","CountryCode":"FRA","1":"FRA","Population":"798430","2":"798430"},{"Name":"Lyon","0":"Lyon","CountryCode":"FRA","1":"FRA","Population":"445452","2":"445452"},{"Name":"Toulouse","0":"Toulouse","CountryCode":"FRA","1":"FRA","Population":"390350","2":"390350"},{"Name":"Nice","0":"Nice","CountryCode":"FRA","1":"FRA","Population":"342738","2":"342738"},{"Name":"Nantes","0":"Nantes","CountryCode":"FRA","1":"FRA","Population":"270251","2":"270251"},{"Name":"Strasbourg","0":"Strasbourg","CountryCode":"FRA","1":"FRA","Population":"264115","2":"264115"},{"Name":"Montpellier","0":"Montpellier","CountryCode":"FRA","1":"FRA","Population":"225392","2":"225392"},{"Name":"Bordeaux","0":"Bordeaux","CountryCode":"FRA","1":"FRA","Population":"215363","2":"215363"},{"Name":"Rennes","0":"Rennes","CountryCode":"FRA","1":"FRA","Population":"206229","2":"206229"},{"Name":"Le Havre","0":"Le Havre","CountryCode":"FRA","1":"FRA","Population":"190905","2":"190905"},{"Name":"Reims","0":"Reims","CountryCode":"FRA","1":"FRA","Population":"187206","2":"187206"},{"Name":"Lille","0":"Lille","CountryCode":"FRA","1":"FRA","Population":"184657","2":"184657"},{"Name":"St-\u00c9tienne","0":"St-\u00c9tienne","CountryCode":"FRA","1":"FRA","Population":"180210","2":"180210"},{"Name":"Toulon","0":"Toulon","CountryCode":"FRA","1":"FRA","Population":"160639","2":"160639"},{"Name":"Grenoble","0":"Grenoble","CountryCode":"FRA","1":"FRA","Population":"153317","2":"153317"},{"Name":"Angers","0":"Angers","CountryCode":"FRA","1":"FRA","Population":"151279","2":"151279"},{"Name":"Dijon","0":"Dijon","CountryCode":"FRA","1":"FRA","Population":"149867","2":"149867"},{"Name":"Brest","0":"Brest","CountryCode":"FRA","1":"FRA","Population":"149634","2":"149634"},{"Name":"Le Mans","0":"Le Mans","CountryCode":"FRA","1":"FRA","Population":"146105","2":"146105"},{"Name":"Clermont-Ferrand","0":"Clermont-Ferrand","CountryCode":"FRA","1":"FRA","Population":"137140","2":"137140"},{"Name":"Amiens","0":"Amiens","CountryCode":"FRA","1":"FRA","Population":"135501","2":"135501"},{"Name":"Aix-en-Provence","0":"Aix-en-Provence","CountryCode":"FRA","1":"FRA","Population":"134222","2":"134222"},{"Name":"Limoges","0":"Limoges","CountryCode":"FRA","1":"FRA","Population":"133968","2":"133968"},{"Name":"N\u00eemes","0":"N\u00eemes","CountryCode":"FRA","1":"FRA","Population":"133424","2":"133424"},{"Name":"Tours","0":"Tours","CountryCode":"FRA","1":"FRA","Population":"132820","2":"132820"},{"Name":"Villeurbanne","0":"Villeurbanne","CountryCode":"FRA","1":"FRA","Population":"124215","2":"124215"},{"Name":"Metz","0":"Metz","CountryCode":"FRA","1":"FRA","Population":"123776","2":"123776"},{"Name":"Besan\u00e7on","0":"Besan\u00e7on","CountryCode":"FRA","1":"FRA","Population":"117733","2":"117733"},{"Name":"Caen","0":"Caen","CountryCode":"FRA","1":"FRA","Population":"113987","2":"113987"},{"Name":"Orl\u00e9ans","0":"Orl\u00e9ans","CountryCode":"FRA","1":"FRA","Population":"113126","2":"113126"},{"Name":"Mulhouse","0":"Mulhouse","CountryCode":"FRA","1":"FRA","Population":"110359","2":"110359"},{"Name":"Rouen","0":"Rouen","CountryCode":"FRA","1":"FRA","Population":"106592","2":"106592"},{"Name":"Boulogne-Billancourt","0":"Boulogne-Billancourt","CountryCode":"FRA","1":"FRA","Population":"106367","2":"106367"},{"Name":"Perpignan","0":"Perpignan","CountryCode":"FRA","1":"FRA","Population":"105115","2":"105115"},{"Name":"Nancy","0":"Nancy","CountryCode":"FRA","1":"FRA","Population":"103605","2":"103605"},{"Name":"Roubaix","0":"Roubaix","CountryCode":"FRA","1":"FRA","Population":"96984","2":"96984"},{"Name":"Argenteuil","0":"Argenteuil","CountryCode":"FRA","1":"FRA","Population":"93961","2":"93961"},{"Name":"Tourcoing","0":"Tourcoing","CountryCode":"FRA","1":"FRA","Population":"93540","2":"93540"},{"Name":"Montreuil","0":"Montreuil","CountryCode":"FRA","1":"FRA","Population":"90674","2":"90674"},{"Name":"Cayenne","0":"Cayenne","CountryCode":"GUF","1":"GUF","Population":"50699","2":"50699"},{"Name":"Faaa","0":"Faaa","CountryCode":"PYF","1":"PYF","Population":"25888","2":"25888"},{"Name":"Papeete","0":"Papeete","CountryCode":"PYF","1":"PYF","Population":"25553","2":"25553"},{"Name":"Saint-Denis","0":"Saint-Denis","CountryCode":"REU","1":"REU","Population":"131480","2":"131480"},{"Name":"Bucuresti","0":"Bucuresti","CountryCode":"ROM","1":"ROM","Population":"2016131","2":"2016131"},{"Name":"Iasi","0":"Iasi","CountryCode":"ROM","1":"ROM","Population":"348070","2":"348070"},{"Name":"Constanta","0":"Constanta","CountryCode":"ROM","1":"ROM","Population":"342264","2":"342264"},{"Name":"Cluj-Napoca","0":"Cluj-Napoca","CountryCode":"ROM","1":"ROM","Population":"332498","2":"332498"},{"Name":"Galati","0":"Galati","CountryCode":"ROM","1":"ROM","Population":"330276","2":"330276"},{"Name":"Timisoara","0":"Timisoara","CountryCode":"ROM","1":"ROM","Population":"324304","2":"324304"},{"Name":"Brasov","0":"Brasov","CountryCode":"ROM","1":"ROM","Population":"314225","2":"314225"},{"Name":"Craiova","0":"Craiova","CountryCode":"ROM","1":"ROM","Population":"313530","2":"313530"},{"Name":"Ploiesti","0":"Ploiesti","CountryCode":"ROM","1":"ROM","Population":"251348","2":"251348"},{"Name":"Braila","0":"Braila","CountryCode":"ROM","1":"ROM","Population":"233756","2":"233756"},{"Name":"Oradea","0":"Oradea","CountryCode":"ROM","1":"ROM","Population":"222239","2":"222239"},{"Name":"Bacau","0":"Bacau","CountryCode":"ROM","1":"ROM","Population":"209235","2":"209235"},{"Name":"Pitesti","0":"Pitesti","CountryCode":"ROM","1":"ROM","Population":"187170","2":"187170"},{"Name":"Arad","0":"Arad","CountryCode":"ROM","1":"ROM","Population":"184408","2":"184408"},{"Name":"Sibiu","0":"Sibiu","CountryCode":"ROM","1":"ROM","Population":"169611","2":"169611"},{"Name":"T\u00e2rgu Mures","0":"T\u00e2rgu Mures","CountryCode":"ROM","1":"ROM","Population":"165153","2":"165153"},{"Name":"Baia Mare","0":"Baia Mare","CountryCode":"ROM","1":"ROM","Population":"149665","2":"149665"},{"Name":"Buzau","0":"Buzau","CountryCode":"ROM","1":"ROM","Population":"148372","2":"148372"},{"Name":"Satu Mare","0":"Satu Mare","CountryCode":"ROM","1":"ROM","Population":"130059","2":"130059"},{"Name":"Botosani","0":"Botosani","CountryCode":"ROM","1":"ROM","Population":"128730","2":"128730"},{"Name":"Piatra Neamt","0":"Piatra Neamt","CountryCode":"ROM","1":"ROM","Population":"125070","2":"125070"},{"Name":"R\u00e2mnicu V\u00e2lcea","0":"R\u00e2mnicu V\u00e2lcea","CountryCode":"ROM","1":"ROM","Population":"119741","2":"119741"},{"Name":"Suceava","0":"Suceava","CountryCode":"ROM","1":"ROM","Population":"118549","2":"118549"},{"Name":"Drobeta-Turnu Severin","0":"Drobeta-Turnu Severin","CountryCode":"ROM","1":"ROM","Population":"117865","2":"117865"},{"Name":"T\u00e2rgoviste","0":"T\u00e2rgoviste","CountryCode":"ROM","1":"ROM","Population":"98980","2":"98980"},{"Name":"Focsani","0":"Focsani","CountryCode":"ROM","1":"ROM","Population":"98979","2":"98979"},{"Name":"T\u00e2rgu Jiu","0":"T\u00e2rgu Jiu","CountryCode":"ROM","1":"ROM","Population":"98524","2":"98524"},{"Name":"Tulcea","0":"Tulcea","CountryCode":"ROM","1":"ROM","Population":"96278","2":"96278"},{"Name":"Resita","0":"Resita","CountryCode":"ROM","1":"ROM","Population":"93976","2":"93976"},{"Name":"Kigali","0":"Kigali","CountryCode":"RWA","1":"RWA","Population":"286000","2":"286000"},{"Name":"Stockholm","0":"Stockholm","CountryCode":"SWE","1":"SWE","Population":"750348","2":"750348"},{"Name":"Gothenburg [G\u00f6teborg]","0":"Gothenburg [G\u00f6teborg]","CountryCode":"SWE","1":"SWE","Population":"466990","2":"466990"},{"Name":"Malm\u00f6","0":"Malm\u00f6","CountryCode":"SWE","1":"SWE","Population":"259579","2":"259579"},{"Name":"Uppsala","0":"Uppsala","CountryCode":"SWE","1":"SWE","Population":"189569","2":"189569"},{"Name":"Link\u00f6ping","0":"Link\u00f6ping","CountryCode":"SWE","1":"SWE","Population":"133168","2":"133168"},{"Name":"V\u00e4ster\u00e5s","0":"V\u00e4ster\u00e5s","CountryCode":"SWE","1":"SWE","Population":"126328","2":"126328"},{"Name":"\u00d6rebro","0":"\u00d6rebro","CountryCode":"SWE","1":"SWE","Population":"124207","2":"124207"},{"Name":"Norrk\u00f6ping","0":"Norrk\u00f6ping","CountryCode":"SWE","1":"SWE","Population":"122199","2":"122199"},{"Name":"Helsingborg","0":"Helsingborg","CountryCode":"SWE","1":"SWE","Population":"117737","2":"117737"},{"Name":"J\u00f6nk\u00f6ping","0":"J\u00f6nk\u00f6ping","CountryCode":"SWE","1":"SWE","Population":"117095","2":"117095"},{"Name":"Ume\u00e5","0":"Ume\u00e5","CountryCode":"SWE","1":"SWE","Population":"104512","2":"104512"},{"Name":"Lund","0":"Lund","CountryCode":"SWE","1":"SWE","Population":"98948","2":"98948"},{"Name":"Bor\u00e5s","0":"Bor\u00e5s","CountryCode":"SWE","1":"SWE","Population":"96883","2":"96883"},{"Name":"Sundsvall","0":"Sundsvall","CountryCode":"SWE","1":"SWE","Population":"93126","2":"93126"},{"Name":"G\u00e4vle","0":"G\u00e4vle","CountryCode":"SWE","1":"SWE","Population":"90742","2":"90742"},{"Name":"Jamestown","0":"Jamestown","CountryCode":"SHN","1":"SHN","Population":"1500","2":"1500"},{"Name":"Basseterre","0":"Basseterre","CountryCode":"KNA","1":"KNA","Population":"11600","2":"11600"},{"Name":"Castries","0":"Castries","CountryCode":"LCA","1":"LCA","Population":"2301","2":"2301"},{"Name":"Kingstown","0":"Kingstown","CountryCode":"VCT","1":"VCT","Population":"17100","2":"17100"},{"Name":"Saint-Pierre","0":"Saint-Pierre","CountryCode":"SPM","1":"SPM","Population":"5808","2":"5808"},{"Name":"Berlin","0":"Berlin","CountryCode":"DEU","1":"DEU","Population":"3386667","2":"3386667"},{"Name":"Hamburg","0":"Hamburg","CountryCode":"DEU","1":"DEU","Population":"1704735","2":"1704735"},{"Name":"Munich [M\u00fcnchen]","0":"Munich [M\u00fcnchen]","CountryCode":"DEU","1":"DEU","Population":"1194560","2":"1194560"},{"Name":"K\u00f6ln","0":"K\u00f6ln","CountryCode":"DEU","1":"DEU","Population":"962507","2":"962507"},{"Name":"Frankfurt am Main","0":"Frankfurt am Main","CountryCode":"DEU","1":"DEU","Population":"643821","2":"643821"},{"Name":"Essen","0":"Essen","CountryCode":"DEU","1":"DEU","Population":"599515","2":"599515"},{"Name":"Dortmund","0":"Dortmund","CountryCode":"DEU","1":"DEU","Population":"590213","2":"590213"},{"Name":"Stuttgart","0":"Stuttgart","CountryCode":"DEU","1":"DEU","Population":"582443","2":"582443"},{"Name":"D\u00fcsseldorf","0":"D\u00fcsseldorf","CountryCode":"DEU","1":"DEU","Population":"568855","2":"568855"},{"Name":"Bremen","0":"Bremen","CountryCode":"DEU","1":"DEU","Population":"540330","2":"540330"},{"Name":"Duisburg","0":"Duisburg","CountryCode":"DEU","1":"DEU","Population":"519793","2":"519793"},{"Name":"Hannover","0":"Hannover","CountryCode":"DEU","1":"DEU","Population":"514718","2":"514718"},{"Name":"Leipzig","0":"Leipzig","CountryCode":"DEU","1":"DEU","Population":"489532","2":"489532"},{"Name":"N\u00fcrnberg","0":"N\u00fcrnberg","CountryCode":"DEU","1":"DEU","Population":"486628","2":"486628"},{"Name":"Dresden","0":"Dresden","CountryCode":"DEU","1":"DEU","Population":"476668","2":"476668"},{"Name":"Bochum","0":"Bochum","CountryCode":"DEU","1":"DEU","Population":"392830","2":"392830"},{"Name":"Wuppertal","0":"Wuppertal","CountryCode":"DEU","1":"DEU","Population":"368993","2":"368993"},{"Name":"Bielefeld","0":"Bielefeld","CountryCode":"DEU","1":"DEU","Population":"321125","2":"321125"},{"Name":"Mannheim","0":"Mannheim","CountryCode":"DEU","1":"DEU","Population":"307730","2":"307730"},{"Name":"Bonn","0":"Bonn","CountryCode":"DEU","1":"DEU","Population":"301048","2":"301048"},{"Name":"Gelsenkirchen","0":"Gelsenkirchen","CountryCode":"DEU","1":"DEU","Population":"281979","2":"281979"},{"Name":"Karlsruhe","0":"Karlsruhe","CountryCode":"DEU","1":"DEU","Population":"277204","2":"277204"},{"Name":"Wiesbaden","0":"Wiesbaden","CountryCode":"DEU","1":"DEU","Population":"268716","2":"268716"},{"Name":"M\u00fcnster","0":"M\u00fcnster","CountryCode":"DEU","1":"DEU","Population":"264670","2":"264670"},{"Name":"M\u00f6nchengladbach","0":"M\u00f6nchengladbach","CountryCode":"DEU","1":"DEU","Population":"263697","2":"263697"},{"Name":"Chemnitz","0":"Chemnitz","CountryCode":"DEU","1":"DEU","Population":"263222","2":"263222"},{"Name":"Augsburg","0":"Augsburg","CountryCode":"DEU","1":"DEU","Population":"254867","2":"254867"},{"Name":"Halle\/Saale","0":"Halle\/Saale","CountryCode":"DEU","1":"DEU","Population":"254360","2":"254360"},{"Name":"Braunschweig","0":"Braunschweig","CountryCode":"DEU","1":"DEU","Population":"246322","2":"246322"},{"Name":"Aachen","0":"Aachen","CountryCode":"DEU","1":"DEU","Population":"243825","2":"243825"},{"Name":"Krefeld","0":"Krefeld","CountryCode":"DEU","1":"DEU","Population":"241769","2":"241769"},{"Name":"Magdeburg","0":"Magdeburg","CountryCode":"DEU","1":"DEU","Population":"235073","2":"235073"},{"Name":"Kiel","0":"Kiel","CountryCode":"DEU","1":"DEU","Population":"233795","2":"233795"},{"Name":"Oberhausen","0":"Oberhausen","CountryCode":"DEU","1":"DEU","Population":"222349","2":"222349"},{"Name":"L\u00fcbeck","0":"L\u00fcbeck","CountryCode":"DEU","1":"DEU","Population":"213326","2":"213326"},{"Name":"Hagen","0":"Hagen","CountryCode":"DEU","1":"DEU","Population":"205201","2":"205201"},{"Name":"Rostock","0":"Rostock","CountryCode":"DEU","1":"DEU","Population":"203279","2":"203279"},{"Name":"Freiburg im Breisgau","0":"Freiburg im Breisgau","CountryCode":"DEU","1":"DEU","Population":"202455","2":"202455"},{"Name":"Erfurt","0":"Erfurt","CountryCode":"DEU","1":"DEU","Population":"201267","2":"201267"},{"Name":"Kassel","0":"Kassel","CountryCode":"DEU","1":"DEU","Population":"196211","2":"196211"},{"Name":"Saarbr\u00fccken","0":"Saarbr\u00fccken","CountryCode":"DEU","1":"DEU","Population":"183836","2":"183836"},{"Name":"Mainz","0":"Mainz","CountryCode":"DEU","1":"DEU","Population":"183134","2":"183134"},{"Name":"Hamm","0":"Hamm","CountryCode":"DEU","1":"DEU","Population":"181804","2":"181804"},{"Name":"Herne","0":"Herne","CountryCode":"DEU","1":"DEU","Population":"175661","2":"175661"},{"Name":"M\u00fclheim an der Ruhr","0":"M\u00fclheim an der Ruhr","CountryCode":"DEU","1":"DEU","Population":"173895","2":"173895"},{"Name":"Solingen","0":"Solingen","CountryCode":"DEU","1":"DEU","Population":"165583","2":"165583"},{"Name":"Osnabr\u00fcck","0":"Osnabr\u00fcck","CountryCode":"DEU","1":"DEU","Population":"164539","2":"164539"},{"Name":"Ludwigshafen am Rhein","0":"Ludwigshafen am Rhein","CountryCode":"DEU","1":"DEU","Population":"163771","2":"163771"},{"Name":"Leverkusen","0":"Leverkusen","CountryCode":"DEU","1":"DEU","Population":"160841","2":"160841"},{"Name":"Oldenburg","0":"Oldenburg","CountryCode":"DEU","1":"DEU","Population":"154125","2":"154125"},{"Name":"Neuss","0":"Neuss","CountryCode":"DEU","1":"DEU","Population":"149702","2":"149702"},{"Name":"Heidelberg","0":"Heidelberg","CountryCode":"DEU","1":"DEU","Population":"139672","2":"139672"},{"Name":"Darmstadt","0":"Darmstadt","CountryCode":"DEU","1":"DEU","Population":"137776","2":"137776"},{"Name":"Paderborn","0":"Paderborn","CountryCode":"DEU","1":"DEU","Population":"137647","2":"137647"},{"Name":"Potsdam","0":"Potsdam","CountryCode":"DEU","1":"DEU","Population":"128983","2":"128983"},{"Name":"W\u00fcrzburg","0":"W\u00fcrzburg","CountryCode":"DEU","1":"DEU","Population":"127350","2":"127350"},{"Name":"Regensburg","0":"Regensburg","CountryCode":"DEU","1":"DEU","Population":"125236","2":"125236"},{"Name":"Recklinghausen","0":"Recklinghausen","CountryCode":"DEU","1":"DEU","Population":"125022","2":"125022"},{"Name":"G\u00f6ttingen","0":"G\u00f6ttingen","CountryCode":"DEU","1":"DEU","Population":"124775","2":"124775"},{"Name":"Bremerhaven","0":"Bremerhaven","CountryCode":"DEU","1":"DEU","Population":"122735","2":"122735"},{"Name":"Wolfsburg","0":"Wolfsburg","CountryCode":"DEU","1":"DEU","Population":"121954","2":"121954"},{"Name":"Bottrop","0":"Bottrop","CountryCode":"DEU","1":"DEU","Population":"121097","2":"121097"},{"Name":"Remscheid","0":"Remscheid","CountryCode":"DEU","1":"DEU","Population":"120125","2":"120125"},{"Name":"Heilbronn","0":"Heilbronn","CountryCode":"DEU","1":"DEU","Population":"119526","2":"119526"},{"Name":"Pforzheim","0":"Pforzheim","CountryCode":"DEU","1":"DEU","Population":"117227","2":"117227"},{"Name":"Offenbach am Main","0":"Offenbach am Main","CountryCode":"DEU","1":"DEU","Population":"116627","2":"116627"},{"Name":"Ulm","0":"Ulm","CountryCode":"DEU","1":"DEU","Population":"116103","2":"116103"},{"Name":"Ingolstadt","0":"Ingolstadt","CountryCode":"DEU","1":"DEU","Population":"114826","2":"114826"},{"Name":"Gera","0":"Gera","CountryCode":"DEU","1":"DEU","Population":"114718","2":"114718"},{"Name":"Salzgitter","0":"Salzgitter","CountryCode":"DEU","1":"DEU","Population":"112934","2":"112934"},{"Name":"Cottbus","0":"Cottbus","CountryCode":"DEU","1":"DEU","Population":"110894","2":"110894"},{"Name":"Reutlingen","0":"Reutlingen","CountryCode":"DEU","1":"DEU","Population":"110343","2":"110343"},{"Name":"F\u00fcrth","0":"F\u00fcrth","CountryCode":"DEU","1":"DEU","Population":"109771","2":"109771"},{"Name":"Siegen","0":"Siegen","CountryCode":"DEU","1":"DEU","Population":"109225","2":"109225"},{"Name":"Koblenz","0":"Koblenz","CountryCode":"DEU","1":"DEU","Population":"108003","2":"108003"},{"Name":"Moers","0":"Moers","CountryCode":"DEU","1":"DEU","Population":"106837","2":"106837"},{"Name":"Bergisch Gladbach","0":"Bergisch Gladbach","CountryCode":"DEU","1":"DEU","Population":"106150","2":"106150"},{"Name":"Zwickau","0":"Zwickau","CountryCode":"DEU","1":"DEU","Population":"104146","2":"104146"},{"Name":"Hildesheim","0":"Hildesheim","CountryCode":"DEU","1":"DEU","Population":"104013","2":"104013"},{"Name":"Witten","0":"Witten","CountryCode":"DEU","1":"DEU","Population":"103384","2":"103384"},{"Name":"Schwerin","0":"Schwerin","CountryCode":"DEU","1":"DEU","Population":"102878","2":"102878"},{"Name":"Erlangen","0":"Erlangen","CountryCode":"DEU","1":"DEU","Population":"100750","2":"100750"},{"Name":"Kaiserslautern","0":"Kaiserslautern","CountryCode":"DEU","1":"DEU","Population":"100025","2":"100025"},{"Name":"Trier","0":"Trier","CountryCode":"DEU","1":"DEU","Population":"99891","2":"99891"},{"Name":"Jena","0":"Jena","CountryCode":"DEU","1":"DEU","Population":"99779","2":"99779"},{"Name":"Iserlohn","0":"Iserlohn","CountryCode":"DEU","1":"DEU","Population":"99474","2":"99474"},{"Name":"G\u00fctersloh","0":"G\u00fctersloh","CountryCode":"DEU","1":"DEU","Population":"95028","2":"95028"},{"Name":"Marl","0":"Marl","CountryCode":"DEU","1":"DEU","Population":"93735","2":"93735"},{"Name":"L\u00fcnen","0":"L\u00fcnen","CountryCode":"DEU","1":"DEU","Population":"92044","2":"92044"},{"Name":"D\u00fcren","0":"D\u00fcren","CountryCode":"DEU","1":"DEU","Population":"91092","2":"91092"},{"Name":"Ratingen","0":"Ratingen","CountryCode":"DEU","1":"DEU","Population":"90951","2":"90951"},{"Name":"Velbert","0":"Velbert","CountryCode":"DEU","1":"DEU","Population":"89881","2":"89881"},{"Name":"Esslingen am Neckar","0":"Esslingen am Neckar","CountryCode":"DEU","1":"DEU","Population":"89667","2":"89667"},{"Name":"Honiara","0":"Honiara","CountryCode":"SLB","1":"SLB","Population":"50100","2":"50100"},{"Name":"Lusaka","0":"Lusaka","CountryCode":"ZMB","1":"ZMB","Population":"1317000","2":"1317000"},{"Name":"Ndola","0":"Ndola","CountryCode":"ZMB","1":"ZMB","Population":"329200","2":"329200"},{"Name":"Kitwe","0":"Kitwe","CountryCode":"ZMB","1":"ZMB","Population":"288600","2":"288600"},{"Name":"Kabwe","0":"Kabwe","CountryCode":"ZMB","1":"ZMB","Population":"154300","2":"154300"},{"Name":"Chingola","0":"Chingola","CountryCode":"ZMB","1":"ZMB","Population":"142400","2":"142400"},{"Name":"Mufulira","0":"Mufulira","CountryCode":"ZMB","1":"ZMB","Population":"123900","2":"123900"},{"Name":"Luanshya","0":"Luanshya","CountryCode":"ZMB","1":"ZMB","Population":"118100","2":"118100"},{"Name":"Apia","0":"Apia","CountryCode":"WSM","1":"WSM","Population":"35900","2":"35900"},{"Name":"Serravalle","0":"Serravalle","CountryCode":"SMR","1":"SMR","Population":"4802","2":"4802"},{"Name":"San Marino","0":"San Marino","CountryCode":"SMR","1":"SMR","Population":"2294","2":"2294"},{"Name":"S\u00e3o Tom\u00e9","0":"S\u00e3o Tom\u00e9","CountryCode":"STP","1":"STP","Population":"49541","2":"49541"},{"Name":"Riyadh","0":"Riyadh","CountryCode":"SAU","1":"SAU","Population":"3324000","2":"3324000"},{"Name":"Jedda","0":"Jedda","CountryCode":"SAU","1":"SAU","Population":"2046300","2":"2046300"},{"Name":"Mekka","0":"Mekka","CountryCode":"SAU","1":"SAU","Population":"965700","2":"965700"},{"Name":"Medina","0":"Medina","CountryCode":"SAU","1":"SAU","Population":"608300","2":"608300"},{"Name":"al-Dammam","0":"al-Dammam","CountryCode":"SAU","1":"SAU","Population":"482300","2":"482300"},{"Name":"al-Taif","0":"al-Taif","CountryCode":"SAU","1":"SAU","Population":"416100","2":"416100"},{"Name":"Tabuk","0":"Tabuk","CountryCode":"SAU","1":"SAU","Population":"292600","2":"292600"},{"Name":"Burayda","0":"Burayda","CountryCode":"SAU","1":"SAU","Population":"248600","2":"248600"},{"Name":"al-Hufuf","0":"al-Hufuf","CountryCode":"SAU","1":"SAU","Population":"225800","2":"225800"},{"Name":"al-Mubarraz","0":"al-Mubarraz","CountryCode":"SAU","1":"SAU","Population":"219100","2":"219100"},{"Name":"Khamis Mushayt","0":"Khamis Mushayt","CountryCode":"SAU","1":"SAU","Population":"217900","2":"217900"},{"Name":"Hail","0":"Hail","CountryCode":"SAU","1":"SAU","Population":"176800","2":"176800"},{"Name":"al-Kharj","0":"al-Kharj","CountryCode":"SAU","1":"SAU","Population":"152100","2":"152100"},{"Name":"al-Khubar","0":"al-Khubar","CountryCode":"SAU","1":"SAU","Population":"141700","2":"141700"},{"Name":"Jubayl","0":"Jubayl","CountryCode":"SAU","1":"SAU","Population":"140800","2":"140800"},{"Name":"Hafar al-Batin","0":"Hafar al-Batin","CountryCode":"SAU","1":"SAU","Population":"137800","2":"137800"},{"Name":"al-Tuqba","0":"al-Tuqba","CountryCode":"SAU","1":"SAU","Population":"125700","2":"125700"},{"Name":"Yanbu","0":"Yanbu","CountryCode":"SAU","1":"SAU","Population":"119800","2":"119800"},{"Name":"Abha","0":"Abha","CountryCode":"SAU","1":"SAU","Population":"112300","2":"112300"},{"Name":"Ara\u00b4ar","0":"Ara\u00b4ar","CountryCode":"SAU","1":"SAU","Population":"108100","2":"108100"},{"Name":"al-Qatif","0":"al-Qatif","CountryCode":"SAU","1":"SAU","Population":"98900","2":"98900"},{"Name":"al-Hawiya","0":"al-Hawiya","CountryCode":"SAU","1":"SAU","Population":"93900","2":"93900"},{"Name":"Unayza","0":"Unayza","CountryCode":"SAU","1":"SAU","Population":"91100","2":"91100"},{"Name":"Najran","0":"Najran","CountryCode":"SAU","1":"SAU","Population":"91000","2":"91000"},{"Name":"Pikine","0":"Pikine","CountryCode":"SEN","1":"SEN","Population":"855287","2":"855287"},{"Name":"Dakar","0":"Dakar","CountryCode":"SEN","1":"SEN","Population":"785071","2":"785071"},{"Name":"Thi\u00e8s","0":"Thi\u00e8s","CountryCode":"SEN","1":"SEN","Population":"248000","2":"248000"},{"Name":"Kaolack","0":"Kaolack","CountryCode":"SEN","1":"SEN","Population":"199000","2":"199000"},{"Name":"Ziguinchor","0":"Ziguinchor","CountryCode":"SEN","1":"SEN","Population":"192000","2":"192000"},{"Name":"Rufisque","0":"Rufisque","CountryCode":"SEN","1":"SEN","Population":"150000","2":"150000"},{"Name":"Saint-Louis","0":"Saint-Louis","CountryCode":"SEN","1":"SEN","Population":"132400","2":"132400"},{"Name":"Mbour","0":"Mbour","CountryCode":"SEN","1":"SEN","Population":"109300","2":"109300"},{"Name":"Diourbel","0":"Diourbel","CountryCode":"SEN","1":"SEN","Population":"99400","2":"99400"},{"Name":"Victoria","0":"Victoria","CountryCode":"SYC","1":"SYC","Population":"41000","2":"41000"},{"Name":"Freetown","0":"Freetown","CountryCode":"SLE","1":"SLE","Population":"850000","2":"850000"},{"Name":"Singapore","0":"Singapore","CountryCode":"SGP","1":"SGP","Population":"4017733","2":"4017733"},{"Name":"Bratislava","0":"Bratislava","CountryCode":"SVK","1":"SVK","Population":"448292","2":"448292"},{"Name":"Ko\u0161ice","0":"Ko\u0161ice","CountryCode":"SVK","1":"SVK","Population":"241874","2":"241874"},{"Name":"Pre\u0161ov","0":"Pre\u0161ov","CountryCode":"SVK","1":"SVK","Population":"93977","2":"93977"},{"Name":"Ljubljana","0":"Ljubljana","CountryCode":"SVN","1":"SVN","Population":"270986","2":"270986"},{"Name":"Maribor","0":"Maribor","CountryCode":"SVN","1":"SVN","Population":"115532","2":"115532"},{"Name":"Mogadishu","0":"Mogadishu","CountryCode":"SOM","1":"SOM","Population":"997000","2":"997000"},{"Name":"Hargeysa","0":"Hargeysa","CountryCode":"SOM","1":"SOM","Population":"90000","2":"90000"},{"Name":"Kismaayo","0":"Kismaayo","CountryCode":"SOM","1":"SOM","Population":"90000","2":"90000"},{"Name":"Colombo","0":"Colombo","CountryCode":"LKA","1":"LKA","Population":"645000","2":"645000"},{"Name":"Dehiwala","0":"Dehiwala","CountryCode":"LKA","1":"LKA","Population":"203000","2":"203000"},{"Name":"Moratuwa","0":"Moratuwa","CountryCode":"LKA","1":"LKA","Population":"190000","2":"190000"},{"Name":"Jaffna","0":"Jaffna","CountryCode":"LKA","1":"LKA","Population":"149000","2":"149000"},{"Name":"Kandy","0":"Kandy","CountryCode":"LKA","1":"LKA","Population":"140000","2":"140000"},{"Name":"Sri Jayawardenepura Kotte","0":"Sri Jayawardenepura Kotte","CountryCode":"LKA","1":"LKA","Population":"118000","2":"118000"},{"Name":"Negombo","0":"Negombo","CountryCode":"LKA","1":"LKA","Population":"100000","2":"100000"},{"Name":"Omdurman","0":"Omdurman","CountryCode":"SDN","1":"SDN","Population":"1271403","2":"1271403"},{"Name":"Khartum","0":"Khartum","CountryCode":"SDN","1":"SDN","Population":"947483","2":"947483"},{"Name":"Sharq al-Nil","0":"Sharq al-Nil","CountryCode":"SDN","1":"SDN","Population":"700887","2":"700887"},{"Name":"Port Sudan","0":"Port Sudan","CountryCode":"SDN","1":"SDN","Population":"308195","2":"308195"},{"Name":"Kassala","0":"Kassala","CountryCode":"SDN","1":"SDN","Population":"234622","2":"234622"},{"Name":"Obeid","0":"Obeid","CountryCode":"SDN","1":"SDN","Population":"229425","2":"229425"},{"Name":"Nyala","0":"Nyala","CountryCode":"SDN","1":"SDN","Population":"227183","2":"227183"},{"Name":"Wad Madani","0":"Wad Madani","CountryCode":"SDN","1":"SDN","Population":"211362","2":"211362"},{"Name":"al-Qadarif","0":"al-Qadarif","CountryCode":"SDN","1":"SDN","Population":"191164","2":"191164"},{"Name":"Kusti","0":"Kusti","CountryCode":"SDN","1":"SDN","Population":"173599","2":"173599"},{"Name":"al-Fashir","0":"al-Fashir","CountryCode":"SDN","1":"SDN","Population":"141884","2":"141884"},{"Name":"Juba","0":"Juba","CountryCode":"SDN","1":"SDN","Population":"114980","2":"114980"},{"Name":"Helsinki [Helsingfors]","0":"Helsinki [Helsingfors]","CountryCode":"FIN","1":"FIN","Population":"555474","2":"555474"},{"Name":"Espoo","0":"Espoo","CountryCode":"FIN","1":"FIN","Population":"213271","2":"213271"},{"Name":"Tampere","0":"Tampere","CountryCode":"FIN","1":"FIN","Population":"195468","2":"195468"},{"Name":"Vantaa","0":"Vantaa","CountryCode":"FIN","1":"FIN","Population":"178471","2":"178471"},{"Name":"Turku [\u00c5bo]","0":"Turku [\u00c5bo]","CountryCode":"FIN","1":"FIN","Population":"172561","2":"172561"},{"Name":"Oulu","0":"Oulu","CountryCode":"FIN","1":"FIN","Population":"120753","2":"120753"},{"Name":"Lahti","0":"Lahti","CountryCode":"FIN","1":"FIN","Population":"96921","2":"96921"},{"Name":"Paramaribo","0":"Paramaribo","CountryCode":"SUR","1":"SUR","Population":"112000","2":"112000"},{"Name":"Mbabane","0":"Mbabane","CountryCode":"SWZ","1":"SWZ","Population":"61000","2":"61000"},{"Name":"Z\u00fcrich","0":"Z\u00fcrich","CountryCode":"CHE","1":"CHE","Population":"336800","2":"336800"},{"Name":"Geneve","0":"Geneve","CountryCode":"CHE","1":"CHE","Population":"173500","2":"173500"},{"Name":"Basel","0":"Basel","CountryCode":"CHE","1":"CHE","Population":"166700","2":"166700"},{"Name":"Bern","0":"Bern","CountryCode":"CHE","1":"CHE","Population":"122700","2":"122700"},{"Name":"Lausanne","0":"Lausanne","CountryCode":"CHE","1":"CHE","Population":"114500","2":"114500"},{"Name":"Damascus","0":"Damascus","CountryCode":"SYR","1":"SYR","Population":"1347000","2":"1347000"},{"Name":"Aleppo","0":"Aleppo","CountryCode":"SYR","1":"SYR","Population":"1261983","2":"1261983"},{"Name":"Hims","0":"Hims","CountryCode":"SYR","1":"SYR","Population":"507404","2":"507404"},{"Name":"Hama","0":"Hama","CountryCode":"SYR","1":"SYR","Population":"343361","2":"343361"},{"Name":"Latakia","0":"Latakia","CountryCode":"SYR","1":"SYR","Population":"264563","2":"264563"},{"Name":"al-Qamishliya","0":"al-Qamishliya","CountryCode":"SYR","1":"SYR","Population":"144286","2":"144286"},{"Name":"Dayr al-Zawr","0":"Dayr al-Zawr","CountryCode":"SYR","1":"SYR","Population":"140459","2":"140459"},{"Name":"Jaramana","0":"Jaramana","CountryCode":"SYR","1":"SYR","Population":"138469","2":"138469"},{"Name":"Duma","0":"Duma","CountryCode":"SYR","1":"SYR","Population":"131158","2":"131158"},{"Name":"al-Raqqa","0":"al-Raqqa","CountryCode":"SYR","1":"SYR","Population":"108020","2":"108020"},{"Name":"Idlib","0":"Idlib","CountryCode":"SYR","1":"SYR","Population":"91081","2":"91081"},{"Name":"Dushanbe","0":"Dushanbe","CountryCode":"TJK","1":"TJK","Population":"524000","2":"524000"},{"Name":"Khujand","0":"Khujand","CountryCode":"TJK","1":"TJK","Population":"161500","2":"161500"},{"Name":"Taipei","0":"Taipei","CountryCode":"TWN","1":"TWN","Population":"2641312","2":"2641312"},{"Name":"Kaohsiung","0":"Kaohsiung","CountryCode":"TWN","1":"TWN","Population":"1475505","2":"1475505"},{"Name":"Taichung","0":"Taichung","CountryCode":"TWN","1":"TWN","Population":"940589","2":"940589"},{"Name":"Tainan","0":"Tainan","CountryCode":"TWN","1":"TWN","Population":"728060","2":"728060"},{"Name":"Panchiao","0":"Panchiao","CountryCode":"TWN","1":"TWN","Population":"523850","2":"523850"},{"Name":"Chungho","0":"Chungho","CountryCode":"TWN","1":"TWN","Population":"392176","2":"392176"},{"Name":"Keelung (Chilung)","0":"Keelung (Chilung)","CountryCode":"TWN","1":"TWN","Population":"385201","2":"385201"},{"Name":"Sanchung","0":"Sanchung","CountryCode":"TWN","1":"TWN","Population":"380084","2":"380084"},{"Name":"Hsinchuang","0":"Hsinchuang","CountryCode":"TWN","1":"TWN","Population":"365048","2":"365048"},{"Name":"Hsinchu","0":"Hsinchu","CountryCode":"TWN","1":"TWN","Population":"361958","2":"361958"},{"Name":"Chungli","0":"Chungli","CountryCode":"TWN","1":"TWN","Population":"318649","2":"318649"},{"Name":"Fengshan","0":"Fengshan","CountryCode":"TWN","1":"TWN","Population":"318562","2":"318562"},{"Name":"Taoyuan","0":"Taoyuan","CountryCode":"TWN","1":"TWN","Population":"316438","2":"316438"},{"Name":"Chiayi","0":"Chiayi","CountryCode":"TWN","1":"TWN","Population":"265109","2":"265109"},{"Name":"Hsintien","0":"Hsintien","CountryCode":"TWN","1":"TWN","Population":"263603","2":"263603"},{"Name":"Changhwa","0":"Changhwa","CountryCode":"TWN","1":"TWN","Population":"227715","2":"227715"},{"Name":"Yungho","0":"Yungho","CountryCode":"TWN","1":"TWN","Population":"227700","2":"227700"},{"Name":"Tucheng","0":"Tucheng","CountryCode":"TWN","1":"TWN","Population":"224897","2":"224897"},{"Name":"Pingtung","0":"Pingtung","CountryCode":"TWN","1":"TWN","Population":"214727","2":"214727"},{"Name":"Yungkang","0":"Yungkang","CountryCode":"TWN","1":"TWN","Population":"193005","2":"193005"},{"Name":"Pingchen","0":"Pingchen","CountryCode":"TWN","1":"TWN","Population":"188344","2":"188344"},{"Name":"Tali","0":"Tali","CountryCode":"TWN","1":"TWN","Population":"171940","2":"171940"},{"Name":"Taiping","0":"Taiping","CountryCode":"TWN","1":"TWN","Population":"165524","2":"165524"},{"Name":"Pate","0":"Pate","CountryCode":"TWN","1":"TWN","Population":"161700","2":"161700"},{"Name":"Fengyuan","0":"Fengyuan","CountryCode":"TWN","1":"TWN","Population":"161032","2":"161032"},{"Name":"Luchou","0":"Luchou","CountryCode":"TWN","1":"TWN","Population":"160516","2":"160516"},{"Name":"Hsichuh","0":"Hsichuh","CountryCode":"TWN","1":"TWN","Population":"154976","2":"154976"},{"Name":"Shulin","0":"Shulin","CountryCode":"TWN","1":"TWN","Population":"151260","2":"151260"},{"Name":"Yuanlin","0":"Yuanlin","CountryCode":"TWN","1":"TWN","Population":"126402","2":"126402"},{"Name":"Yangmei","0":"Yangmei","CountryCode":"TWN","1":"TWN","Population":"126323","2":"126323"},{"Name":"Taliao","0":"Taliao","CountryCode":"TWN","1":"TWN","Population":"115897","2":"115897"},{"Name":"Kueishan","0":"Kueishan","CountryCode":"TWN","1":"TWN","Population":"112195","2":"112195"},{"Name":"Tanshui","0":"Tanshui","CountryCode":"TWN","1":"TWN","Population":"111882","2":"111882"},{"Name":"Taitung","0":"Taitung","CountryCode":"TWN","1":"TWN","Population":"111039","2":"111039"},{"Name":"Hualien","0":"Hualien","CountryCode":"TWN","1":"TWN","Population":"108407","2":"108407"},{"Name":"Nantou","0":"Nantou","CountryCode":"TWN","1":"TWN","Population":"104723","2":"104723"},{"Name":"Lungtan","0":"Lungtan","CountryCode":"TWN","1":"TWN","Population":"103088","2":"103088"},{"Name":"Touliu","0":"Touliu","CountryCode":"TWN","1":"TWN","Population":"98900","2":"98900"},{"Name":"Tsaotun","0":"Tsaotun","CountryCode":"TWN","1":"TWN","Population":"96800","2":"96800"},{"Name":"Kangshan","0":"Kangshan","CountryCode":"TWN","1":"TWN","Population":"92200","2":"92200"},{"Name":"Ilan","0":"Ilan","CountryCode":"TWN","1":"TWN","Population":"92000","2":"92000"},{"Name":"Miaoli","0":"Miaoli","CountryCode":"TWN","1":"TWN","Population":"90000","2":"90000"},{"Name":"Dar es Salaam","0":"Dar es Salaam","CountryCode":"TZA","1":"TZA","Population":"1747000","2":"1747000"},{"Name":"Dodoma","0":"Dodoma","CountryCode":"TZA","1":"TZA","Population":"189000","2":"189000"},{"Name":"Mwanza","0":"Mwanza","CountryCode":"TZA","1":"TZA","Population":"172300","2":"172300"},{"Name":"Zanzibar","0":"Zanzibar","CountryCode":"TZA","1":"TZA","Population":"157634","2":"157634"},{"Name":"Tanga","0":"Tanga","CountryCode":"TZA","1":"TZA","Population":"137400","2":"137400"},{"Name":"Mbeya","0":"Mbeya","CountryCode":"TZA","1":"TZA","Population":"130800","2":"130800"},{"Name":"Morogoro","0":"Morogoro","CountryCode":"TZA","1":"TZA","Population":"117800","2":"117800"},{"Name":"Arusha","0":"Arusha","CountryCode":"TZA","1":"TZA","Population":"102500","2":"102500"},{"Name":"Moshi","0":"Moshi","CountryCode":"TZA","1":"TZA","Population":"96800","2":"96800"},{"Name":"Tabora","0":"Tabora","CountryCode":"TZA","1":"TZA","Population":"92800","2":"92800"},{"Name":"K\u00f8benhavn","0":"K\u00f8benhavn","CountryCode":"DNK","1":"DNK","Population":"495699","2":"495699"},{"Name":"\u00c5rhus","0":"\u00c5rhus","CountryCode":"DNK","1":"DNK","Population":"284846","2":"284846"},{"Name":"Odense","0":"Odense","CountryCode":"DNK","1":"DNK","Population":"183912","2":"183912"},{"Name":"Aalborg","0":"Aalborg","CountryCode":"DNK","1":"DNK","Population":"161161","2":"161161"},{"Name":"Frederiksberg","0":"Frederiksberg","CountryCode":"DNK","1":"DNK","Population":"90327","2":"90327"},{"Name":"Bangkok","0":"Bangkok","CountryCode":"THA","1":"THA","Population":"6320174","2":"6320174"},{"Name":"Nonthaburi","0":"Nonthaburi","CountryCode":"THA","1":"THA","Population":"292100","2":"292100"},{"Name":"Nakhon Ratchasima","0":"Nakhon Ratchasima","CountryCode":"THA","1":"THA","Population":"181400","2":"181400"},{"Name":"Chiang Mai","0":"Chiang Mai","CountryCode":"THA","1":"THA","Population":"171100","2":"171100"},{"Name":"Udon Thani","0":"Udon Thani","CountryCode":"THA","1":"THA","Population":"158100","2":"158100"},{"Name":"Hat Yai","0":"Hat Yai","CountryCode":"THA","1":"THA","Population":"148632","2":"148632"},{"Name":"Khon Kaen","0":"Khon Kaen","CountryCode":"THA","1":"THA","Population":"126500","2":"126500"},{"Name":"Pak Kret","0":"Pak Kret","CountryCode":"THA","1":"THA","Population":"126055","2":"126055"},{"Name":"Nakhon Sawan","0":"Nakhon Sawan","CountryCode":"THA","1":"THA","Population":"123800","2":"123800"},{"Name":"Ubon Ratchathani","0":"Ubon Ratchathani","CountryCode":"THA","1":"THA","Population":"116300","2":"116300"},{"Name":"Songkhla","0":"Songkhla","CountryCode":"THA","1":"THA","Population":"94900","2":"94900"},{"Name":"Nakhon Pathom","0":"Nakhon Pathom","CountryCode":"THA","1":"THA","Population":"94100","2":"94100"},{"Name":"Lom\u00e9","0":"Lom\u00e9","CountryCode":"TGO","1":"TGO","Population":"375000","2":"375000"},{"Name":"Fakaofo","0":"Fakaofo","CountryCode":"TKL","1":"TKL","Population":"300","2":"300"},{"Name":"Nuku\u00b4alofa","0":"Nuku\u00b4alofa","CountryCode":"TON","1":"TON","Population":"22400","2":"22400"},{"Name":"Chaguanas","0":"Chaguanas","CountryCode":"TTO","1":"TTO","Population":"56601","2":"56601"},{"Name":"Port-of-Spain","0":"Port-of-Spain","CountryCode":"TTO","1":"TTO","Population":"43396","2":"43396"},{"Name":"N\u00b4Djam\u00e9na","0":"N\u00b4Djam\u00e9na","CountryCode":"TCD","1":"TCD","Population":"530965","2":"530965"},{"Name":"Moundou","0":"Moundou","CountryCode":"TCD","1":"TCD","Population":"99500","2":"99500"},{"Name":"Praha","0":"Praha","CountryCode":"CZE","1":"CZE","Population":"1181126","2":"1181126"},{"Name":"Brno","0":"Brno","CountryCode":"CZE","1":"CZE","Population":"381862","2":"381862"},{"Name":"Ostrava","0":"Ostrava","CountryCode":"CZE","1":"CZE","Population":"320041","2":"320041"},{"Name":"Plzen","0":"Plzen","CountryCode":"CZE","1":"CZE","Population":"166759","2":"166759"},{"Name":"Olomouc","0":"Olomouc","CountryCode":"CZE","1":"CZE","Population":"102702","2":"102702"},{"Name":"Liberec","0":"Liberec","CountryCode":"CZE","1":"CZE","Population":"99155","2":"99155"},{"Name":"Cesk\u00e9 Budejovice","0":"Cesk\u00e9 Budejovice","CountryCode":"CZE","1":"CZE","Population":"98186","2":"98186"},{"Name":"Hradec Kr\u00e1lov\u00e9","0":"Hradec Kr\u00e1lov\u00e9","CountryCode":"CZE","1":"CZE","Population":"98080","2":"98080"},{"Name":"\u00dast\u00ed nad Labem","0":"\u00dast\u00ed nad Labem","CountryCode":"CZE","1":"CZE","Population":"95491","2":"95491"},{"Name":"Pardubice","0":"Pardubice","CountryCode":"CZE","1":"CZE","Population":"91309","2":"91309"},{"Name":"Tunis","0":"Tunis","CountryCode":"TUN","1":"TUN","Population":"690600","2":"690600"},{"Name":"Sfax","0":"Sfax","CountryCode":"TUN","1":"TUN","Population":"257800","2":"257800"},{"Name":"Ariana","0":"Ariana","CountryCode":"TUN","1":"TUN","Population":"197000","2":"197000"},{"Name":"Ettadhamen","0":"Ettadhamen","CountryCode":"TUN","1":"TUN","Population":"178600","2":"178600"},{"Name":"Sousse","0":"Sousse","CountryCode":"TUN","1":"TUN","Population":"145900","2":"145900"},{"Name":"Kairouan","0":"Kairouan","CountryCode":"TUN","1":"TUN","Population":"113100","2":"113100"},{"Name":"Biserta","0":"Biserta","CountryCode":"TUN","1":"TUN","Population":"108900","2":"108900"},{"Name":"Gab\u00e8s","0":"Gab\u00e8s","CountryCode":"TUN","1":"TUN","Population":"106600","2":"106600"},{"Name":"Istanbul","0":"Istanbul","CountryCode":"TUR","1":"TUR","Population":"8787958","2":"8787958"},{"Name":"Ankara","0":"Ankara","CountryCode":"TUR","1":"TUR","Population":"3038159","2":"3038159"},{"Name":"Izmir","0":"Izmir","CountryCode":"TUR","1":"TUR","Population":"2130359","2":"2130359"},{"Name":"Adana","0":"Adana","CountryCode":"TUR","1":"TUR","Population":"1131198","2":"1131198"},{"Name":"Bursa","0":"Bursa","CountryCode":"TUR","1":"TUR","Population":"1095842","2":"1095842"},{"Name":"Gaziantep","0":"Gaziantep","CountryCode":"TUR","1":"TUR","Population":"789056","2":"789056"},{"Name":"Konya","0":"Konya","CountryCode":"TUR","1":"TUR","Population":"628364","2":"628364"},{"Name":"Mersin (I\u00e7el)","0":"Mersin (I\u00e7el)","CountryCode":"TUR","1":"TUR","Population":"587212","2":"587212"},{"Name":"Antalya","0":"Antalya","CountryCode":"TUR","1":"TUR","Population":"564914","2":"564914"},{"Name":"Diyarbakir","0":"Diyarbakir","CountryCode":"TUR","1":"TUR","Population":"479884","2":"479884"},{"Name":"Kayseri","0":"Kayseri","CountryCode":"TUR","1":"TUR","Population":"475657","2":"475657"},{"Name":"Eskisehir","0":"Eskisehir","CountryCode":"TUR","1":"TUR","Population":"470781","2":"470781"},{"Name":"Sanliurfa","0":"Sanliurfa","CountryCode":"TUR","1":"TUR","Population":"405905","2":"405905"},{"Name":"Samsun","0":"Samsun","CountryCode":"TUR","1":"TUR","Population":"339871","2":"339871"},{"Name":"Malatya","0":"Malatya","CountryCode":"TUR","1":"TUR","Population":"330312","2":"330312"},{"Name":"Gebze","0":"Gebze","CountryCode":"TUR","1":"TUR","Population":"264170","2":"264170"},{"Name":"Denizli","0":"Denizli","CountryCode":"TUR","1":"TUR","Population":"253848","2":"253848"},{"Name":"Sivas","0":"Sivas","CountryCode":"TUR","1":"TUR","Population":"246642","2":"246642"},{"Name":"Erzurum","0":"Erzurum","CountryCode":"TUR","1":"TUR","Population":"246535","2":"246535"},{"Name":"Tarsus","0":"Tarsus","CountryCode":"TUR","1":"TUR","Population":"246206","2":"246206"},{"Name":"Kahramanmaras","0":"Kahramanmaras","CountryCode":"TUR","1":"TUR","Population":"245772","2":"245772"},{"Name":"El\u00e2zig","0":"El\u00e2zig","CountryCode":"TUR","1":"TUR","Population":"228815","2":"228815"},{"Name":"Van","0":"Van","CountryCode":"TUR","1":"TUR","Population":"219319","2":"219319"},{"Name":"Sultanbeyli","0":"Sultanbeyli","CountryCode":"TUR","1":"TUR","Population":"211068","2":"211068"},{"Name":"Izmit (Kocaeli)","0":"Izmit (Kocaeli)","CountryCode":"TUR","1":"TUR","Population":"210068","2":"210068"},{"Name":"Manisa","0":"Manisa","CountryCode":"TUR","1":"TUR","Population":"207148","2":"207148"},{"Name":"Batman","0":"Batman","CountryCode":"TUR","1":"TUR","Population":"203793","2":"203793"},{"Name":"Balikesir","0":"Balikesir","CountryCode":"TUR","1":"TUR","Population":"196382","2":"196382"},{"Name":"Sakarya (Adapazari)","0":"Sakarya (Adapazari)","CountryCode":"TUR","1":"TUR","Population":"190641","2":"190641"},{"Name":"Iskenderun","0":"Iskenderun","CountryCode":"TUR","1":"TUR","Population":"153022","2":"153022"},{"Name":"Osmaniye","0":"Osmaniye","CountryCode":"TUR","1":"TUR","Population":"146003","2":"146003"},{"Name":"\u00c7orum","0":"\u00c7orum","CountryCode":"TUR","1":"TUR","Population":"145495","2":"145495"},{"Name":"K\u00fctahya","0":"K\u00fctahya","CountryCode":"TUR","1":"TUR","Population":"144761","2":"144761"},{"Name":"Hatay (Antakya)","0":"Hatay (Antakya)","CountryCode":"TUR","1":"TUR","Population":"143982","2":"143982"},{"Name":"Kirikkale","0":"Kirikkale","CountryCode":"TUR","1":"TUR","Population":"142044","2":"142044"},{"Name":"Adiyaman","0":"Adiyaman","CountryCode":"TUR","1":"TUR","Population":"141529","2":"141529"},{"Name":"Trabzon","0":"Trabzon","CountryCode":"TUR","1":"TUR","Population":"138234","2":"138234"},{"Name":"Ordu","0":"Ordu","CountryCode":"TUR","1":"TUR","Population":"133642","2":"133642"},{"Name":"Aydin","0":"Aydin","CountryCode":"TUR","1":"TUR","Population":"128651","2":"128651"},{"Name":"Usak","0":"Usak","CountryCode":"TUR","1":"TUR","Population":"128162","2":"128162"},{"Name":"Edirne","0":"Edirne","CountryCode":"TUR","1":"TUR","Population":"123383","2":"123383"},{"Name":"\u00c7orlu","0":"\u00c7orlu","CountryCode":"TUR","1":"TUR","Population":"123300","2":"123300"},{"Name":"Isparta","0":"Isparta","CountryCode":"TUR","1":"TUR","Population":"121911","2":"121911"},{"Name":"Karab\u00fck","0":"Karab\u00fck","CountryCode":"TUR","1":"TUR","Population":"118285","2":"118285"},{"Name":"Kilis","0":"Kilis","CountryCode":"TUR","1":"TUR","Population":"118245","2":"118245"},{"Name":"Alanya","0":"Alanya","CountryCode":"TUR","1":"TUR","Population":"117300","2":"117300"},{"Name":"Kiziltepe","0":"Kiziltepe","CountryCode":"TUR","1":"TUR","Population":"112000","2":"112000"},{"Name":"Zonguldak","0":"Zonguldak","CountryCode":"TUR","1":"TUR","Population":"111542","2":"111542"},{"Name":"Siirt","0":"Siirt","CountryCode":"TUR","1":"TUR","Population":"107100","2":"107100"},{"Name":"Viransehir","0":"Viransehir","CountryCode":"TUR","1":"TUR","Population":"106400","2":"106400"},{"Name":"Tekirdag","0":"Tekirdag","CountryCode":"TUR","1":"TUR","Population":"106077","2":"106077"},{"Name":"Karaman","0":"Karaman","CountryCode":"TUR","1":"TUR","Population":"104200","2":"104200"},{"Name":"Afyon","0":"Afyon","CountryCode":"TUR","1":"TUR","Population":"103984","2":"103984"},{"Name":"Aksaray","0":"Aksaray","CountryCode":"TUR","1":"TUR","Population":"102681","2":"102681"},{"Name":"Ceyhan","0":"Ceyhan","CountryCode":"TUR","1":"TUR","Population":"102412","2":"102412"},{"Name":"Erzincan","0":"Erzincan","CountryCode":"TUR","1":"TUR","Population":"102304","2":"102304"},{"Name":"Bismil","0":"Bismil","CountryCode":"TUR","1":"TUR","Population":"101400","2":"101400"},{"Name":"Nazilli","0":"Nazilli","CountryCode":"TUR","1":"TUR","Population":"99900","2":"99900"},{"Name":"Tokat","0":"Tokat","CountryCode":"TUR","1":"TUR","Population":"99500","2":"99500"},{"Name":"Kars","0":"Kars","CountryCode":"TUR","1":"TUR","Population":"93000","2":"93000"},{"Name":"Ineg\u00f6l","0":"Ineg\u00f6l","CountryCode":"TUR","1":"TUR","Population":"90500","2":"90500"},{"Name":"Bandirma","0":"Bandirma","CountryCode":"TUR","1":"TUR","Population":"90200","2":"90200"},{"Name":"Ashgabat","0":"Ashgabat","CountryCode":"TKM","1":"TKM","Population":"540600","2":"540600"},{"Name":"Ch\u00e4rjew","0":"Ch\u00e4rjew","CountryCode":"TKM","1":"TKM","Population":"189200","2":"189200"},{"Name":"Dashhowuz","0":"Dashhowuz","CountryCode":"TKM","1":"TKM","Population":"141800","2":"141800"},{"Name":"Mary","0":"Mary","CountryCode":"TKM","1":"TKM","Population":"101000","2":"101000"},{"Name":"Cockburn Town","0":"Cockburn Town","CountryCode":"TCA","1":"TCA","Population":"4800","2":"4800"},{"Name":"Funafuti","0":"Funafuti","CountryCode":"TUV","1":"TUV","Population":"4600","2":"4600"},{"Name":"Kampala","0":"Kampala","CountryCode":"UGA","1":"UGA","Population":"890800","2":"890800"},{"Name":"Kyiv","0":"Kyiv","CountryCode":"UKR","1":"UKR","Population":"2624000","2":"2624000"},{"Name":"Harkova [Harkiv]","0":"Harkova [Harkiv]","CountryCode":"UKR","1":"UKR","Population":"1500000","2":"1500000"},{"Name":"Dnipropetrovsk","0":"Dnipropetrovsk","CountryCode":"UKR","1":"UKR","Population":"1103000","2":"1103000"},{"Name":"Donetsk","0":"Donetsk","CountryCode":"UKR","1":"UKR","Population":"1050000","2":"1050000"},{"Name":"Odesa","0":"Odesa","CountryCode":"UKR","1":"UKR","Population":"1011000","2":"1011000"},{"Name":"Zaporizzja","0":"Zaporizzja","CountryCode":"UKR","1":"UKR","Population":"848000","2":"848000"},{"Name":"Lviv","0":"Lviv","CountryCode":"UKR","1":"UKR","Population":"788000","2":"788000"},{"Name":"Kryvyi Rig","0":"Kryvyi Rig","CountryCode":"UKR","1":"UKR","Population":"703000","2":"703000"},{"Name":"Mykolajiv","0":"Mykolajiv","CountryCode":"UKR","1":"UKR","Population":"508000","2":"508000"},{"Name":"Mariupol","0":"Mariupol","CountryCode":"UKR","1":"UKR","Population":"490000","2":"490000"},{"Name":"Lugansk","0":"Lugansk","CountryCode":"UKR","1":"UKR","Population":"469000","2":"469000"},{"Name":"Vinnytsja","0":"Vinnytsja","CountryCode":"UKR","1":"UKR","Population":"391000","2":"391000"},{"Name":"Makijivka","0":"Makijivka","CountryCode":"UKR","1":"UKR","Population":"384000","2":"384000"},{"Name":"Herson","0":"Herson","CountryCode":"UKR","1":"UKR","Population":"353000","2":"353000"},{"Name":"Sevastopol","0":"Sevastopol","CountryCode":"UKR","1":"UKR","Population":"348000","2":"348000"},{"Name":"Simferopol","0":"Simferopol","CountryCode":"UKR","1":"UKR","Population":"339000","2":"339000"},{"Name":"Pultava [Poltava]","0":"Pultava [Poltava]","CountryCode":"UKR","1":"UKR","Population":"313000","2":"313000"},{"Name":"T\u0161ernigiv","0":"T\u0161ernigiv","CountryCode":"UKR","1":"UKR","Population":"313000","2":"313000"},{"Name":"T\u0161erkasy","0":"T\u0161erkasy","CountryCode":"UKR","1":"UKR","Population":"309000","2":"309000"},{"Name":"Gorlivka","0":"Gorlivka","CountryCode":"UKR","1":"UKR","Population":"299000","2":"299000"},{"Name":"Zytomyr","0":"Zytomyr","CountryCode":"UKR","1":"UKR","Population":"297000","2":"297000"},{"Name":"Sumy","0":"Sumy","CountryCode":"UKR","1":"UKR","Population":"294000","2":"294000"},{"Name":"Dniprodzerzynsk","0":"Dniprodzerzynsk","CountryCode":"UKR","1":"UKR","Population":"270000","2":"270000"},{"Name":"Kirovograd","0":"Kirovograd","CountryCode":"UKR","1":"UKR","Population":"265000","2":"265000"},{"Name":"Hmelnytskyi","0":"Hmelnytskyi","CountryCode":"UKR","1":"UKR","Population":"262000","2":"262000"},{"Name":"T\u0161ernivtsi","0":"T\u0161ernivtsi","CountryCode":"UKR","1":"UKR","Population":"259000","2":"259000"},{"Name":"Rivne","0":"Rivne","CountryCode":"UKR","1":"UKR","Population":"245000","2":"245000"},{"Name":"Krement\u0161uk","0":"Krement\u0161uk","CountryCode":"UKR","1":"UKR","Population":"239000","2":"239000"},{"Name":"Ivano-Frankivsk","0":"Ivano-Frankivsk","CountryCode":"UKR","1":"UKR","Population":"237000","2":"237000"},{"Name":"Ternopil","0":"Ternopil","CountryCode":"UKR","1":"UKR","Population":"236000","2":"236000"},{"Name":"Lutsk","0":"Lutsk","CountryCode":"UKR","1":"UKR","Population":"217000","2":"217000"},{"Name":"Bila Tserkva","0":"Bila Tserkva","CountryCode":"UKR","1":"UKR","Population":"215000","2":"215000"},{"Name":"Kramatorsk","0":"Kramatorsk","CountryCode":"UKR","1":"UKR","Population":"186000","2":"186000"},{"Name":"Melitopol","0":"Melitopol","CountryCode":"UKR","1":"UKR","Population":"169000","2":"169000"},{"Name":"Kert\u0161","0":"Kert\u0161","CountryCode":"UKR","1":"UKR","Population":"162000","2":"162000"},{"Name":"Nikopol","0":"Nikopol","CountryCode":"UKR","1":"UKR","Population":"149000","2":"149000"},{"Name":"Berdjansk","0":"Berdjansk","CountryCode":"UKR","1":"UKR","Population":"130000","2":"130000"},{"Name":"Pavlograd","0":"Pavlograd","CountryCode":"UKR","1":"UKR","Population":"127000","2":"127000"},{"Name":"Sjeverodonetsk","0":"Sjeverodonetsk","CountryCode":"UKR","1":"UKR","Population":"127000","2":"127000"},{"Name":"Slovjansk","0":"Slovjansk","CountryCode":"UKR","1":"UKR","Population":"127000","2":"127000"},{"Name":"Uzgorod","0":"Uzgorod","CountryCode":"UKR","1":"UKR","Population":"127000","2":"127000"},{"Name":"Alt\u0161evsk","0":"Alt\u0161evsk","CountryCode":"UKR","1":"UKR","Population":"119000","2":"119000"},{"Name":"Lysyt\u0161ansk","0":"Lysyt\u0161ansk","CountryCode":"UKR","1":"UKR","Population":"116000","2":"116000"},{"Name":"Jevpatorija","0":"Jevpatorija","CountryCode":"UKR","1":"UKR","Population":"112000","2":"112000"},{"Name":"Kamjanets-Podilskyi","0":"Kamjanets-Podilskyi","CountryCode":"UKR","1":"UKR","Population":"109000","2":"109000"},{"Name":"Jenakijeve","0":"Jenakijeve","CountryCode":"UKR","1":"UKR","Population":"105000","2":"105000"},{"Name":"Krasnyi Lut\u0161","0":"Krasnyi Lut\u0161","CountryCode":"UKR","1":"UKR","Population":"101000","2":"101000"},{"Name":"Stahanov","0":"Stahanov","CountryCode":"UKR","1":"UKR","Population":"101000","2":"101000"},{"Name":"Oleksandrija","0":"Oleksandrija","CountryCode":"UKR","1":"UKR","Population":"99000","2":"99000"},{"Name":"Konotop","0":"Konotop","CountryCode":"UKR","1":"UKR","Population":"96000","2":"96000"},{"Name":"Kostjantynivka","0":"Kostjantynivka","CountryCode":"UKR","1":"UKR","Population":"95000","2":"95000"},{"Name":"Berdyt\u0161iv","0":"Berdyt\u0161iv","CountryCode":"UKR","1":"UKR","Population":"90000","2":"90000"},{"Name":"Izmajil","0":"Izmajil","CountryCode":"UKR","1":"UKR","Population":"90000","2":"90000"},{"Name":"\u0160ostka","0":"\u0160ostka","CountryCode":"UKR","1":"UKR","Population":"90000","2":"90000"},{"Name":"Uman","0":"Uman","CountryCode":"UKR","1":"UKR","Population":"90000","2":"90000"},{"Name":"Brovary","0":"Brovary","CountryCode":"UKR","1":"UKR","Population":"89000","2":"89000"},{"Name":"Mukat\u0161eve","0":"Mukat\u0161eve","CountryCode":"UKR","1":"UKR","Population":"89000","2":"89000"},{"Name":"Budapest","0":"Budapest","CountryCode":"HUN","1":"HUN","Population":"1811552","2":"1811552"},{"Name":"Debrecen","0":"Debrecen","CountryCode":"HUN","1":"HUN","Population":"203648","2":"203648"},{"Name":"Miskolc","0":"Miskolc","CountryCode":"HUN","1":"HUN","Population":"172357","2":"172357"},{"Name":"Szeged","0":"Szeged","CountryCode":"HUN","1":"HUN","Population":"158158","2":"158158"},{"Name":"P\u00e9cs","0":"P\u00e9cs","CountryCode":"HUN","1":"HUN","Population":"157332","2":"157332"},{"Name":"Gy\u00f6r","0":"Gy\u00f6r","CountryCode":"HUN","1":"HUN","Population":"127119","2":"127119"},{"Name":"Nyiregyh\u00e1za","0":"Nyiregyh\u00e1za","CountryCode":"HUN","1":"HUN","Population":"112419","2":"112419"},{"Name":"Kecskem\u00e9t","0":"Kecskem\u00e9t","CountryCode":"HUN","1":"HUN","Population":"105606","2":"105606"},{"Name":"Sz\u00e9kesfeh\u00e9rv\u00e1r","0":"Sz\u00e9kesfeh\u00e9rv\u00e1r","CountryCode":"HUN","1":"HUN","Population":"105119","2":"105119"},{"Name":"Montevideo","0":"Montevideo","CountryCode":"URY","1":"URY","Population":"1236000","2":"1236000"},{"Name":"Noum\u00e9a","0":"Noum\u00e9a","CountryCode":"NCL","1":"NCL","Population":"76293","2":"76293"},{"Name":"Auckland","0":"Auckland","CountryCode":"NZL","1":"NZL","Population":"381800","2":"381800"},{"Name":"Christchurch","0":"Christchurch","CountryCode":"NZL","1":"NZL","Population":"324200","2":"324200"},{"Name":"Manukau","0":"Manukau","CountryCode":"NZL","1":"NZL","Population":"281800","2":"281800"},{"Name":"North Shore","0":"North Shore","CountryCode":"NZL","1":"NZL","Population":"187700","2":"187700"},{"Name":"Waitakere","0":"Waitakere","CountryCode":"NZL","1":"NZL","Population":"170600","2":"170600"},{"Name":"Wellington","0":"Wellington","CountryCode":"NZL","1":"NZL","Population":"166700","2":"166700"},{"Name":"Dunedin","0":"Dunedin","CountryCode":"NZL","1":"NZL","Population":"119600","2":"119600"},{"Name":"Hamilton","0":"Hamilton","CountryCode":"NZL","1":"NZL","Population":"117100","2":"117100"},{"Name":"Lower Hutt","0":"Lower Hutt","CountryCode":"NZL","1":"NZL","Population":"98100","2":"98100"},{"Name":"Toskent","0":"Toskent","CountryCode":"UZB","1":"UZB","Population":"2117500","2":"2117500"},{"Name":"Namangan","0":"Namangan","CountryCode":"UZB","1":"UZB","Population":"370500","2":"370500"},{"Name":"Samarkand","0":"Samarkand","CountryCode":"UZB","1":"UZB","Population":"361800","2":"361800"},{"Name":"Andijon","0":"Andijon","CountryCode":"UZB","1":"UZB","Population":"318600","2":"318600"},{"Name":"Buhoro","0":"Buhoro","CountryCode":"UZB","1":"UZB","Population":"237100","2":"237100"},{"Name":"Karsi","0":"Karsi","CountryCode":"UZB","1":"UZB","Population":"194100","2":"194100"},{"Name":"Nukus","0":"Nukus","CountryCode":"UZB","1":"UZB","Population":"194100","2":"194100"},{"Name":"K\u00fckon","0":"K\u00fckon","CountryCode":"UZB","1":"UZB","Population":"190100","2":"190100"},{"Name":"Fargona","0":"Fargona","CountryCode":"UZB","1":"UZB","Population":"180500","2":"180500"},{"Name":"Circik","0":"Circik","CountryCode":"UZB","1":"UZB","Population":"146400","2":"146400"},{"Name":"Margilon","0":"Margilon","CountryCode":"UZB","1":"UZB","Population":"140800","2":"140800"},{"Name":"\u00dcrgenc","0":"\u00dcrgenc","CountryCode":"UZB","1":"UZB","Population":"138900","2":"138900"},{"Name":"Angren","0":"Angren","CountryCode":"UZB","1":"UZB","Population":"128000","2":"128000"},{"Name":"Cizah","0":"Cizah","CountryCode":"UZB","1":"UZB","Population":"124800","2":"124800"},{"Name":"Navoi","0":"Navoi","CountryCode":"UZB","1":"UZB","Population":"116300","2":"116300"},{"Name":"Olmalik","0":"Olmalik","CountryCode":"UZB","1":"UZB","Population":"114900","2":"114900"},{"Name":"Termiz","0":"Termiz","CountryCode":"UZB","1":"UZB","Population":"109500","2":"109500"},{"Name":"Minsk","0":"Minsk","CountryCode":"BLR","1":"BLR","Population":"1674000","2":"1674000"},{"Name":"Gomel","0":"Gomel","CountryCode":"BLR","1":"BLR","Population":"475000","2":"475000"},{"Name":"Mogiljov","0":"Mogiljov","CountryCode":"BLR","1":"BLR","Population":"356000","2":"356000"},{"Name":"Vitebsk","0":"Vitebsk","CountryCode":"BLR","1":"BLR","Population":"340000","2":"340000"},{"Name":"Grodno","0":"Grodno","CountryCode":"BLR","1":"BLR","Population":"302000","2":"302000"},{"Name":"Brest","0":"Brest","CountryCode":"BLR","1":"BLR","Population":"286000","2":"286000"},{"Name":"Bobruisk","0":"Bobruisk","CountryCode":"BLR","1":"BLR","Population":"221000","2":"221000"},{"Name":"Baranovit\u0161i","0":"Baranovit\u0161i","CountryCode":"BLR","1":"BLR","Population":"167000","2":"167000"},{"Name":"Borisov","0":"Borisov","CountryCode":"BLR","1":"BLR","Population":"151000","2":"151000"},{"Name":"Pinsk","0":"Pinsk","CountryCode":"BLR","1":"BLR","Population":"130000","2":"130000"},{"Name":"Or\u0161a","0":"Or\u0161a","CountryCode":"BLR","1":"BLR","Population":"124000","2":"124000"},{"Name":"Mozyr","0":"Mozyr","CountryCode":"BLR","1":"BLR","Population":"110000","2":"110000"},{"Name":"Novopolotsk","0":"Novopolotsk","CountryCode":"BLR","1":"BLR","Population":"106000","2":"106000"},{"Name":"Lida","0":"Lida","CountryCode":"BLR","1":"BLR","Population":"101000","2":"101000"},{"Name":"Soligorsk","0":"Soligorsk","CountryCode":"BLR","1":"BLR","Population":"101000","2":"101000"},{"Name":"Molodet\u0161no","0":"Molodet\u0161no","CountryCode":"BLR","1":"BLR","Population":"97000","2":"97000"},{"Name":"Mata-Utu","0":"Mata-Utu","CountryCode":"WLF","1":"WLF","Population":"1137","2":"1137"},{"Name":"Port-Vila","0":"Port-Vila","CountryCode":"VUT","1":"VUT","Population":"33700","2":"33700"},{"Name":"Citt\u00e0 del Vaticano","0":"Citt\u00e0 del Vaticano","CountryCode":"VAT","1":"VAT","Population":"455","2":"455"},{"Name":"Caracas","0":"Caracas","CountryCode":"VEN","1":"VEN","Population":"1975294","2":"1975294"},{"Name":"Maraca\u00edbo","0":"Maraca\u00edbo","CountryCode":"VEN","1":"VEN","Population":"1304776","2":"1304776"},{"Name":"Barquisimeto","0":"Barquisimeto","CountryCode":"VEN","1":"VEN","Population":"877239","2":"877239"},{"Name":"Valencia","0":"Valencia","CountryCode":"VEN","1":"VEN","Population":"794246","2":"794246"},{"Name":"Ciudad Guayana","0":"Ciudad Guayana","CountryCode":"VEN","1":"VEN","Population":"663713","2":"663713"},{"Name":"Petare","0":"Petare","CountryCode":"VEN","1":"VEN","Population":"488868","2":"488868"},{"Name":"Maracay","0":"Maracay","CountryCode":"VEN","1":"VEN","Population":"444443","2":"444443"},{"Name":"Barcelona","0":"Barcelona","CountryCode":"VEN","1":"VEN","Population":"322267","2":"322267"},{"Name":"Matur\u00edn","0":"Matur\u00edn","CountryCode":"VEN","1":"VEN","Population":"319726","2":"319726"},{"Name":"San Crist\u00f3bal","0":"San Crist\u00f3bal","CountryCode":"VEN","1":"VEN","Population":"319373","2":"319373"},{"Name":"Ciudad Bol\u00edvar","0":"Ciudad Bol\u00edvar","CountryCode":"VEN","1":"VEN","Population":"301107","2":"301107"},{"Name":"Cuman\u00e1","0":"Cuman\u00e1","CountryCode":"VEN","1":"VEN","Population":"293105","2":"293105"},{"Name":"M\u00e9rida","0":"M\u00e9rida","CountryCode":"VEN","1":"VEN","Population":"224887","2":"224887"},{"Name":"Cabimas","0":"Cabimas","CountryCode":"VEN","1":"VEN","Population":"221329","2":"221329"},{"Name":"Barinas","0":"Barinas","CountryCode":"VEN","1":"VEN","Population":"217831","2":"217831"},{"Name":"Turmero","0":"Turmero","CountryCode":"VEN","1":"VEN","Population":"217499","2":"217499"},{"Name":"Baruta","0":"Baruta","CountryCode":"VEN","1":"VEN","Population":"207290","2":"207290"},{"Name":"Puerto Cabello","0":"Puerto Cabello","CountryCode":"VEN","1":"VEN","Population":"187722","2":"187722"},{"Name":"Santa Ana de Coro","0":"Santa Ana de Coro","CountryCode":"VEN","1":"VEN","Population":"185766","2":"185766"},{"Name":"Los Teques","0":"Los Teques","CountryCode":"VEN","1":"VEN","Population":"178784","2":"178784"},{"Name":"Punto Fijo","0":"Punto Fijo","CountryCode":"VEN","1":"VEN","Population":"167215","2":"167215"},{"Name":"Guarenas","0":"Guarenas","CountryCode":"VEN","1":"VEN","Population":"165889","2":"165889"},{"Name":"Acarigua","0":"Acarigua","CountryCode":"VEN","1":"VEN","Population":"158954","2":"158954"},{"Name":"Puerto La Cruz","0":"Puerto La Cruz","CountryCode":"VEN","1":"VEN","Population":"155700","2":"155700"},{"Name":"Ciudad Losada","0":"Ciudad Losada","CountryCode":"VEN","1":"VEN","Population":"134501","2":"134501"},{"Name":"Guacara","0":"Guacara","CountryCode":"VEN","1":"VEN","Population":"131334","2":"131334"},{"Name":"Valera","0":"Valera","CountryCode":"VEN","1":"VEN","Population":"130281","2":"130281"},{"Name":"Guanare","0":"Guanare","CountryCode":"VEN","1":"VEN","Population":"125621","2":"125621"},{"Name":"Car\u00fapano","0":"Car\u00fapano","CountryCode":"VEN","1":"VEN","Population":"119639","2":"119639"},{"Name":"Catia La Mar","0":"Catia La Mar","CountryCode":"VEN","1":"VEN","Population":"117012","2":"117012"},{"Name":"El Tigre","0":"El Tigre","CountryCode":"VEN","1":"VEN","Population":"116256","2":"116256"},{"Name":"Guatire","0":"Guatire","CountryCode":"VEN","1":"VEN","Population":"109121","2":"109121"},{"Name":"Calabozo","0":"Calabozo","CountryCode":"VEN","1":"VEN","Population":"107146","2":"107146"},{"Name":"Pozuelos","0":"Pozuelos","CountryCode":"VEN","1":"VEN","Population":"105690","2":"105690"},{"Name":"Ciudad Ojeda","0":"Ciudad Ojeda","CountryCode":"VEN","1":"VEN","Population":"99354","2":"99354"},{"Name":"Ocumare del Tuy","0":"Ocumare del Tuy","CountryCode":"VEN","1":"VEN","Population":"97168","2":"97168"},{"Name":"Valle de la Pascua","0":"Valle de la Pascua","CountryCode":"VEN","1":"VEN","Population":"95927","2":"95927"},{"Name":"Araure","0":"Araure","CountryCode":"VEN","1":"VEN","Population":"94269","2":"94269"},{"Name":"San Fernando de Apure","0":"San Fernando de Apure","CountryCode":"VEN","1":"VEN","Population":"93809","2":"93809"},{"Name":"San Felipe","0":"San Felipe","CountryCode":"VEN","1":"VEN","Population":"90940","2":"90940"},{"Name":"El Lim\u00f3n","0":"El Lim\u00f3n","CountryCode":"VEN","1":"VEN","Population":"90000","2":"90000"},{"Name":"Moscow","0":"Moscow","CountryCode":"RUS","1":"RUS","Population":"8389200","2":"8389200"},{"Name":"St Petersburg","0":"St Petersburg","CountryCode":"RUS","1":"RUS","Population":"4694000","2":"4694000"},{"Name":"Novosibirsk","0":"Novosibirsk","CountryCode":"RUS","1":"RUS","Population":"1398800","2":"1398800"},{"Name":"Nizni Novgorod","0":"Nizni Novgorod","CountryCode":"RUS","1":"RUS","Population":"1357000","2":"1357000"},{"Name":"Jekaterinburg","0":"Jekaterinburg","CountryCode":"RUS","1":"RUS","Population":"1266300","2":"1266300"},{"Name":"Samara","0":"Samara","CountryCode":"RUS","1":"RUS","Population":"1156100","2":"1156100"},{"Name":"Omsk","0":"Omsk","CountryCode":"RUS","1":"RUS","Population":"1148900","2":"1148900"},{"Name":"Kazan","0":"Kazan","CountryCode":"RUS","1":"RUS","Population":"1101000","2":"1101000"},{"Name":"Ufa","0":"Ufa","CountryCode":"RUS","1":"RUS","Population":"1091200","2":"1091200"},{"Name":"T\u0161eljabinsk","0":"T\u0161eljabinsk","CountryCode":"RUS","1":"RUS","Population":"1083200","2":"1083200"},{"Name":"Rostov-na-Donu","0":"Rostov-na-Donu","CountryCode":"RUS","1":"RUS","Population":"1012700","2":"1012700"},{"Name":"Perm","0":"Perm","CountryCode":"RUS","1":"RUS","Population":"1009700","2":"1009700"},{"Name":"Volgograd","0":"Volgograd","CountryCode":"RUS","1":"RUS","Population":"993400","2":"993400"},{"Name":"Voronez","0":"Voronez","CountryCode":"RUS","1":"RUS","Population":"907700","2":"907700"},{"Name":"Krasnojarsk","0":"Krasnojarsk","CountryCode":"RUS","1":"RUS","Population":"875500","2":"875500"},{"Name":"Saratov","0":"Saratov","CountryCode":"RUS","1":"RUS","Population":"874000","2":"874000"},{"Name":"Toljatti","0":"Toljatti","CountryCode":"RUS","1":"RUS","Population":"722900","2":"722900"},{"Name":"Uljanovsk","0":"Uljanovsk","CountryCode":"RUS","1":"RUS","Population":"667400","2":"667400"},{"Name":"Izevsk","0":"Izevsk","CountryCode":"RUS","1":"RUS","Population":"652800","2":"652800"},{"Name":"Krasnodar","0":"Krasnodar","CountryCode":"RUS","1":"RUS","Population":"639000","2":"639000"},{"Name":"Jaroslavl","0":"Jaroslavl","CountryCode":"RUS","1":"RUS","Population":"616700","2":"616700"},{"Name":"Habarovsk","0":"Habarovsk","CountryCode":"RUS","1":"RUS","Population":"609400","2":"609400"},{"Name":"Vladivostok","0":"Vladivostok","CountryCode":"RUS","1":"RUS","Population":"606200","2":"606200"},{"Name":"Irkutsk","0":"Irkutsk","CountryCode":"RUS","1":"RUS","Population":"593700","2":"593700"},{"Name":"Barnaul","0":"Barnaul","CountryCode":"RUS","1":"RUS","Population":"580100","2":"580100"},{"Name":"Novokuznetsk","0":"Novokuznetsk","CountryCode":"RUS","1":"RUS","Population":"561600","2":"561600"},{"Name":"Penza","0":"Penza","CountryCode":"RUS","1":"RUS","Population":"532200","2":"532200"},{"Name":"Rjazan","0":"Rjazan","CountryCode":"RUS","1":"RUS","Population":"529900","2":"529900"},{"Name":"Orenburg","0":"Orenburg","CountryCode":"RUS","1":"RUS","Population":"523600","2":"523600"},{"Name":"Lipetsk","0":"Lipetsk","CountryCode":"RUS","1":"RUS","Population":"521000","2":"521000"},{"Name":"Nabereznyje T\u0161elny","0":"Nabereznyje T\u0161elny","CountryCode":"RUS","1":"RUS","Population":"514700","2":"514700"},{"Name":"Tula","0":"Tula","CountryCode":"RUS","1":"RUS","Population":"506100","2":"506100"},{"Name":"Tjumen","0":"Tjumen","CountryCode":"RUS","1":"RUS","Population":"503400","2":"503400"},{"Name":"Kemerovo","0":"Kemerovo","CountryCode":"RUS","1":"RUS","Population":"492700","2":"492700"},{"Name":"Astrahan","0":"Astrahan","CountryCode":"RUS","1":"RUS","Population":"486100","2":"486100"},{"Name":"Tomsk","0":"Tomsk","CountryCode":"RUS","1":"RUS","Population":"482100","2":"482100"},{"Name":"Kirov","0":"Kirov","CountryCode":"RUS","1":"RUS","Population":"466200","2":"466200"},{"Name":"Ivanovo","0":"Ivanovo","CountryCode":"RUS","1":"RUS","Population":"459200","2":"459200"},{"Name":"T\u0161eboksary","0":"T\u0161eboksary","CountryCode":"RUS","1":"RUS","Population":"459200","2":"459200"},{"Name":"Brjansk","0":"Brjansk","CountryCode":"RUS","1":"RUS","Population":"457400","2":"457400"},{"Name":"Tver","0":"Tver","CountryCode":"RUS","1":"RUS","Population":"454900","2":"454900"},{"Name":"Kursk","0":"Kursk","CountryCode":"RUS","1":"RUS","Population":"443500","2":"443500"},{"Name":"Magnitogorsk","0":"Magnitogorsk","CountryCode":"RUS","1":"RUS","Population":"427900","2":"427900"},{"Name":"Kaliningrad","0":"Kaliningrad","CountryCode":"RUS","1":"RUS","Population":"424400","2":"424400"},{"Name":"Nizni Tagil","0":"Nizni Tagil","CountryCode":"RUS","1":"RUS","Population":"390900","2":"390900"},{"Name":"Murmansk","0":"Murmansk","CountryCode":"RUS","1":"RUS","Population":"376300","2":"376300"},{"Name":"Ulan-Ude","0":"Ulan-Ude","CountryCode":"RUS","1":"RUS","Population":"370400","2":"370400"},{"Name":"Kurgan","0":"Kurgan","CountryCode":"RUS","1":"RUS","Population":"364700","2":"364700"},{"Name":"Arkangeli","0":"Arkangeli","CountryCode":"RUS","1":"RUS","Population":"361800","2":"361800"},{"Name":"Sot\u0161i","0":"Sot\u0161i","CountryCode":"RUS","1":"RUS","Population":"358600","2":"358600"},{"Name":"Smolensk","0":"Smolensk","CountryCode":"RUS","1":"RUS","Population":"353400","2":"353400"},{"Name":"Orjol","0":"Orjol","CountryCode":"RUS","1":"RUS","Population":"344500","2":"344500"},{"Name":"Stavropol","0":"Stavropol","CountryCode":"RUS","1":"RUS","Population":"343300","2":"343300"},{"Name":"Belgorod","0":"Belgorod","CountryCode":"RUS","1":"RUS","Population":"342000","2":"342000"},{"Name":"Kaluga","0":"Kaluga","CountryCode":"RUS","1":"RUS","Population":"339300","2":"339300"},{"Name":"Vladimir","0":"Vladimir","CountryCode":"RUS","1":"RUS","Population":"337100","2":"337100"},{"Name":"Mahat\u0161kala","0":"Mahat\u0161kala","CountryCode":"RUS","1":"RUS","Population":"332800","2":"332800"},{"Name":"T\u0161erepovets","0":"T\u0161erepovets","CountryCode":"RUS","1":"RUS","Population":"324400","2":"324400"},{"Name":"Saransk","0":"Saransk","CountryCode":"RUS","1":"RUS","Population":"314800","2":"314800"},{"Name":"Tambov","0":"Tambov","CountryCode":"RUS","1":"RUS","Population":"312000","2":"312000"},{"Name":"Vladikavkaz","0":"Vladikavkaz","CountryCode":"RUS","1":"RUS","Population":"310100","2":"310100"},{"Name":"T\u0161ita","0":"T\u0161ita","CountryCode":"RUS","1":"RUS","Population":"309900","2":"309900"},{"Name":"Vologda","0":"Vologda","CountryCode":"RUS","1":"RUS","Population":"302500","2":"302500"},{"Name":"Veliki Novgorod","0":"Veliki Novgorod","CountryCode":"RUS","1":"RUS","Population":"299500","2":"299500"},{"Name":"Komsomolsk-na-Amure","0":"Komsomolsk-na-Amure","CountryCode":"RUS","1":"RUS","Population":"291600","2":"291600"},{"Name":"Kostroma","0":"Kostroma","CountryCode":"RUS","1":"RUS","Population":"288100","2":"288100"},{"Name":"Volzski","0":"Volzski","CountryCode":"RUS","1":"RUS","Population":"286900","2":"286900"},{"Name":"Taganrog","0":"Taganrog","CountryCode":"RUS","1":"RUS","Population":"284400","2":"284400"},{"Name":"Petroskoi","0":"Petroskoi","CountryCode":"RUS","1":"RUS","Population":"282100","2":"282100"},{"Name":"Bratsk","0":"Bratsk","CountryCode":"RUS","1":"RUS","Population":"277600","2":"277600"},{"Name":"Dzerzinsk","0":"Dzerzinsk","CountryCode":"RUS","1":"RUS","Population":"277100","2":"277100"},{"Name":"Surgut","0":"Surgut","CountryCode":"RUS","1":"RUS","Population":"274900","2":"274900"},{"Name":"Orsk","0":"Orsk","CountryCode":"RUS","1":"RUS","Population":"273900","2":"273900"},{"Name":"Sterlitamak","0":"Sterlitamak","CountryCode":"RUS","1":"RUS","Population":"265200","2":"265200"},{"Name":"Angarsk","0":"Angarsk","CountryCode":"RUS","1":"RUS","Population":"264700","2":"264700"},{"Name":"Jo\u0161kar-Ola","0":"Jo\u0161kar-Ola","CountryCode":"RUS","1":"RUS","Population":"249200","2":"249200"},{"Name":"Rybinsk","0":"Rybinsk","CountryCode":"RUS","1":"RUS","Population":"239600","2":"239600"},{"Name":"Prokopjevsk","0":"Prokopjevsk","CountryCode":"RUS","1":"RUS","Population":"237300","2":"237300"},{"Name":"Niznevartovsk","0":"Niznevartovsk","CountryCode":"RUS","1":"RUS","Population":"233900","2":"233900"},{"Name":"Nalt\u0161ik","0":"Nalt\u0161ik","CountryCode":"RUS","1":"RUS","Population":"233400","2":"233400"},{"Name":"Syktyvkar","0":"Syktyvkar","CountryCode":"RUS","1":"RUS","Population":"229700","2":"229700"},{"Name":"Severodvinsk","0":"Severodvinsk","CountryCode":"RUS","1":"RUS","Population":"229300","2":"229300"},{"Name":"Bijsk","0":"Bijsk","CountryCode":"RUS","1":"RUS","Population":"225000","2":"225000"},{"Name":"Niznekamsk","0":"Niznekamsk","CountryCode":"RUS","1":"RUS","Population":"223400","2":"223400"},{"Name":"Blagove\u0161t\u0161ensk","0":"Blagove\u0161t\u0161ensk","CountryCode":"RUS","1":"RUS","Population":"222000","2":"222000"},{"Name":"\u0160ahty","0":"\u0160ahty","CountryCode":"RUS","1":"RUS","Population":"221800","2":"221800"},{"Name":"Staryi Oskol","0":"Staryi Oskol","CountryCode":"RUS","1":"RUS","Population":"213800","2":"213800"},{"Name":"Zelenograd","0":"Zelenograd","CountryCode":"RUS","1":"RUS","Population":"207100","2":"207100"},{"Name":"Balakovo","0":"Balakovo","CountryCode":"RUS","1":"RUS","Population":"206000","2":"206000"},{"Name":"Novorossijsk","0":"Novorossijsk","CountryCode":"RUS","1":"RUS","Population":"203300","2":"203300"},{"Name":"Pihkova","0":"Pihkova","CountryCode":"RUS","1":"RUS","Population":"201500","2":"201500"},{"Name":"Zlatoust","0":"Zlatoust","CountryCode":"RUS","1":"RUS","Population":"196900","2":"196900"},{"Name":"Jakutsk","0":"Jakutsk","CountryCode":"RUS","1":"RUS","Population":"195400","2":"195400"},{"Name":"Podolsk","0":"Podolsk","CountryCode":"RUS","1":"RUS","Population":"194300","2":"194300"},{"Name":"Petropavlovsk-Kamt\u0161atski","0":"Petropavlovsk-Kamt\u0161atski","CountryCode":"RUS","1":"RUS","Population":"194100","2":"194100"},{"Name":"Kamensk-Uralski","0":"Kamensk-Uralski","CountryCode":"RUS","1":"RUS","Population":"190600","2":"190600"},{"Name":"Engels","0":"Engels","CountryCode":"RUS","1":"RUS","Population":"189000","2":"189000"},{"Name":"Syzran","0":"Syzran","CountryCode":"RUS","1":"RUS","Population":"186900","2":"186900"},{"Name":"Grozny","0":"Grozny","CountryCode":"RUS","1":"RUS","Population":"186000","2":"186000"},{"Name":"Novot\u0161erkassk","0":"Novot\u0161erkassk","CountryCode":"RUS","1":"RUS","Population":"184400","2":"184400"},{"Name":"Berezniki","0":"Berezniki","CountryCode":"RUS","1":"RUS","Population":"181900","2":"181900"},{"Name":"Juzno-Sahalinsk","0":"Juzno-Sahalinsk","CountryCode":"RUS","1":"RUS","Population":"179200","2":"179200"},{"Name":"Volgodonsk","0":"Volgodonsk","CountryCode":"RUS","1":"RUS","Population":"178200","2":"178200"},{"Name":"Abakan","0":"Abakan","CountryCode":"RUS","1":"RUS","Population":"169200","2":"169200"},{"Name":"Maikop","0":"Maikop","CountryCode":"RUS","1":"RUS","Population":"167300","2":"167300"},{"Name":"Miass","0":"Miass","CountryCode":"RUS","1":"RUS","Population":"166200","2":"166200"},{"Name":"Armavir","0":"Armavir","CountryCode":"RUS","1":"RUS","Population":"164900","2":"164900"},{"Name":"Ljubertsy","0":"Ljubertsy","CountryCode":"RUS","1":"RUS","Population":"163900","2":"163900"},{"Name":"Rubtsovsk","0":"Rubtsovsk","CountryCode":"RUS","1":"RUS","Population":"162600","2":"162600"},{"Name":"Kovrov","0":"Kovrov","CountryCode":"RUS","1":"RUS","Population":"159900","2":"159900"},{"Name":"Nahodka","0":"Nahodka","CountryCode":"RUS","1":"RUS","Population":"157700","2":"157700"},{"Name":"Ussurijsk","0":"Ussurijsk","CountryCode":"RUS","1":"RUS","Population":"157300","2":"157300"},{"Name":"Salavat","0":"Salavat","CountryCode":"RUS","1":"RUS","Population":"156800","2":"156800"},{"Name":"Myti\u0161t\u0161i","0":"Myti\u0161t\u0161i","CountryCode":"RUS","1":"RUS","Population":"155700","2":"155700"},{"Name":"Kolomna","0":"Kolomna","CountryCode":"RUS","1":"RUS","Population":"150700","2":"150700"},{"Name":"Elektrostal","0":"Elektrostal","CountryCode":"RUS","1":"RUS","Population":"147000","2":"147000"},{"Name":"Murom","0":"Murom","CountryCode":"RUS","1":"RUS","Population":"142400","2":"142400"},{"Name":"Kolpino","0":"Kolpino","CountryCode":"RUS","1":"RUS","Population":"141200","2":"141200"},{"Name":"Norilsk","0":"Norilsk","CountryCode":"RUS","1":"RUS","Population":"140800","2":"140800"},{"Name":"Almetjevsk","0":"Almetjevsk","CountryCode":"RUS","1":"RUS","Population":"140700","2":"140700"},{"Name":"Novomoskovsk","0":"Novomoskovsk","CountryCode":"RUS","1":"RUS","Population":"138100","2":"138100"},{"Name":"Dimitrovgrad","0":"Dimitrovgrad","CountryCode":"RUS","1":"RUS","Population":"137000","2":"137000"},{"Name":"Pervouralsk","0":"Pervouralsk","CountryCode":"RUS","1":"RUS","Population":"136100","2":"136100"},{"Name":"Himki","0":"Himki","CountryCode":"RUS","1":"RUS","Population":"133700","2":"133700"},{"Name":"Bala\u0161iha","0":"Bala\u0161iha","CountryCode":"RUS","1":"RUS","Population":"132900","2":"132900"},{"Name":"Nevinnomyssk","0":"Nevinnomyssk","CountryCode":"RUS","1":"RUS","Population":"132600","2":"132600"},{"Name":"Pjatigorsk","0":"Pjatigorsk","CountryCode":"RUS","1":"RUS","Population":"132500","2":"132500"},{"Name":"Korolev","0":"Korolev","CountryCode":"RUS","1":"RUS","Population":"132400","2":"132400"},{"Name":"Serpuhov","0":"Serpuhov","CountryCode":"RUS","1":"RUS","Population":"132000","2":"132000"},{"Name":"Odintsovo","0":"Odintsovo","CountryCode":"RUS","1":"RUS","Population":"127400","2":"127400"},{"Name":"Orehovo-Zujevo","0":"Orehovo-Zujevo","CountryCode":"RUS","1":"RUS","Population":"124900","2":"124900"},{"Name":"Kamy\u0161in","0":"Kamy\u0161in","CountryCode":"RUS","1":"RUS","Population":"124600","2":"124600"},{"Name":"Novot\u0161eboksarsk","0":"Novot\u0161eboksarsk","CountryCode":"RUS","1":"RUS","Population":"123400","2":"123400"},{"Name":"T\u0161erkessk","0":"T\u0161erkessk","CountryCode":"RUS","1":"RUS","Population":"121700","2":"121700"},{"Name":"At\u0161insk","0":"At\u0161insk","CountryCode":"RUS","1":"RUS","Population":"121600","2":"121600"},{"Name":"Magadan","0":"Magadan","CountryCode":"RUS","1":"RUS","Population":"121000","2":"121000"},{"Name":"Mit\u0161urinsk","0":"Mit\u0161urinsk","CountryCode":"RUS","1":"RUS","Population":"120700","2":"120700"},{"Name":"Kislovodsk","0":"Kislovodsk","CountryCode":"RUS","1":"RUS","Population":"120400","2":"120400"},{"Name":"Jelets","0":"Jelets","CountryCode":"RUS","1":"RUS","Population":"119400","2":"119400"},{"Name":"Seversk","0":"Seversk","CountryCode":"RUS","1":"RUS","Population":"118600","2":"118600"},{"Name":"Noginsk","0":"Noginsk","CountryCode":"RUS","1":"RUS","Population":"117200","2":"117200"},{"Name":"Velikije Luki","0":"Velikije Luki","CountryCode":"RUS","1":"RUS","Population":"116300","2":"116300"},{"Name":"Novokuiby\u0161evsk","0":"Novokuiby\u0161evsk","CountryCode":"RUS","1":"RUS","Population":"116200","2":"116200"},{"Name":"Neftekamsk","0":"Neftekamsk","CountryCode":"RUS","1":"RUS","Population":"115700","2":"115700"},{"Name":"Leninsk-Kuznetski","0":"Leninsk-Kuznetski","CountryCode":"RUS","1":"RUS","Population":"113800","2":"113800"},{"Name":"Oktjabrski","0":"Oktjabrski","CountryCode":"RUS","1":"RUS","Population":"111500","2":"111500"},{"Name":"Sergijev Posad","0":"Sergijev Posad","CountryCode":"RUS","1":"RUS","Population":"111100","2":"111100"},{"Name":"Arzamas","0":"Arzamas","CountryCode":"RUS","1":"RUS","Population":"110700","2":"110700"},{"Name":"Kiseljovsk","0":"Kiseljovsk","CountryCode":"RUS","1":"RUS","Population":"110000","2":"110000"},{"Name":"Novotroitsk","0":"Novotroitsk","CountryCode":"RUS","1":"RUS","Population":"109600","2":"109600"},{"Name":"Obninsk","0":"Obninsk","CountryCode":"RUS","1":"RUS","Population":"108300","2":"108300"},{"Name":"Kansk","0":"Kansk","CountryCode":"RUS","1":"RUS","Population":"107400","2":"107400"},{"Name":"Glazov","0":"Glazov","CountryCode":"RUS","1":"RUS","Population":"106300","2":"106300"},{"Name":"Solikamsk","0":"Solikamsk","CountryCode":"RUS","1":"RUS","Population":"106000","2":"106000"},{"Name":"Sarapul","0":"Sarapul","CountryCode":"RUS","1":"RUS","Population":"105700","2":"105700"},{"Name":"Ust-Ilimsk","0":"Ust-Ilimsk","CountryCode":"RUS","1":"RUS","Population":"105200","2":"105200"},{"Name":"\u0160t\u0161olkovo","0":"\u0160t\u0161olkovo","CountryCode":"RUS","1":"RUS","Population":"104900","2":"104900"},{"Name":"Mezduret\u0161ensk","0":"Mezduret\u0161ensk","CountryCode":"RUS","1":"RUS","Population":"104400","2":"104400"},{"Name":"Usolje-Sibirskoje","0":"Usolje-Sibirskoje","CountryCode":"RUS","1":"RUS","Population":"103500","2":"103500"},{"Name":"Elista","0":"Elista","CountryCode":"RUS","1":"RUS","Population":"103300","2":"103300"},{"Name":"Novo\u0161ahtinsk","0":"Novo\u0161ahtinsk","CountryCode":"RUS","1":"RUS","Population":"101900","2":"101900"},{"Name":"Votkinsk","0":"Votkinsk","CountryCode":"RUS","1":"RUS","Population":"101700","2":"101700"},{"Name":"Kyzyl","0":"Kyzyl","CountryCode":"RUS","1":"RUS","Population":"101100","2":"101100"},{"Name":"Serov","0":"Serov","CountryCode":"RUS","1":"RUS","Population":"100400","2":"100400"},{"Name":"Zelenodolsk","0":"Zelenodolsk","CountryCode":"RUS","1":"RUS","Population":"100200","2":"100200"},{"Name":"Zeleznodoroznyi","0":"Zeleznodoroznyi","CountryCode":"RUS","1":"RUS","Population":"100100","2":"100100"},{"Name":"Kine\u0161ma","0":"Kine\u0161ma","CountryCode":"RUS","1":"RUS","Population":"100000","2":"100000"},{"Name":"Kuznetsk","0":"Kuznetsk","CountryCode":"RUS","1":"RUS","Population":"98200","2":"98200"},{"Name":"Uhta","0":"Uhta","CountryCode":"RUS","1":"RUS","Population":"98000","2":"98000"},{"Name":"Jessentuki","0":"Jessentuki","CountryCode":"RUS","1":"RUS","Population":"97900","2":"97900"},{"Name":"Tobolsk","0":"Tobolsk","CountryCode":"RUS","1":"RUS","Population":"97600","2":"97600"},{"Name":"Neftejugansk","0":"Neftejugansk","CountryCode":"RUS","1":"RUS","Population":"97400","2":"97400"},{"Name":"Bataisk","0":"Bataisk","CountryCode":"RUS","1":"RUS","Population":"97300","2":"97300"},{"Name":"Nojabrsk","0":"Nojabrsk","CountryCode":"RUS","1":"RUS","Population":"97300","2":"97300"},{"Name":"Bala\u0161ov","0":"Bala\u0161ov","CountryCode":"RUS","1":"RUS","Population":"97100","2":"97100"},{"Name":"Zeleznogorsk","0":"Zeleznogorsk","CountryCode":"RUS","1":"RUS","Population":"96900","2":"96900"},{"Name":"Zukovski","0":"Zukovski","CountryCode":"RUS","1":"RUS","Population":"96500","2":"96500"},{"Name":"Anzero-Sudzensk","0":"Anzero-Sudzensk","CountryCode":"RUS","1":"RUS","Population":"96100","2":"96100"},{"Name":"Bugulma","0":"Bugulma","CountryCode":"RUS","1":"RUS","Population":"94100","2":"94100"},{"Name":"Zeleznogorsk","0":"Zeleznogorsk","CountryCode":"RUS","1":"RUS","Population":"94000","2":"94000"},{"Name":"Novouralsk","0":"Novouralsk","CountryCode":"RUS","1":"RUS","Population":"93300","2":"93300"},{"Name":"Pu\u0161kin","0":"Pu\u0161kin","CountryCode":"RUS","1":"RUS","Population":"92900","2":"92900"},{"Name":"Vorkuta","0":"Vorkuta","CountryCode":"RUS","1":"RUS","Population":"92600","2":"92600"},{"Name":"Derbent","0":"Derbent","CountryCode":"RUS","1":"RUS","Population":"92300","2":"92300"},{"Name":"Kirovo-T\u0161epetsk","0":"Kirovo-T\u0161epetsk","CountryCode":"RUS","1":"RUS","Population":"91600","2":"91600"},{"Name":"Krasnogorsk","0":"Krasnogorsk","CountryCode":"RUS","1":"RUS","Population":"91000","2":"91000"},{"Name":"Klin","0":"Klin","CountryCode":"RUS","1":"RUS","Population":"90000","2":"90000"},{"Name":"T\u0161aikovski","0":"T\u0161aikovski","CountryCode":"RUS","1":"RUS","Population":"90000","2":"90000"},{"Name":"Novyi Urengoi","0":"Novyi Urengoi","CountryCode":"RUS","1":"RUS","Population":"89800","2":"89800"},{"Name":"Ho Chi Minh City","0":"Ho Chi Minh City","CountryCode":"VNM","1":"VNM","Population":"3980000","2":"3980000"},{"Name":"Hanoi","0":"Hanoi","CountryCode":"VNM","1":"VNM","Population":"1410000","2":"1410000"},{"Name":"Haiphong","0":"Haiphong","CountryCode":"VNM","1":"VNM","Population":"783133","2":"783133"},{"Name":"Da Nang","0":"Da Nang","CountryCode":"VNM","1":"VNM","Population":"382674","2":"382674"},{"Name":"Bi\u00ean Hoa","0":"Bi\u00ean Hoa","CountryCode":"VNM","1":"VNM","Population":"282095","2":"282095"},{"Name":"Nha Trang","0":"Nha Trang","CountryCode":"VNM","1":"VNM","Population":"221331","2":"221331"},{"Name":"Hue","0":"Hue","CountryCode":"VNM","1":"VNM","Population":"219149","2":"219149"},{"Name":"Can Tho","0":"Can Tho","CountryCode":"VNM","1":"VNM","Population":"215587","2":"215587"},{"Name":"Cam Pha","0":"Cam Pha","CountryCode":"VNM","1":"VNM","Population":"209086","2":"209086"},{"Name":"Nam Dinh","0":"Nam Dinh","CountryCode":"VNM","1":"VNM","Population":"171699","2":"171699"},{"Name":"Quy Nhon","0":"Quy Nhon","CountryCode":"VNM","1":"VNM","Population":"163385","2":"163385"},{"Name":"Vung Tau","0":"Vung Tau","CountryCode":"VNM","1":"VNM","Population":"145145","2":"145145"},{"Name":"Rach Gia","0":"Rach Gia","CountryCode":"VNM","1":"VNM","Population":"141132","2":"141132"},{"Name":"Long Xuyen","0":"Long Xuyen","CountryCode":"VNM","1":"VNM","Population":"132681","2":"132681"},{"Name":"Thai Nguyen","0":"Thai Nguyen","CountryCode":"VNM","1":"VNM","Population":"127643","2":"127643"},{"Name":"Hong Gai","0":"Hong Gai","CountryCode":"VNM","1":"VNM","Population":"127484","2":"127484"},{"Name":"Phan Thi\u00eat","0":"Phan Thi\u00eat","CountryCode":"VNM","1":"VNM","Population":"114236","2":"114236"},{"Name":"Cam Ranh","0":"Cam Ranh","CountryCode":"VNM","1":"VNM","Population":"114041","2":"114041"},{"Name":"Vinh","0":"Vinh","CountryCode":"VNM","1":"VNM","Population":"112455","2":"112455"},{"Name":"My Tho","0":"My Tho","CountryCode":"VNM","1":"VNM","Population":"108404","2":"108404"},{"Name":"Da Lat","0":"Da Lat","CountryCode":"VNM","1":"VNM","Population":"106409","2":"106409"},{"Name":"Buon Ma Thuot","0":"Buon Ma Thuot","CountryCode":"VNM","1":"VNM","Population":"97044","2":"97044"},{"Name":"Tallinn","0":"Tallinn","CountryCode":"EST","1":"EST","Population":"403981","2":"403981"},{"Name":"Tartu","0":"Tartu","CountryCode":"EST","1":"EST","Population":"101246","2":"101246"},{"Name":"New York","0":"New York","CountryCode":"USA","1":"USA","Population":"8008278","2":"8008278"},{"Name":"Los Angeles","0":"Los Angeles","CountryCode":"USA","1":"USA","Population":"3694820","2":"3694820"},{"Name":"Chicago","0":"Chicago","CountryCode":"USA","1":"USA","Population":"2896016","2":"2896016"},{"Name":"Houston","0":"Houston","CountryCode":"USA","1":"USA","Population":"1953631","2":"1953631"},{"Name":"Philadelphia","0":"Philadelphia","CountryCode":"USA","1":"USA","Population":"1517550","2":"1517550"},{"Name":"Phoenix","0":"Phoenix","CountryCode":"USA","1":"USA","Population":"1321045","2":"1321045"},{"Name":"San Diego","0":"San Diego","CountryCode":"USA","1":"USA","Population":"1223400","2":"1223400"},{"Name":"Dallas","0":"Dallas","CountryCode":"USA","1":"USA","Population":"1188580","2":"1188580"},{"Name":"San Antonio","0":"San Antonio","CountryCode":"USA","1":"USA","Population":"1144646","2":"1144646"},{"Name":"Detroit","0":"Detroit","CountryCode":"USA","1":"USA","Population":"951270","2":"951270"},{"Name":"San Jose","0":"San Jose","CountryCode":"USA","1":"USA","Population":"894943","2":"894943"},{"Name":"Indianapolis","0":"Indianapolis","CountryCode":"USA","1":"USA","Population":"791926","2":"791926"},{"Name":"San Francisco","0":"San Francisco","CountryCode":"USA","1":"USA","Population":"776733","2":"776733"},{"Name":"Jacksonville","0":"Jacksonville","CountryCode":"USA","1":"USA","Population":"735167","2":"735167"},{"Name":"Columbus","0":"Columbus","CountryCode":"USA","1":"USA","Population":"711470","2":"711470"},{"Name":"Austin","0":"Austin","CountryCode":"USA","1":"USA","Population":"656562","2":"656562"},{"Name":"Baltimore","0":"Baltimore","CountryCode":"USA","1":"USA","Population":"651154","2":"651154"},{"Name":"Memphis","0":"Memphis","CountryCode":"USA","1":"USA","Population":"650100","2":"650100"},{"Name":"Milwaukee","0":"Milwaukee","CountryCode":"USA","1":"USA","Population":"596974","2":"596974"},{"Name":"Boston","0":"Boston","CountryCode":"USA","1":"USA","Population":"589141","2":"589141"},{"Name":"Washington","0":"Washington","CountryCode":"USA","1":"USA","Population":"572059","2":"572059"},{"Name":"Nashville-Davidson","0":"Nashville-Davidson","CountryCode":"USA","1":"USA","Population":"569891","2":"569891"},{"Name":"El Paso","0":"El Paso","CountryCode":"USA","1":"USA","Population":"563662","2":"563662"},{"Name":"Seattle","0":"Seattle","CountryCode":"USA","1":"USA","Population":"563374","2":"563374"},{"Name":"Denver","0":"Denver","CountryCode":"USA","1":"USA","Population":"554636","2":"554636"},{"Name":"Charlotte","0":"Charlotte","CountryCode":"USA","1":"USA","Population":"540828","2":"540828"},{"Name":"Fort Worth","0":"Fort Worth","CountryCode":"USA","1":"USA","Population":"534694","2":"534694"},{"Name":"Portland","0":"Portland","CountryCode":"USA","1":"USA","Population":"529121","2":"529121"},{"Name":"Oklahoma City","0":"Oklahoma City","CountryCode":"USA","1":"USA","Population":"506132","2":"506132"},{"Name":"Tucson","0":"Tucson","CountryCode":"USA","1":"USA","Population":"486699","2":"486699"},{"Name":"New Orleans","0":"New Orleans","CountryCode":"USA","1":"USA","Population":"484674","2":"484674"},{"Name":"Las Vegas","0":"Las Vegas","CountryCode":"USA","1":"USA","Population":"478434","2":"478434"},{"Name":"Cleveland","0":"Cleveland","CountryCode":"USA","1":"USA","Population":"478403","2":"478403"},{"Name":"Long Beach","0":"Long Beach","CountryCode":"USA","1":"USA","Population":"461522","2":"461522"},{"Name":"Albuquerque","0":"Albuquerque","CountryCode":"USA","1":"USA","Population":"448607","2":"448607"},{"Name":"Kansas City","0":"Kansas City","CountryCode":"USA","1":"USA","Population":"441545","2":"441545"},{"Name":"Fresno","0":"Fresno","CountryCode":"USA","1":"USA","Population":"427652","2":"427652"},{"Name":"Virginia Beach","0":"Virginia Beach","CountryCode":"USA","1":"USA","Population":"425257","2":"425257"},{"Name":"Atlanta","0":"Atlanta","CountryCode":"USA","1":"USA","Population":"416474","2":"416474"},{"Name":"Sacramento","0":"Sacramento","CountryCode":"USA","1":"USA","Population":"407018","2":"407018"},{"Name":"Oakland","0":"Oakland","CountryCode":"USA","1":"USA","Population":"399484","2":"399484"},{"Name":"Mesa","0":"Mesa","CountryCode":"USA","1":"USA","Population":"396375","2":"396375"},{"Name":"Tulsa","0":"Tulsa","CountryCode":"USA","1":"USA","Population":"393049","2":"393049"},{"Name":"Omaha","0":"Omaha","CountryCode":"USA","1":"USA","Population":"390007","2":"390007"},{"Name":"Minneapolis","0":"Minneapolis","CountryCode":"USA","1":"USA","Population":"382618","2":"382618"},{"Name":"Honolulu","0":"Honolulu","CountryCode":"USA","1":"USA","Population":"371657","2":"371657"},{"Name":"Miami","0":"Miami","CountryCode":"USA","1":"USA","Population":"362470","2":"362470"},{"Name":"Colorado Springs","0":"Colorado Springs","CountryCode":"USA","1":"USA","Population":"360890","2":"360890"},{"Name":"Saint Louis","0":"Saint Louis","CountryCode":"USA","1":"USA","Population":"348189","2":"348189"},{"Name":"Wichita","0":"Wichita","CountryCode":"USA","1":"USA","Population":"344284","2":"344284"},{"Name":"Santa Ana","0":"Santa Ana","CountryCode":"USA","1":"USA","Population":"337977","2":"337977"},{"Name":"Pittsburgh","0":"Pittsburgh","CountryCode":"USA","1":"USA","Population":"334563","2":"334563"},{"Name":"Arlington","0":"Arlington","CountryCode":"USA","1":"USA","Population":"332969","2":"332969"},{"Name":"Cincinnati","0":"Cincinnati","CountryCode":"USA","1":"USA","Population":"331285","2":"331285"},{"Name":"Anaheim","0":"Anaheim","CountryCode":"USA","1":"USA","Population":"328014","2":"328014"},{"Name":"Toledo","0":"Toledo","CountryCode":"USA","1":"USA","Population":"313619","2":"313619"},{"Name":"Tampa","0":"Tampa","CountryCode":"USA","1":"USA","Population":"303447","2":"303447"},{"Name":"Buffalo","0":"Buffalo","CountryCode":"USA","1":"USA","Population":"292648","2":"292648"},{"Name":"Saint Paul","0":"Saint Paul","CountryCode":"USA","1":"USA","Population":"287151","2":"287151"},{"Name":"Corpus Christi","0":"Corpus Christi","CountryCode":"USA","1":"USA","Population":"277454","2":"277454"},{"Name":"Aurora","0":"Aurora","CountryCode":"USA","1":"USA","Population":"276393","2":"276393"},{"Name":"Raleigh","0":"Raleigh","CountryCode":"USA","1":"USA","Population":"276093","2":"276093"},{"Name":"Newark","0":"Newark","CountryCode":"USA","1":"USA","Population":"273546","2":"273546"},{"Name":"Lexington-Fayette","0":"Lexington-Fayette","CountryCode":"USA","1":"USA","Population":"260512","2":"260512"},{"Name":"Anchorage","0":"Anchorage","CountryCode":"USA","1":"USA","Population":"260283","2":"260283"},{"Name":"Louisville","0":"Louisville","CountryCode":"USA","1":"USA","Population":"256231","2":"256231"},{"Name":"Riverside","0":"Riverside","CountryCode":"USA","1":"USA","Population":"255166","2":"255166"},{"Name":"Saint Petersburg","0":"Saint Petersburg","CountryCode":"USA","1":"USA","Population":"248232","2":"248232"},{"Name":"Bakersfield","0":"Bakersfield","CountryCode":"USA","1":"USA","Population":"247057","2":"247057"},{"Name":"Stockton","0":"Stockton","CountryCode":"USA","1":"USA","Population":"243771","2":"243771"},{"Name":"Birmingham","0":"Birmingham","CountryCode":"USA","1":"USA","Population":"242820","2":"242820"},{"Name":"Jersey City","0":"Jersey City","CountryCode":"USA","1":"USA","Population":"240055","2":"240055"},{"Name":"Norfolk","0":"Norfolk","CountryCode":"USA","1":"USA","Population":"234403","2":"234403"},{"Name":"Baton Rouge","0":"Baton Rouge","CountryCode":"USA","1":"USA","Population":"227818","2":"227818"},{"Name":"Hialeah","0":"Hialeah","CountryCode":"USA","1":"USA","Population":"226419","2":"226419"},{"Name":"Lincoln","0":"Lincoln","CountryCode":"USA","1":"USA","Population":"225581","2":"225581"},{"Name":"Greensboro","0":"Greensboro","CountryCode":"USA","1":"USA","Population":"223891","2":"223891"},{"Name":"Plano","0":"Plano","CountryCode":"USA","1":"USA","Population":"222030","2":"222030"},{"Name":"Rochester","0":"Rochester","CountryCode":"USA","1":"USA","Population":"219773","2":"219773"},{"Name":"Glendale","0":"Glendale","CountryCode":"USA","1":"USA","Population":"218812","2":"218812"},{"Name":"Akron","0":"Akron","CountryCode":"USA","1":"USA","Population":"217074","2":"217074"},{"Name":"Garland","0":"Garland","CountryCode":"USA","1":"USA","Population":"215768","2":"215768"},{"Name":"Madison","0":"Madison","CountryCode":"USA","1":"USA","Population":"208054","2":"208054"},{"Name":"Fort Wayne","0":"Fort Wayne","CountryCode":"USA","1":"USA","Population":"205727","2":"205727"},{"Name":"Fremont","0":"Fremont","CountryCode":"USA","1":"USA","Population":"203413","2":"203413"},{"Name":"Scottsdale","0":"Scottsdale","CountryCode":"USA","1":"USA","Population":"202705","2":"202705"},{"Name":"Montgomery","0":"Montgomery","CountryCode":"USA","1":"USA","Population":"201568","2":"201568"},{"Name":"Shreveport","0":"Shreveport","CountryCode":"USA","1":"USA","Population":"200145","2":"200145"},{"Name":"Augusta-Richmond County","0":"Augusta-Richmond County","CountryCode":"USA","1":"USA","Population":"199775","2":"199775"},{"Name":"Lubbock","0":"Lubbock","CountryCode":"USA","1":"USA","Population":"199564","2":"199564"},{"Name":"Chesapeake","0":"Chesapeake","CountryCode":"USA","1":"USA","Population":"199184","2":"199184"},{"Name":"Mobile","0":"Mobile","CountryCode":"USA","1":"USA","Population":"198915","2":"198915"},{"Name":"Des Moines","0":"Des Moines","CountryCode":"USA","1":"USA","Population":"198682","2":"198682"},{"Name":"Grand Rapids","0":"Grand Rapids","CountryCode":"USA","1":"USA","Population":"197800","2":"197800"},{"Name":"Richmond","0":"Richmond","CountryCode":"USA","1":"USA","Population":"197790","2":"197790"},{"Name":"Yonkers","0":"Yonkers","CountryCode":"USA","1":"USA","Population":"196086","2":"196086"},{"Name":"Spokane","0":"Spokane","CountryCode":"USA","1":"USA","Population":"195629","2":"195629"},{"Name":"Glendale","0":"Glendale","CountryCode":"USA","1":"USA","Population":"194973","2":"194973"},{"Name":"Tacoma","0":"Tacoma","CountryCode":"USA","1":"USA","Population":"193556","2":"193556"},{"Name":"Irving","0":"Irving","CountryCode":"USA","1":"USA","Population":"191615","2":"191615"},{"Name":"Huntington Beach","0":"Huntington Beach","CountryCode":"USA","1":"USA","Population":"189594","2":"189594"},{"Name":"Modesto","0":"Modesto","CountryCode":"USA","1":"USA","Population":"188856","2":"188856"},{"Name":"Durham","0":"Durham","CountryCode":"USA","1":"USA","Population":"187035","2":"187035"},{"Name":"Columbus","0":"Columbus","CountryCode":"USA","1":"USA","Population":"186291","2":"186291"},{"Name":"Orlando","0":"Orlando","CountryCode":"USA","1":"USA","Population":"185951","2":"185951"},{"Name":"Boise City","0":"Boise City","CountryCode":"USA","1":"USA","Population":"185787","2":"185787"},{"Name":"Winston-Salem","0":"Winston-Salem","CountryCode":"USA","1":"USA","Population":"185776","2":"185776"},{"Name":"San Bernardino","0":"San Bernardino","CountryCode":"USA","1":"USA","Population":"185401","2":"185401"},{"Name":"Jackson","0":"Jackson","CountryCode":"USA","1":"USA","Population":"184256","2":"184256"},{"Name":"Little Rock","0":"Little Rock","CountryCode":"USA","1":"USA","Population":"183133","2":"183133"},{"Name":"Salt Lake City","0":"Salt Lake City","CountryCode":"USA","1":"USA","Population":"181743","2":"181743"},{"Name":"Reno","0":"Reno","CountryCode":"USA","1":"USA","Population":"180480","2":"180480"},{"Name":"Newport News","0":"Newport News","CountryCode":"USA","1":"USA","Population":"180150","2":"180150"},{"Name":"Chandler","0":"Chandler","CountryCode":"USA","1":"USA","Population":"176581","2":"176581"},{"Name":"Laredo","0":"Laredo","CountryCode":"USA","1":"USA","Population":"176576","2":"176576"},{"Name":"Henderson","0":"Henderson","CountryCode":"USA","1":"USA","Population":"175381","2":"175381"},{"Name":"Arlington","0":"Arlington","CountryCode":"USA","1":"USA","Population":"174838","2":"174838"},{"Name":"Knoxville","0":"Knoxville","CountryCode":"USA","1":"USA","Population":"173890","2":"173890"},{"Name":"Amarillo","0":"Amarillo","CountryCode":"USA","1":"USA","Population":"173627","2":"173627"},{"Name":"Providence","0":"Providence","CountryCode":"USA","1":"USA","Population":"173618","2":"173618"},{"Name":"Chula Vista","0":"Chula Vista","CountryCode":"USA","1":"USA","Population":"173556","2":"173556"},{"Name":"Worcester","0":"Worcester","CountryCode":"USA","1":"USA","Population":"172648","2":"172648"},{"Name":"Oxnard","0":"Oxnard","CountryCode":"USA","1":"USA","Population":"170358","2":"170358"},{"Name":"Dayton","0":"Dayton","CountryCode":"USA","1":"USA","Population":"166179","2":"166179"},{"Name":"Garden Grove","0":"Garden Grove","CountryCode":"USA","1":"USA","Population":"165196","2":"165196"},{"Name":"Oceanside","0":"Oceanside","CountryCode":"USA","1":"USA","Population":"161029","2":"161029"},{"Name":"Tempe","0":"Tempe","CountryCode":"USA","1":"USA","Population":"158625","2":"158625"},{"Name":"Huntsville","0":"Huntsville","CountryCode":"USA","1":"USA","Population":"158216","2":"158216"},{"Name":"Ontario","0":"Ontario","CountryCode":"USA","1":"USA","Population":"158007","2":"158007"},{"Name":"Chattanooga","0":"Chattanooga","CountryCode":"USA","1":"USA","Population":"155554","2":"155554"},{"Name":"Fort Lauderdale","0":"Fort Lauderdale","CountryCode":"USA","1":"USA","Population":"152397","2":"152397"},{"Name":"Springfield","0":"Springfield","CountryCode":"USA","1":"USA","Population":"152082","2":"152082"},{"Name":"Springfield","0":"Springfield","CountryCode":"USA","1":"USA","Population":"151580","2":"151580"},{"Name":"Santa Clarita","0":"Santa Clarita","CountryCode":"USA","1":"USA","Population":"151088","2":"151088"},{"Name":"Salinas","0":"Salinas","CountryCode":"USA","1":"USA","Population":"151060","2":"151060"},{"Name":"Tallahassee","0":"Tallahassee","CountryCode":"USA","1":"USA","Population":"150624","2":"150624"},{"Name":"Rockford","0":"Rockford","CountryCode":"USA","1":"USA","Population":"150115","2":"150115"},{"Name":"Pomona","0":"Pomona","CountryCode":"USA","1":"USA","Population":"149473","2":"149473"},{"Name":"Metairie","0":"Metairie","CountryCode":"USA","1":"USA","Population":"149428","2":"149428"},{"Name":"Paterson","0":"Paterson","CountryCode":"USA","1":"USA","Population":"149222","2":"149222"},{"Name":"Overland Park","0":"Overland Park","CountryCode":"USA","1":"USA","Population":"149080","2":"149080"},{"Name":"Santa Rosa","0":"Santa Rosa","CountryCode":"USA","1":"USA","Population":"147595","2":"147595"},{"Name":"Syracuse","0":"Syracuse","CountryCode":"USA","1":"USA","Population":"147306","2":"147306"},{"Name":"Kansas City","0":"Kansas City","CountryCode":"USA","1":"USA","Population":"146866","2":"146866"},{"Name":"Hampton","0":"Hampton","CountryCode":"USA","1":"USA","Population":"146437","2":"146437"},{"Name":"Lakewood","0":"Lakewood","CountryCode":"USA","1":"USA","Population":"144126","2":"144126"},{"Name":"Vancouver","0":"Vancouver","CountryCode":"USA","1":"USA","Population":"143560","2":"143560"},{"Name":"Irvine","0":"Irvine","CountryCode":"USA","1":"USA","Population":"143072","2":"143072"},{"Name":"Aurora","0":"Aurora","CountryCode":"USA","1":"USA","Population":"142990","2":"142990"},{"Name":"Moreno Valley","0":"Moreno Valley","CountryCode":"USA","1":"USA","Population":"142381","2":"142381"},{"Name":"Pasadena","0":"Pasadena","CountryCode":"USA","1":"USA","Population":"141674","2":"141674"},{"Name":"Hayward","0":"Hayward","CountryCode":"USA","1":"USA","Population":"140030","2":"140030"},{"Name":"Brownsville","0":"Brownsville","CountryCode":"USA","1":"USA","Population":"139722","2":"139722"},{"Name":"Bridgeport","0":"Bridgeport","CountryCode":"USA","1":"USA","Population":"139529","2":"139529"},{"Name":"Hollywood","0":"Hollywood","CountryCode":"USA","1":"USA","Population":"139357","2":"139357"},{"Name":"Warren","0":"Warren","CountryCode":"USA","1":"USA","Population":"138247","2":"138247"},{"Name":"Torrance","0":"Torrance","CountryCode":"USA","1":"USA","Population":"137946","2":"137946"},{"Name":"Eugene","0":"Eugene","CountryCode":"USA","1":"USA","Population":"137893","2":"137893"},{"Name":"Pembroke Pines","0":"Pembroke Pines","CountryCode":"USA","1":"USA","Population":"137427","2":"137427"},{"Name":"Salem","0":"Salem","CountryCode":"USA","1":"USA","Population":"136924","2":"136924"},{"Name":"Pasadena","0":"Pasadena","CountryCode":"USA","1":"USA","Population":"133936","2":"133936"},{"Name":"Escondido","0":"Escondido","CountryCode":"USA","1":"USA","Population":"133559","2":"133559"},{"Name":"Sunnyvale","0":"Sunnyvale","CountryCode":"USA","1":"USA","Population":"131760","2":"131760"},{"Name":"Savannah","0":"Savannah","CountryCode":"USA","1":"USA","Population":"131510","2":"131510"},{"Name":"Fontana","0":"Fontana","CountryCode":"USA","1":"USA","Population":"128929","2":"128929"},{"Name":"Orange","0":"Orange","CountryCode":"USA","1":"USA","Population":"128821","2":"128821"},{"Name":"Naperville","0":"Naperville","CountryCode":"USA","1":"USA","Population":"128358","2":"128358"},{"Name":"Alexandria","0":"Alexandria","CountryCode":"USA","1":"USA","Population":"128283","2":"128283"},{"Name":"Rancho Cucamonga","0":"Rancho Cucamonga","CountryCode":"USA","1":"USA","Population":"127743","2":"127743"},{"Name":"Grand Prairie","0":"Grand Prairie","CountryCode":"USA","1":"USA","Population":"127427","2":"127427"},{"Name":"East Los Angeles","0":"East Los Angeles","CountryCode":"USA","1":"USA","Population":"126379","2":"126379"},{"Name":"Fullerton","0":"Fullerton","CountryCode":"USA","1":"USA","Population":"126003","2":"126003"},{"Name":"Corona","0":"Corona","CountryCode":"USA","1":"USA","Population":"124966","2":"124966"},{"Name":"Flint","0":"Flint","CountryCode":"USA","1":"USA","Population":"124943","2":"124943"},{"Name":"Paradise","0":"Paradise","CountryCode":"USA","1":"USA","Population":"124682","2":"124682"},{"Name":"Mesquite","0":"Mesquite","CountryCode":"USA","1":"USA","Population":"124523","2":"124523"},{"Name":"Sterling Heights","0":"Sterling Heights","CountryCode":"USA","1":"USA","Population":"124471","2":"124471"},{"Name":"Sioux Falls","0":"Sioux Falls","CountryCode":"USA","1":"USA","Population":"123975","2":"123975"},{"Name":"New Haven","0":"New Haven","CountryCode":"USA","1":"USA","Population":"123626","2":"123626"},{"Name":"Topeka","0":"Topeka","CountryCode":"USA","1":"USA","Population":"122377","2":"122377"},{"Name":"Concord","0":"Concord","CountryCode":"USA","1":"USA","Population":"121780","2":"121780"},{"Name":"Evansville","0":"Evansville","CountryCode":"USA","1":"USA","Population":"121582","2":"121582"},{"Name":"Hartford","0":"Hartford","CountryCode":"USA","1":"USA","Population":"121578","2":"121578"},{"Name":"Fayetteville","0":"Fayetteville","CountryCode":"USA","1":"USA","Population":"121015","2":"121015"},{"Name":"Cedar Rapids","0":"Cedar Rapids","CountryCode":"USA","1":"USA","Population":"120758","2":"120758"},{"Name":"Elizabeth","0":"Elizabeth","CountryCode":"USA","1":"USA","Population":"120568","2":"120568"},{"Name":"Lansing","0":"Lansing","CountryCode":"USA","1":"USA","Population":"119128","2":"119128"},{"Name":"Lancaster","0":"Lancaster","CountryCode":"USA","1":"USA","Population":"118718","2":"118718"},{"Name":"Fort Collins","0":"Fort Collins","CountryCode":"USA","1":"USA","Population":"118652","2":"118652"},{"Name":"Coral Springs","0":"Coral Springs","CountryCode":"USA","1":"USA","Population":"117549","2":"117549"},{"Name":"Stamford","0":"Stamford","CountryCode":"USA","1":"USA","Population":"117083","2":"117083"},{"Name":"Thousand Oaks","0":"Thousand Oaks","CountryCode":"USA","1":"USA","Population":"117005","2":"117005"},{"Name":"Vallejo","0":"Vallejo","CountryCode":"USA","1":"USA","Population":"116760","2":"116760"},{"Name":"Palmdale","0":"Palmdale","CountryCode":"USA","1":"USA","Population":"116670","2":"116670"},{"Name":"Columbia","0":"Columbia","CountryCode":"USA","1":"USA","Population":"116278","2":"116278"},{"Name":"El Monte","0":"El Monte","CountryCode":"USA","1":"USA","Population":"115965","2":"115965"},{"Name":"Abilene","0":"Abilene","CountryCode":"USA","1":"USA","Population":"115930","2":"115930"},{"Name":"North Las Vegas","0":"North Las Vegas","CountryCode":"USA","1":"USA","Population":"115488","2":"115488"},{"Name":"Ann Arbor","0":"Ann Arbor","CountryCode":"USA","1":"USA","Population":"114024","2":"114024"},{"Name":"Beaumont","0":"Beaumont","CountryCode":"USA","1":"USA","Population":"113866","2":"113866"},{"Name":"Waco","0":"Waco","CountryCode":"USA","1":"USA","Population":"113726","2":"113726"},{"Name":"Macon","0":"Macon","CountryCode":"USA","1":"USA","Population":"113336","2":"113336"},{"Name":"Independence","0":"Independence","CountryCode":"USA","1":"USA","Population":"113288","2":"113288"},{"Name":"Peoria","0":"Peoria","CountryCode":"USA","1":"USA","Population":"112936","2":"112936"},{"Name":"Inglewood","0":"Inglewood","CountryCode":"USA","1":"USA","Population":"112580","2":"112580"},{"Name":"Springfield","0":"Springfield","CountryCode":"USA","1":"USA","Population":"111454","2":"111454"},{"Name":"Simi Valley","0":"Simi Valley","CountryCode":"USA","1":"USA","Population":"111351","2":"111351"},{"Name":"Lafayette","0":"Lafayette","CountryCode":"USA","1":"USA","Population":"110257","2":"110257"},{"Name":"Gilbert","0":"Gilbert","CountryCode":"USA","1":"USA","Population":"109697","2":"109697"},{"Name":"Carrollton","0":"Carrollton","CountryCode":"USA","1":"USA","Population":"109576","2":"109576"},{"Name":"Bellevue","0":"Bellevue","CountryCode":"USA","1":"USA","Population":"109569","2":"109569"},{"Name":"West Valley City","0":"West Valley City","CountryCode":"USA","1":"USA","Population":"108896","2":"108896"},{"Name":"Clarksville","0":"Clarksville","CountryCode":"USA","1":"USA","Population":"108787","2":"108787"},{"Name":"Costa Mesa","0":"Costa Mesa","CountryCode":"USA","1":"USA","Population":"108724","2":"108724"},{"Name":"Peoria","0":"Peoria","CountryCode":"USA","1":"USA","Population":"108364","2":"108364"},{"Name":"South Bend","0":"South Bend","CountryCode":"USA","1":"USA","Population":"107789","2":"107789"},{"Name":"Downey","0":"Downey","CountryCode":"USA","1":"USA","Population":"107323","2":"107323"},{"Name":"Waterbury","0":"Waterbury","CountryCode":"USA","1":"USA","Population":"107271","2":"107271"},{"Name":"Manchester","0":"Manchester","CountryCode":"USA","1":"USA","Population":"107006","2":"107006"},{"Name":"Allentown","0":"Allentown","CountryCode":"USA","1":"USA","Population":"106632","2":"106632"},{"Name":"McAllen","0":"McAllen","CountryCode":"USA","1":"USA","Population":"106414","2":"106414"},{"Name":"Joliet","0":"Joliet","CountryCode":"USA","1":"USA","Population":"106221","2":"106221"},{"Name":"Lowell","0":"Lowell","CountryCode":"USA","1":"USA","Population":"105167","2":"105167"},{"Name":"Provo","0":"Provo","CountryCode":"USA","1":"USA","Population":"105166","2":"105166"},{"Name":"West Covina","0":"West Covina","CountryCode":"USA","1":"USA","Population":"105080","2":"105080"},{"Name":"Wichita Falls","0":"Wichita Falls","CountryCode":"USA","1":"USA","Population":"104197","2":"104197"},{"Name":"Erie","0":"Erie","CountryCode":"USA","1":"USA","Population":"103717","2":"103717"},{"Name":"Daly City","0":"Daly City","CountryCode":"USA","1":"USA","Population":"103621","2":"103621"},{"Name":"Citrus Heights","0":"Citrus Heights","CountryCode":"USA","1":"USA","Population":"103455","2":"103455"},{"Name":"Norwalk","0":"Norwalk","CountryCode":"USA","1":"USA","Population":"103298","2":"103298"},{"Name":"Gary","0":"Gary","CountryCode":"USA","1":"USA","Population":"102746","2":"102746"},{"Name":"Berkeley","0":"Berkeley","CountryCode":"USA","1":"USA","Population":"102743","2":"102743"},{"Name":"Santa Clara","0":"Santa Clara","CountryCode":"USA","1":"USA","Population":"102361","2":"102361"},{"Name":"Green Bay","0":"Green Bay","CountryCode":"USA","1":"USA","Population":"102313","2":"102313"},{"Name":"Cape Coral","0":"Cape Coral","CountryCode":"USA","1":"USA","Population":"102286","2":"102286"},{"Name":"Arvada","0":"Arvada","CountryCode":"USA","1":"USA","Population":"102153","2":"102153"},{"Name":"Pueblo","0":"Pueblo","CountryCode":"USA","1":"USA","Population":"102121","2":"102121"},{"Name":"Sandy","0":"Sandy","CountryCode":"USA","1":"USA","Population":"101853","2":"101853"},{"Name":"Athens-Clarke County","0":"Athens-Clarke County","CountryCode":"USA","1":"USA","Population":"101489","2":"101489"},{"Name":"Cambridge","0":"Cambridge","CountryCode":"USA","1":"USA","Population":"101355","2":"101355"},{"Name":"Westminster","0":"Westminster","CountryCode":"USA","1":"USA","Population":"100940","2":"100940"},{"Name":"San Buenaventura","0":"San Buenaventura","CountryCode":"USA","1":"USA","Population":"100916","2":"100916"},{"Name":"Portsmouth","0":"Portsmouth","CountryCode":"USA","1":"USA","Population":"100565","2":"100565"},{"Name":"Livonia","0":"Livonia","CountryCode":"USA","1":"USA","Population":"100545","2":"100545"},{"Name":"Burbank","0":"Burbank","CountryCode":"USA","1":"USA","Population":"100316","2":"100316"},{"Name":"Clearwater","0":"Clearwater","CountryCode":"USA","1":"USA","Population":"99936","2":"99936"},{"Name":"Midland","0":"Midland","CountryCode":"USA","1":"USA","Population":"98293","2":"98293"},{"Name":"Davenport","0":"Davenport","CountryCode":"USA","1":"USA","Population":"98256","2":"98256"},{"Name":"Mission Viejo","0":"Mission Viejo","CountryCode":"USA","1":"USA","Population":"98049","2":"98049"},{"Name":"Miami Beach","0":"Miami Beach","CountryCode":"USA","1":"USA","Population":"97855","2":"97855"},{"Name":"Sunrise Manor","0":"Sunrise Manor","CountryCode":"USA","1":"USA","Population":"95362","2":"95362"},{"Name":"New Bedford","0":"New Bedford","CountryCode":"USA","1":"USA","Population":"94780","2":"94780"},{"Name":"El Cajon","0":"El Cajon","CountryCode":"USA","1":"USA","Population":"94578","2":"94578"},{"Name":"Norman","0":"Norman","CountryCode":"USA","1":"USA","Population":"94193","2":"94193"},{"Name":"Richmond","0":"Richmond","CountryCode":"USA","1":"USA","Population":"94100","2":"94100"},{"Name":"Albany","0":"Albany","CountryCode":"USA","1":"USA","Population":"93994","2":"93994"},{"Name":"Brockton","0":"Brockton","CountryCode":"USA","1":"USA","Population":"93653","2":"93653"},{"Name":"Roanoke","0":"Roanoke","CountryCode":"USA","1":"USA","Population":"93357","2":"93357"},{"Name":"Billings","0":"Billings","CountryCode":"USA","1":"USA","Population":"92988","2":"92988"},{"Name":"Compton","0":"Compton","CountryCode":"USA","1":"USA","Population":"92864","2":"92864"},{"Name":"Gainesville","0":"Gainesville","CountryCode":"USA","1":"USA","Population":"92291","2":"92291"},{"Name":"Fairfield","0":"Fairfield","CountryCode":"USA","1":"USA","Population":"92256","2":"92256"},{"Name":"Arden-Arcade","0":"Arden-Arcade","CountryCode":"USA","1":"USA","Population":"92040","2":"92040"},{"Name":"San Mateo","0":"San Mateo","CountryCode":"USA","1":"USA","Population":"91799","2":"91799"},{"Name":"Visalia","0":"Visalia","CountryCode":"USA","1":"USA","Population":"91762","2":"91762"},{"Name":"Boulder","0":"Boulder","CountryCode":"USA","1":"USA","Population":"91238","2":"91238"},{"Name":"Cary","0":"Cary","CountryCode":"USA","1":"USA","Population":"91213","2":"91213"},{"Name":"Santa Monica","0":"Santa Monica","CountryCode":"USA","1":"USA","Population":"91084","2":"91084"},{"Name":"Fall River","0":"Fall River","CountryCode":"USA","1":"USA","Population":"90555","2":"90555"},{"Name":"Kenosha","0":"Kenosha","CountryCode":"USA","1":"USA","Population":"89447","2":"89447"},{"Name":"Elgin","0":"Elgin","CountryCode":"USA","1":"USA","Population":"89408","2":"89408"},{"Name":"Odessa","0":"Odessa","CountryCode":"USA","1":"USA","Population":"89293","2":"89293"},{"Name":"Carson","0":"Carson","CountryCode":"USA","1":"USA","Population":"89089","2":"89089"},{"Name":"Charleston","0":"Charleston","CountryCode":"USA","1":"USA","Population":"89063","2":"89063"},{"Name":"Charlotte Amalie","0":"Charlotte Amalie","CountryCode":"VIR","1":"VIR","Population":"13000","2":"13000"},{"Name":"Harare","0":"Harare","CountryCode":"ZWE","1":"ZWE","Population":"1410000","2":"1410000"},{"Name":"Bulawayo","0":"Bulawayo","CountryCode":"ZWE","1":"ZWE","Population":"621742","2":"621742"},{"Name":"Chitungwiza","0":"Chitungwiza","CountryCode":"ZWE","1":"ZWE","Population":"274912","2":"274912"},{"Name":"Mount Darwin","0":"Mount Darwin","CountryCode":"ZWE","1":"ZWE","Population":"164362","2":"164362"},{"Name":"Mutare","0":"Mutare","CountryCode":"ZWE","1":"ZWE","Population":"131367","2":"131367"},{"Name":"Gweru","0":"Gweru","CountryCode":"ZWE","1":"ZWE","Population":"128037","2":"128037"},{"Name":"Gaza","0":"Gaza","CountryCode":"PSE","1":"PSE","Population":"353632","2":"353632"},{"Name":"Khan Yunis","0":"Khan Yunis","CountryCode":"PSE","1":"PSE","Population":"123175","2":"123175"},{"Name":"Hebron","0":"Hebron","CountryCode":"PSE","1":"PSE","Population":"119401","2":"119401"},{"Name":"Jabaliya","0":"Jabaliya","CountryCode":"PSE","1":"PSE","Population":"113901","2":"113901"},{"Name":"Nablus","0":"Nablus","CountryCode":"PSE","1":"PSE","Population":"100231","2":"100231"},{"Name":"Rafah","0":"Rafah","CountryCode":"PSE","1":"PSE","Population":"92020","2":"92020"}] \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js index dd8466d..523599e 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -14,10 +14,6 @@ export default { test: /\.html$/i, loader: "html-loader", }, - { - test: /\.js$/i, - loader: "esbuild-loader", - }, ], }, plugins: [ From 711decdb955613a8fa42e9d82f5282f5a3cdcd42 Mon Sep 17 00:00:00 2001 From: Steve Date: Fri, 15 Mar 2024 11:19:29 +0100 Subject: [PATCH 36/48] chore: split tasks between dist and demo --- .gitignore | 4 +-- demo/index.html | 4 +-- dist/css/kompletr.min.css | 1 + dist/js/kompletr.min.js | 2 ++ {demo => dist}/js/kompletr.min.js.map | 0 package.json | 16 ++++++---- src/index.html | 6 ++-- webpack.config.js | 8 ++--- webpack.config.prod.js | 45 +++++++++++++++++---------- 9 files changed, 51 insertions(+), 35 deletions(-) create mode 100644 dist/css/kompletr.min.css create mode 100644 dist/js/kompletr.min.js rename {demo => dist}/js/kompletr.min.js.map (100%) diff --git a/.gitignore b/.gitignore index 17e2954..e306f56 100644 --- a/.gitignore +++ b/.gitignore @@ -14,10 +14,10 @@ tests/report # Retrieved by bower src/vendors/* -# Do not push dist, build and local api -dist/ +# Do not push build and local api build/ api/ +# Do not push vitepress docs docs/.vitepress/dist docs/.vitepress/cache \ No newline at end of file diff --git a/demo/index.html b/demo/index.html index e956de9..421523b 100644 --- a/demo/index.html +++ b/demo/index.html @@ -12,14 +12,12 @@ - + - - diff --git a/dist/css/kompletr.min.css b/dist/css/kompletr.min.css new file mode 100644 index 0000000..9c3d80b --- /dev/null +++ b/dist/css/kompletr.min.css @@ -0,0 +1 @@ +@import url("https://fonts.googleapis.com/css?family=Open+Sans");@import url("https://fonts.googleapis.com/css?family=Thasadith");.kompletr.form--search{width:30%;position:relative;margin:0 auto}@media (max-width: 480px){.kompletr.form--search{width:90%}}.kompletr .input--search,.kompletr .item--result{font-family:"Open Sans",sans-serif;font-size:100%}.kompletr .input--search{display:block;box-sizing:border-box;margin:0 auto;padding:15px 10px;width:100%;min-width:240px;max-width:600px;height:auto;font-size:1.2rem;line-height:1.5;border:none}.kompletr .input--search:focus{border:none;outline:none}.kompletr .form--search__result{position:absolute;margin:0;width:100%}.kompletr .item--result{box-sizing:border-box;width:100%;padding:15px;display:flex;flex-wrap:wrap;justify-content:space-between;border-left:none;border-right:none}.kompletr .item--result:last-child{border-bottom:none}.kompletr .item--result:hover,.kompletr .item--result.focus{cursor:pointer;-webkit-transition:all 0.2s ease-in-out ease-in-out;transition:all 0.2s ease-in-out ease-in-out}.kompletr .item--result .item--data{flex:50%}.kompletr .item--result .item--data:nth-child(even){text-align:right}.kompletr .item--result .item--data:nth-child(0){font-weight:600}.kompletr .item--result .item--data:nth-child(n+2){font-weight:normal}.kompletr.light .input--search{color:#9e9e9e;background:#fff}.kompletr.light ::placeholder{color:silver}.kompletr.light .item--result{color:#333;border-bottom:1px dashed #dfdfdf;backdrop-filter:blur(16px) saturate(180%);-webkit-backdrop-filter:blur(16px) saturate(180%);background-color:rgba(255,255,255,0.75)}.kompletr.light .item--result:hover,.kompletr.light .item--result.focus{backdrop-filter:blur(26px) saturate(120%);-webkit-backdrop-filter:blur(26px) saturate(120%);background-color:rgba(255,255,255,0.5)}.kompletr.light .item--result:hover .item--data:nth-child(n+2),.kompletr.light .item--result.focus .item--data:nth-child(n+2){color:#333}.kompletr.light .item--result .item--data:nth-child(0){color:#333}.kompletr.light .item--result .item--data:nth-child(n+2){color:#9e9e9e}.kompletr.dark .input--search{color:#fff;background:#333}.kompletr.dark ::placeholder{color:silver}.kompletr.dark .item--result{color:#fff;border-bottom:1px dashed #9e9e9e;backdrop-filter:blur(16px) saturate(180%);-webkit-backdrop-filter:blur(16px) saturate(180%);background-color:rgba(51,51,51,0.75)}.kompletr.dark .item--result:hover,.kompletr.dark .item--result.focus{backdrop-filter:blur(26px) saturate(120%);-webkit-backdrop-filter:blur(26px) saturate(120%);background-color:rgba(51,51,51,0.5)}.kompletr.dark .item--result:hover .item--data:nth-child(n+2),.kompletr.dark .item--result.focus .item--data:nth-child(n+2){color:#fff}.kompletr.dark .item--result .item--data:nth-child(0){color:#fff}.kompletr.dark .item--result .item--data:nth-child(n+2){color:#9e9e9e} diff --git a/dist/js/kompletr.min.js b/dist/js/kompletr.min.js new file mode 100644 index 0000000..f94b7ce --- /dev/null +++ b/dist/js/kompletr.min.js @@ -0,0 +1,2 @@ +var t={d:function(e,s){for(var r in s)t.o(s,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:s[r]})},o:function(t,e){return Object.prototype.hasOwnProperty.call(t,e)}},e={};t.d(e,{Z:function(){return y}});const s=Object.freeze({fadeIn:"fadeIn",slideDown:"slideDown"}),r=Object.freeze({error:"kompletr.error",domDone:"kompletr.dom.done",dataDone:"kompletr.data.done",selectDone:"kompletr.select.done"}),i=Object.freeze({cache:"cache",callback:"callback",local:"local"}),o=Object.freeze({prefix:"prefix",expression:"expression"}),a=Object.freeze({light:"light",dark:"dark"});class n{constructor(){}static fadeIn(t,e,s=500){t.style.opacity=0,t.style.display=e||"block",function e(){let s=parseFloat(t.style.opacity);(s+=.1)>1||(t.style.opacity=s,requestAnimationFrame(e))}()}static fadeOut(t,e=500){t.style.opacity=1,function e(){(t.style.opacity-=.1)<0?t.style.display="none":requestAnimationFrame(e)}()}static slideUp(t,e=500){t.style.transitionProperty="height, margin, padding",t.style.transitionDuration=e+"ms",t.style.boxSizing="border-box",t.style.height=t.offsetHeight+"px",t.offsetHeight,t.style.overflow="hidden",t.style.height=0,t.style.paddingTop=0,t.style.paddingBottom=0,t.style.marginTop=0,t.style.marginBottom=0,window.setTimeout((()=>{t.style.display="none",t.style.removeProperty("height"),t.style.removeProperty("padding-top"),t.style.removeProperty("padding-bottom"),t.style.removeProperty("margin-top"),t.style.removeProperty("margin-bottom"),t.style.removeProperty("overflow"),t.style.removeProperty("transition-duration"),t.style.removeProperty("transition-property")}),e)}static slideDown(t,e=500){t.style.removeProperty("display"),console.log(t);let s=window.getComputedStyle(t).display;"none"===s&&(s="block"),t.style.display=s;let r=t.offsetHeight;t.style.overflow="hidden",t.style.height=0,t.style.paddingTop=0,t.style.paddingBottom=0,t.style.marginTop=0,t.style.marginBottom=0,t.offsetHeight,t.style.boxSizing="border-box",t.style.transitionProperty="height, margin, padding",t.style.transitionDuration=e+"ms",t.style.height=r+"px",t.style.removeProperty("padding-top"),t.style.removeProperty("padding-bottom"),t.style.removeProperty("margin-top"),t.style.removeProperty("margin-bottom"),window.setTimeout((()=>{t.style.removeProperty("height"),t.style.removeProperty("overflow"),t.style.removeProperty("transition-duration"),t.style.removeProperty("transition-property")}),e)}static animateBack(t,e=s.fadeIn,r=500){return n[{fadeIn:"fadeOut",slideDown:"slideUp"}[e]](t,r)}}class l{broadcaster=null;cache=null;callbacks={};configuration=null;dom=null;props=null;constructor({configuration:t,properties:e,dom:s,cache:i,broadcaster:o,onKeyup:a,onSelect:n,onError:l}){try{this.configuration=t,this.broadcaster=o,this.props=e,this.dom=s,this.cache=i,this.broadcaster.subscribe(r.error,this.error),this.broadcaster.subscribe(r.dataDone,this.showResults),this.broadcaster.subscribe(r.domDone,this.bindResults),this.broadcaster.subscribe(r.selectDone,this.closeTheShop),this.broadcaster.listen(this.dom.input,"keyup",this.suggest),this.broadcaster.listen(this.dom.body,"click",this.closeTheShop),(a||n||l)&&(this.callbacks=Object.assign(this.callbacks,{onKeyup:a,onSelect:n,onError:l}))}catch(t){o.trigger(r.error,t)}}closeTheShop=t=>{if(t.srcElement===this.dom.input)return!0;n.animateBack(this.dom.result,this.configuration.animationType,this.configuration.animationDuration),this.resetPointer()};resetPointer=()=>{this.props.pointer=-1};error=t=>{console.error(`[kompletr] An error has occured -> ${t.stack}`),n.fadeIn(this.dom.result),this.callbacks.onError&&this.callbacks.onError(t)};showResults=async({from:t,data:e})=>{this.props.data=e,e=this.props.data.map(((t,e)=>({idx:e,data:t}))),this.callbacks.onKeyup||(e=e.filter((t=>{const e="string"==typeof t.data?t.data:t.data[this.configuration.propToMapAsValue];return"prefix"===this.configuration.filterOn?0===e.toLowerCase().lastIndexOf(this.dom.input.value.toLowerCase(),0):-1!==e.toLowerCase().lastIndexOf(this.dom.input.value.toLowerCase())}))),this.cache&&t!==i.cache&&this.cache.set({string:this.dom.input.value,data:e}),this.dom.buildResults(e.slice(0,this.configuration.maxResults),this.configuration.fieldsToDisplay)};bindResults=()=>{if(n[this.configuration.animationType](this.dom.result,this.configuration.animationDuration),this.dom.result?.children?.length)for(let t=0;t{this.broadcaster.listen(this.dom.result.children[t],"click",(()=>{this.dom.focused=this.dom.result.children[t],this.select(this.dom.focused.id)}))})(t)};suggest=t=>{if(this.dom.input.value.length{try{this.cache&&await this.cache.isValid(t)?this.cache.get(t,(t=>{this.broadcaster.trigger(r.dataDone,{from:i.cache,data:t})})):this.callbacks.onKeyup?this.callbacks.onKeyup(t,(t=>{this.broadcaster.trigger(r.dataDone,{from:i.callback,data:t})})):this.broadcaster.trigger(r.dataDone,{from:i.local,data:this.props.data})}catch(t){this.broadcaster.trigger(r.error,t)}};navigate=t=>(38==t||40==t)&&!(this.props.pointer<-1||this.props.pointer>this.dom.result.children.length-1)&&(38===t&&this.props.pointer>=-1?this.props.pointer--:40===t&&this.props.pointer{this.dom.input.value="object"==typeof this.props.data[t]?this.props.data[t][this.configuration.propToMapAsValue]:this.props.data[t],this.callbacks.onSelect(this.props.data[t]),this.broadcaster.trigger(r.selectDone)}}class h{_animationType=s.fadeIn;_animationDuration=500;_multiple=!1;_theme=a.light;_fieldsToDisplay=[];_maxResults=10;_startQueriyngFromChar=2;_propToMapAsValue="";_filterOn=o.prefix;_cache=0;get animationType(){return this._animationType}set animationType(t){const e=Object.keys(s);if(!e.includes(t))throw new Error(`animation.type should be one of ${e.toString()}`);this._animationType=t}get animationDuration(){return this._animationDuration}set animationDuration(t){if(isNaN(parseInt(t,10)))throw new Error("animation.duration should be an integer");this._animationDuration=t}get multiple(){return this._multiple}set multiple(t){this._multiple=t}get theme(){return this._theme}set theme(t){const e=Object.keys(a);if(!e.includes(t))throw new Error(`theme should be one of ${e.toString()}, ${t} given`);this._theme=t}get fieldsToDisplay(){return this._fieldsToDisplay}set fieldsToDisplay(t){this._fieldsToDisplay=t}get maxResults(){return this._maxResults}set maxResults(t){this._maxResults=t}get startQueriyngFromChar(){return this._startQueriyngFromChar}set startQueriyngFromChar(t){this._startQueriyngFromChar=t}get propToMapAsValue(){return this._propToMapAsValue}set propToMapAsValue(t){this._propToMapAsValue=t}get filterOn(){return this._filterOn}set filterOn(t){const e=Object.keys(o);if(!e.includes(t))throw new Error(`filterOn should be one of ${e.toString()}, ${t} given`);this._filterOn=t}get cache(){return this._cache}set cache(t){if(isNaN(parseInt(t,10)))throw new Error("cache should be an integer");this._cache=t}constructor(t){if(void 0!==t){if("object"!=typeof t)throw new Error("options should be an object");this._theme=t?.theme||this._theme,this._animationType=t?.animationType||this._animationType,this._animationDuration=t?.animationDuration||this._animationDuration,this._multiple=t?.multiple||this._multiple,this._fieldsToDisplay=t?.fieldsToDisplay||this._fieldsToDisplay,this._maxResults=t?.maxResults||this._maxResults,this._startQueriyngFromChar=t?.startQueriyngFromChar||this._startQueriyngFromChar,this._propToMapAsValue=t?.propToMapAsValue||this._propToMapAsValue,this._filterOn=t?.filterOn||this._filterOn,this._cache=t?.cache||this._cache}}}class c{_name=null;_duration=null;_braodcaster=null;constructor(t,e=0,s="kompletr.cache"){if(!window.caches)return!1;this._broadcaster=t,this._name=s,this._duration=e}get(t,e){window.caches.open(this._name).then((s=>{s.match(t).then((async t=>{e(await t.json())}))})).catch((t=>{this._broadcaster.trigger(r.error,t)}))}set({string:t,data:e}){window.caches.open(this._name).then((s=>{const r=new Headers;r.set("Content-Type","application/json"),r.set("Cache-Control",`max-age=${this._duration}`),s.put(`/${t}`,new Response(JSON.stringify(e),{headers:r}))})).catch((t=>{this._broadcaster.trigger(r.error,t)}))}async isValid(t){try{const e=await window.caches.open(this._name);return!!await e.match(`/${t}`)}catch(t){this._broadcaster.trigger(r.error,t)}}}class u{subscribers=[];constructor(){}subscribe(t,e){if(!Object.values(r).includes(t))throw new Error(`Event should be one of ${Object.keys(r)}: ${t} given.`);this.subscribers.push({type:t,handler:e})}listen(t,e,s){t.addEventListener(e,s)}trigger(t,e={}){if(!Object.values(r).includes(t))throw new Error(`Event should be one of ${Object.keys(r)}: ${t} given.`);this.subscribers.filter((e=>e.type===t)).forEach((t=>t.handler(e)))}}class p{_data=null;get data(){return this._data}set data(t){if(!Array.isArray(t))throw new Error(`data must be an array (${t.toString()} given)`);this._data=t}_pointer=null;get pointer(){return this._pointer}set pointer(t){if(isNaN(parseInt(t,10)))throw new Error(`pointer must be an integer (${t.toString()} given)`);this._pointer=t}_previousValue=null;get previousValue(){return this._previousValue}set previousValue(t){this._previousValue=t}constructor(t=[]){this._data=t}}class d{_body=null;get body(){return this._body}set body(t){this._body=t}_input=null;get input(){return this._input}set input(t){if(input instanceof HTMLInputElement==0)throw new Error(`input should be an HTMLInputElement instance: ${input} given.`);this._input=t}_focused=null;get focused(){return this._focused}set focused(t){this._focused=t}_result=null;get result(){return this._result}set result(t){this._result=t}_broadcaster=null;constructor(t,e,s={theme:"light"}){this._body=document.getElementsByTagName("body")[0],this._input=t instanceof HTMLInputElement?t:document.getElementById(t),this._input.setAttribute("class",`${this._input.getAttribute("class")} input--search`),this._result=this.build("div",[{id:"kpl-result"},{class:"form--search__result"}]),this._input.parentElement.setAttribute("class",`${this._input.parentElement.getAttribute("class")} kompletr ${s.theme}`),this._input.parentElement.appendChild(this._result),this._broadcaster=e}build(t,e=[]){const s=document.createElement(t);return e.forEach((t=>{s.setAttribute(Object.keys(t)[0],Object.values(t)[0])})),s}focus(t,e){if(!["add","remove"].includes(e))throw new Error('action should be one of ["add", "remove]: '+e+" given.");switch(e){case"add":this.focused=this.result.children[t],this.result.children[t].className+=" focus";break;case"remove":this.focused=null,Array.from(this.result.children).forEach((t=>{(t=>{t.className="item--result"})(t)}))}}buildResults(t,e){let s="";s=t&&t.length?t.reduce(((t,s)=>{switch(t+=`
`,typeof s.data){case"string":t+=`${s.data}`;break;case"object":let r=Array.isArray(e)&&e.length?e:Object.keys(s.data);for(let e=0;e${s.data[r[e]]}`}return t+"
"}),""):'
Not found
',this.result.innerHTML=s,this._broadcaster.trigger(r.domDone)}}const m=function({data:t,options:e,onKeyup:s,onSelect:r,onError:i}){const o=new u,a=new h(e),n=new p(t),m=new d(this,o,a),y=a.cache?new c(o,a.cache):null;new l({configuration:a,properties:n,dom:m,cache:y,broadcaster:o,onKeyup:s,onSelect:r,onError:i})};window.HTMLInputElement.prototype.kompletr=m;var y=m,g=e.Z;export{g as default}; +//# sourceMappingURL=kompletr.min.js.map \ No newline at end of file diff --git a/demo/js/kompletr.min.js.map b/dist/js/kompletr.min.js.map similarity index 100% rename from demo/js/kompletr.min.js.map rename to dist/js/kompletr.min.js.map diff --git a/package.json b/package.json index a55357f..f1e79c6 100755 --- a/package.json +++ b/package.json @@ -47,20 +47,24 @@ ], "license": "ISC", "scripts": { - "build": "mkdir -p dist && mkdir -p dist/files && cp -r src/index.html dist/ & cp -r test/fixtures/data.json dist/files/data.json & npm run build:css && npm run build:js && npm run build:demo", - "build:css": "node-sass ./src/sass/kompletr.scss ./dist/css/kompletr.min.css --output-style compressed", + "build": "mkdir -p build && cp src/index.html build/ & cp test/fixtures/data.json build/ & npm run build:css && npm run build:js", + "build:css": "node-sass ./src/sass/kompletr.demo.scss ./build/css/kompletr.demo.min.css --output-style compressed", "build:js": "webpack", - "build:demo": "node-sass ./src/sass/kompletr.demo.scss ./demo/css/kompletr.demo.min.css --output-style compressed", "ci:dev": "webpack serve", "ci:e2e": "cypress run --browser chrome ./cypress", "ci:cy": "cypress open", "ci:test": "node --experimental-vm-modules node_modules/jest/bin/jest.js ./test/**.spec.js -- --coverage", - "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js ./test/**.spec.js", + "demo": "npm run demo:css && npm run demo:js", + "demo:css": "node-sass ./src/sass/kompletr.demo.scss ./demo/css/kompletr.demo.min.css --output-style compressed", + "demo:js": "webpack --mode production --config ./webpack.config.prod.js", "dev": "webpack-dashboard -- webpack serve --hot --mode development --config ./webpack.config.js", - "prod": "webpack-dashboard -- webpack --mode production --config ./webpack.config.prod.js", + "dist": "mkdir -p dist & npm run dist:css && npm run dist:js", + "dist:css": "node-sass ./src/sass/kompletr.scss ./dist/css/kompletr.min.css --output-style compressed", + "dist:js": "webpack --mode production --config ./webpack.config.prod.js", "docs:dev": "vitepress dev docs", "docs:build": "vitepress build docs", - "docs:preview": "vitepress preview docs" + "docs:preview": "vitepress preview docs", + "prod": "webpack --mode production --config ./webpack.config.prod.js" }, "devDependencies": { "@babel/runtime": "^7.23.6", diff --git a/src/index.html b/src/index.html index 14e9add..7e214f7 100644 --- a/src/index.html +++ b/src/index.html @@ -12,7 +12,7 @@ - +