From 39ed4df70f1b8cc95ce4fb3a9abc6d7cf63ddc9c Mon Sep 17 00:00:00 2001 From: dididi Date: Wed, 14 Nov 2018 16:52:37 +0900 Subject: [PATCH] feat: init commit --- .gitignore | 83 + README.md | 45 + index.html | 24 + index.js | 124 ++ package-lock.json | 3119 ++++++++++++++++++++++++++++++++++ package.json | 42 + rollup.config.dev.js | 31 + rollup.config.prod.js | 26 + webflow-multilingual.js | 919 ++++++++++ webflow-multilingual.js.map | 1 + webflow-multilingual.mjs | 911 ++++++++++ webflow-multilingual.mjs.map | 1 + 12 files changed, 5326 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 index.html create mode 100644 index.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 rollup.config.dev.js create mode 100644 rollup.config.prod.js create mode 100644 webflow-multilingual.js create mode 100644 webflow-multilingual.js.map create mode 100644 webflow-multilingual.mjs create mode 100644 webflow-multilingual.mjs.map diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..820c907 --- /dev/null +++ b/.gitignore @@ -0,0 +1,83 @@ + +# Created by https://www.gitignore.io/api/node +# Edit at https://www.gitignore.io/?templates=node + +### Node ### +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# next.js build output +.next + +# nuxt.js build output +.nuxt + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless + +# FuseBox cache +.fusebox/ + +# End of https://www.gitignore.io/api/node diff --git a/README.md b/README.md new file mode 100644 index 0000000..d2523f6 --- /dev/null +++ b/README.md @@ -0,0 +1,45 @@ +# Webflow Multilingual +Fork from http://multilinguale.webflow.io + +Only support modern browsers + +## Install +``` + +``` + +## Usage +### Text node +``` +

[[ko]] 안녕 [[en]]hello

+``` + +### Class +``` +

안녕

+

hello

+``` + +### Attribute (not yet) +``` +

안녕

+

hello

+``` + +### Select language by URL query string parameters +``` +https://your-awesome-site.site?lang=ko +https://your-awesome-site.site?lang=en +``` + +### Select language by button +``` + + +``` + +### Switch language +``` + +``` + diff --git a/index.html b/index.html new file mode 100644 index 0000000..329a5e1 --- /dev/null +++ b/index.html @@ -0,0 +1,24 @@ + + + + + + +

class feature

+

한국어

+

English

+
+

text content feature

+

[[ko]]한국어 [[en]]English

+

[[ko]]한국어
한국어[[en]]English
English

+

[[ko]]한국어 + 한국어 + [[en]]English + English

+ + + + + + + diff --git a/index.js b/index.js new file mode 100644 index 0000000..5f8e8e8 --- /dev/null +++ b/index.js @@ -0,0 +1,124 @@ +// http://multilinguale.webflow.io +import ISO6391 from 'iso-639-1' + +const defaultLang = 'en' +const langRegExp = /\[\[([a-z]{2})\]\]([^\[]+)/g +const isStorageEnabled = ! (typeof localStorage == 'undefined') +let userLang = (navigator.userLanguage||navigator.browserLanguage||navigator.language||defaultLang).substr(0,2) +let documentLang = new Set() +let documentLangIter + +function getLangParam() { + const arr = /lang=([a-z]{2})/g.exec(location.search) + return arr ? arr[1] : null +} + +function getLangFromStorage() { + return isStorageEnabled ? localStorage.getItem('lang') : undefined +} + +function setLang(lang) { + userLang = lang + if(isStorageEnabled){ + localStorage.setItem('lang', userLang) + } + console.log('[wm] setLang:', lang, userLang) + applyLang() +} + +function applyLang() { + textDict.forEach((o) => { + o.el.textContent = o.dict[userLang] + }) + + ISO6391.getAllCodes().forEach(lang => { + lang === userLang + ? document.querySelectorAll(`.wm-${lang}`).forEach(el => el.style.display = el.dataset.wmDisplay) + : document.querySelectorAll(`.wm-${lang}`).forEach(el => el.style.display = 'none') + }) +} + +function textNodesUnder(el) { + let node + const nodes = [] + const walk = document.createTreeWalker(el, NodeFilter.SHOW_TEXT, null, false) + + while (node=walk.nextNode()) { + nodes.push(node) + } + + return nodes +} + +const textDict = [] + +// https://medium.com/@roxeteer/javascript-one-liner-to-get-elements-text-content-without-its-child-nodes-8e59269d1e71 +function parentElTextOnly(el) { + return Array.from(el.childNodes).reduce((acc, node) => { + return acc + (node.nodeType === 3 ? node.textContent : '') + }, '') +} + +window.addEventListener('DOMContentLoaded', () => { + userLang = getLangParam() || getLangFromStorage() || userLang + if(isStorageEnabled) { + localStorage.setItem('lang', userLang); + } + + ISO6391.getAllCodes().forEach(lang => { + document.querySelectorAll(`.wm-${lang}`).forEach(el => el.dataset.wmDisplay = el.style.display) + }) + + textNodesUnder(document).filter((node) => { + return langRegExp.test(parentElTextOnly(node.parentElement)) + }).forEach((node, i) => { + const dict = {} + let arr + while((arr = langRegExp.exec(parentElTextOnly(node.parentElement))) != null) { + dict[arr[1]] = arr[2] + documentLang.add(arr[1]) + } + textDict.push({ + el: node.parentElement, + dict + }) + }) + console.log('[wm] documentLang:', documentLang) + documentLangIter = documentLang[Symbol.iterator]() + applyLang() +}); + + +///////////////////////// + +window.addEventListener('DOMContentLoaded', () => { + document.querySelectorAll('[data-wm-sel]').forEach((el) => { + el.addEventListener('click', (evt) => { + evt.stopPropagation() + evt.preventDefault() + console.log('[wm] click:', el.dataset.wmSel) + setLang(el.dataset.wmSel) + }) + }) +}) + +/////////////////////////// + +window.addEventListener('DOMContentLoaded', () => { + document.querySelectorAll('[data-wm-switch]').forEach((el) => { + el.addEventListener('click', (evt) => { + evt.stopPropagation() + evt.preventDefault() + let nextLang = documentLangIter.next().value + if (nextLang === userLang) { + nextLang = documentLangIter.next().value + } + if (!nextLang) { + documentLangIter = documentLang[Symbol.iterator]() + nextLang = documentLangIter.next().value + } + setLang(nextLang) + console.log('[wm] switch:', nextLang) + }) + }) +}) diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..52e2453 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3119 @@ +{ + "name": "webflow-multilang", + "version": "0.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", + "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/highlight": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", + "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "@types/node": { + "version": "10.12.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.6.tgz", + "integrity": "sha512-+ZWB5Ec1iki99xQFzBlivlKxSZQ+fuUKBott8StBOnLN4dWbRHlgdg1XknpW6g0tweniN5DcOqA64CJyOUPSAw==", + "dev": true + }, + "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, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "dev": true, + "requires": { + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "binary-extensions": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", + "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "builtin-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-2.0.0.tgz", + "integrity": "sha512-3U5kUA5VPsRUA3nofm/BXX7GVHKfxz0hOBAPxXrIvHzlDRkQVqEn6yi8QJegxl4LzOHLdvb7XF5dVawa/VVYBg==", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, + "requires": { + "callsites": "^2.0.0" + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true, + "requires": { + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "fsevents": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" + } + }, + "ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "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, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.7.tgz", + "integrity": "sha512-PcLqxTKiDmNT6pSpy4N6KtuPwb53W+2tzNvwOZw0WH9N6O0vLIBq0x8aj8Oj75ere4YcGi48bDFCL+3fRJdlNA==", + "dev": true, + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.9.0", + "parse-json": "^4.0.0" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "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, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "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 + }, + "estree-walker": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", + "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "^2.1.0" + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "dev": true, + "requires": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fsevents": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", + "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "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" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.21", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": "^2.1.0" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "minipass": { + "version": "2.2.4", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.2.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.10.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.1.10", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "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" + } + }, + "rimraf": { + "version": "2.6.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.0.5" + } + }, + "safe-buffer": { + "version": "5.1.1", + "bundled": true, + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.5.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "yallist": { + "version": "3.0.2", + "bundled": true, + "dev": true + } + } + }, + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "^2.0.0" + } + }, + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "dev": true + }, + "husky": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/husky/-/husky-1.1.4.tgz", + "integrity": "sha512-cZjGpS7qsaBSo3fOMUuR7erQloX3l5XzL1v/RkIqU6zrQImDdU70z5Re9fGDp7+kbYlM2EtS4aYMlahBeiCUGw==", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.6", + "execa": "^1.0.0", + "find-up": "^3.0.0", + "get-stdin": "^6.0.0", + "is-ci": "^1.2.1", + "pkg-dir": "^3.0.0", + "please-upgrade-node": "^3.1.1", + "read-pkg": "^4.0.1", + "run-node": "^1.0.0", + "slash": "^2.0.0" + } + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "^1.0.0" + }, + "dependencies": { + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + } + } + }, + "is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "dev": true, + "requires": { + "ci-info": "^1.5.0" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "^2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "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, + "requires": { + "isobject": "^3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "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 + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "iso-639-1": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/iso-639-1/-/iso-639-1-2.0.3.tgz", + "integrity": "sha512-PZhOTDH05ZLJyCqxAH65EzGaLO801KCvoEahAFoiqlp2HmnGUm8sO19KwWPCiWd3odjmoYd9ytzk2WtVYgWyCg==" + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "jest-worker": { + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-23.2.0.tgz", + "integrity": "sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk=", + "dev": true, + "requires": { + "merge-stream": "^1.0.1" + } + }, + "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 + }, + "js-yaml": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", + "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "livereload": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/livereload/-/livereload-0.6.3.tgz", + "integrity": "sha512-5SVeqHbKQWB69himud5GNRS8w1RgnMrYBnuIeZMiQ5ZctsIvhFfhKJclihxUS3NkOV7354rnA9rRz1IQBsgaNQ==", + "dev": true, + "requires": { + "chokidar": "^1.7.0", + "opts": ">= 1.2.0", + "ws": "^1.1.1" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lru-cache": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "magic-string": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.1.tgz", + "integrity": "sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.1" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "math-random": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", + "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", + "dev": true + }, + "merge-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mri": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.1.tgz", + "integrity": "sha1-haom09ru7t+A3FmEr5XMXKXK2fE=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "nan": { + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz", + "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "opener": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", + "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==", + "dev": true + }, + "options": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", + "dev": true + }, + "opts": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/opts/-/opts-1.2.6.tgz", + "integrity": "sha1-0YXAQlz9652h0YKQi2W1wCOP67M=", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", + "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "dev": true + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "please-upgrade-node": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz", + "integrity": "sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ==", + "dev": true, + "requires": { + "semver-compare": "^1.0.0" + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "prettier": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.15.2.tgz", + "integrity": "sha512-YgPLFFA0CdKL4Eg2IHtUSjzj/BWgszDHiNQAe0VAIBse34148whfdzLagRL+QiKS+YfK5ftB6X4v/MBw8yCoug==", + "dev": true + }, + "pretty-quick": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-1.8.0.tgz", + "integrity": "sha512-qV25sQF/ivJpdZ5efwemQYkQJa7sp3HqT/Vf/7z5vGYMcq1VrT2lDpFKAxJPf6219N1YAdR8mGkIhPAZ1odTmQ==", + "dev": true, + "requires": { + "chalk": "^2.3.0", + "execa": "^0.8.0", + "find-up": "^2.1.0", + "ignore": "^3.3.7", + "mri": "^1.1.0" + }, + "dependencies": { + "execa": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", + "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + } + } + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "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, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "randomatic": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", + "dev": true, + "requires": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "read-pkg": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", + "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", + "dev": true, + "requires": { + "normalize-package-data": "^2.3.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "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" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + } + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "requires": { + "is-equal-shallow": "^0.1.3" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "resolve": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", + "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "dev": true, + "requires": { + "path-parse": "^1.0.5" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "rollup": { + "version": "0.67.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.67.1.tgz", + "integrity": "sha512-BfwL9pw5VyxrAWx/G1tP8epgG+NH4KcR78aoWacV7+dFp1Mj6ynH8QTIC/lDQ3KlwzDakqZmJQ4LQ7TmLg+pBA==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "@types/node": "*" + } + }, + "rollup-plugin-commonjs": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.2.0.tgz", + "integrity": "sha512-0RM5U4Vd6iHjL6rLvr3lKBwnPsaVml+qxOGaaNUWN1lSq6S33KhITOfHmvxV3z2vy9Mk4t0g4rNlVaJJsNQPWA==", + "dev": true, + "requires": { + "estree-walker": "^0.5.2", + "magic-string": "^0.25.1", + "resolve": "^1.8.1", + "rollup-pluginutils": "^2.3.3" + } + }, + "rollup-plugin-livereload": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-livereload/-/rollup-plugin-livereload-0.6.0.tgz", + "integrity": "sha512-iDNJgceV7qAXCVFkZrklGehGY/xdJZUCLByOdsSS/O2gfoFpWzMM9I+ysXW5peUgQ5Rik4kFbcXmomN4ESVwXQ==", + "dev": true, + "requires": { + "livereload": "^0.6.0" + } + }, + "rollup-plugin-node-resolve": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.4.0.tgz", + "integrity": "sha512-PJcd85dxfSBWih84ozRtBkB731OjXk0KnzN0oGp7WOWcarAFkVa71cV5hTJg2qpVsV2U8EUwrzHP3tvy9vS3qg==", + "dev": true, + "requires": { + "builtin-modules": "^2.0.0", + "is-module": "^1.0.0", + "resolve": "^1.1.6" + } + }, + "rollup-plugin-serve": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-serve/-/rollup-plugin-serve-0.6.0.tgz", + "integrity": "sha512-V/V62bpoPf1meWwrTJ/u1WI/cnDW9n50zPj6hTPh0SHZLmT9i3KOnHPZHA33mabcisgm5Rqvo+aP9A/kh0vnfQ==", + "dev": true, + "requires": { + "mime": "^1.3.6", + "opener": "^1.4.3" + } + }, + "rollup-plugin-terser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-3.0.0.tgz", + "integrity": "sha512-Ed9zRD7OoCBnh0XGlEAJle5TCUsFXMLClwKzZWnS1zbNO4MelHjfCSdFZxCAdH70M40nhZ1nRrY2GZQJhSMcjA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "jest-worker": "^23.2.0", + "serialize-javascript": "^1.5.0", + "terser": "^3.8.2" + } + }, + "rollup-pluginutils": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.3.3.tgz", + "integrity": "sha512-2XZwja7b6P5q4RZ5FhyX1+f46xi1Z3qBKigLRZ6VTZjwbN0K1IFGMlwm06Uu0Emcre2Z63l77nq/pzn+KxIEoA==", + "dev": true, + "requires": { + "estree-walker": "^0.5.2", + "micromatch": "^2.3.11" + } + }, + "run-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz", + "integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==", + "dev": true + }, + "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 + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true + }, + "semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "dev": true + }, + "serialize-javascript": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz", + "integrity": "sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==", + "dev": true + }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "dev": true, + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", + "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "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 + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "sourcemap-codec": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.3.tgz", + "integrity": "sha512-vFrY/x/NdsD7Yc8mpTJXuao9S8lq08Z/kOITHz6b7YbfI9xL8Spe5EvSQUHOI7SbpY8bRPr0U3kKSsPuqEGSfA==", + "dev": true + }, + "spdx-correct": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.2.tgz", + "integrity": "sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz", + "integrity": "sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "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, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "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, + "requires": { + "has-flag": "^3.0.0" + } + }, + "terser": { + "version": "3.10.11", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.10.11.tgz", + "integrity": "sha512-iruZ7j14oBbRYJC5cP0/vTU7YOWjN+J1ZskEGoF78tFzXdkK2hbCL/3TRZN8XB+MuvFhvOHMp7WkOCBO4VEL5g==", + "dev": true, + "requires": { + "commander": "~2.17.1", + "source-map": "~0.6.1", + "source-map-support": "~0.5.6" + }, + "dependencies": { + "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 + } + } + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + } + } + }, + "ultron": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", + "dev": true + }, + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" + } + } + } + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "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, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "ws": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", + "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", + "dev": true, + "requires": { + "options": ">=0.0.5", + "ultron": "1.0.x" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..6787095 --- /dev/null +++ b/package.json @@ -0,0 +1,42 @@ +{ + "name": "webflow-multilingual", + "version": "0.0.1", + "description": "webflow multilingual library", + "main": "webflow-multilingual.js", + "scripts": { + "start": "npm run dev", + "dev": "npm run build:dev", + "prettier": "prettier ./src", + "precommit": "pretty-quick --staged", + "build": "npm run build:prod", + "build:dev": "rollup -c rollup.config.dev.js --watch", + "build:prod": "rollup -c rollup.config.prod.js" + }, + "keywords": [ + "webflow", + "i18n", + "l10n", + "multilingual" + ], + "author": "dfdgsdfg", + "license": "ISC", + "devDependencies": { + "husky": "^1.1.4", + "prettier": "1.15.2", + "pretty-quick": "^1.8.0", + "rollup": "^0.67.1", + "rollup-plugin-commonjs": "^9.2.0", + "rollup-plugin-livereload": "^0.6.0", + "rollup-plugin-node-resolve": "^3.4.0", + "rollup-plugin-serve": "^0.6.0", + "rollup-plugin-terser": "^3.0.0" + }, + "dependencies": { + "iso-639-1": "^2.0.3" + }, + "husky": { + "hooks": { + "pre-commit": "pretty-quick --staged" + } + } +} diff --git a/rollup.config.dev.js b/rollup.config.dev.js new file mode 100644 index 0000000..ff1674f --- /dev/null +++ b/rollup.config.dev.js @@ -0,0 +1,31 @@ +import livereload from "rollup-plugin-livereload"; +import serve from "rollup-plugin-serve"; +import resolve from "rollup-plugin-node-resolve"; +import commonjs from "rollup-plugin-commonjs"; + +export default { + input: "index.js", + output: [ + { + file: "webflow-multilingual.js", + format: "umd", + name: "wm", + sourcemap: true + }, + { + file: "webflow-multilingual.mjs", + format: "es", + sourcemap: true + } + ], + plugins: [ + resolve({ + jsnext: true, + main: true, + browser: true + }), + commonjs({ include: "node_modules/**" }), + serve(), + livereload() + ] +}; diff --git a/rollup.config.prod.js b/rollup.config.prod.js new file mode 100644 index 0000000..8f0410c --- /dev/null +++ b/rollup.config.prod.js @@ -0,0 +1,26 @@ +import { terser } from "rollup-plugin-terser"; +import resolve from "rollup-plugin-node-resolve"; +import commonjs from "rollup-plugin-commonjs"; + +export default { + input: "index.js", + output: [ + { + file: "webflow-multilingual.js", + format: "umd", + name: "wm" + }, + { + file: "webflow-multilingual.mjs", + format: "es" + } + ], + plugins: [ + resolve({ + jsnext: true, + main: true, + browser: true + }), + ] +}; + diff --git a/webflow-multilingual.js b/webflow-multilingual.js new file mode 100644 index 0000000..563bfa2 --- /dev/null +++ b/webflow-multilingual.js @@ -0,0 +1,919 @@ + +(function(l, i, v, e) { v = l.createElement(i); v.async = 1; v.src = '//' + (location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; e = l.getElementsByTagName(i)[0]; e.parentNode.insertBefore(v, e)})(document, 'script'); +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory() : + typeof define === 'function' && define.amd ? define(factory) : + (factory()); +}(this, (function () { 'use strict'; + + const LANGUAGES_LIST = { + aa: { + name: 'Afar', + nativeName: 'Afaraf', + }, + ab: { + name: 'Abkhaz', + nativeName: 'аҧсуа бызшәа', + }, + ae: { + name: 'Avestan', + nativeName: 'avesta', + }, + af: { + name: 'Afrikaans', + nativeName: 'Afrikaans', + }, + ak: { + name: 'Akan', + nativeName: 'Akan', + }, + am: { + name: 'Amharic', + nativeName: 'አማርኛ', + }, + an: { + name: 'Aragonese', + nativeName: 'aragonés', + }, + ar: { + name: 'Arabic', + nativeName: 'اللغة العربية', + }, + as: { + name: 'Assamese', + nativeName: 'অসমীয়া', + }, + av: { + name: 'Avaric', + nativeName: 'авар мацӀ', + }, + ay: { + name: 'Aymara', + nativeName: 'aymar aru', + }, + az: { + name: 'Azerbaijani', + nativeName: 'azərbaycan dili', + }, + ba: { + name: 'Bashkir', + nativeName: 'башҡорт теле', + }, + be: { + name: 'Belarusian', + nativeName: 'беларуская мова', + }, + bg: { + name: 'Bulgarian', + nativeName: 'български език', + }, + bh: { + name: 'Bihari', + nativeName: 'भोजपुरी', + }, + bi: { + name: 'Bislama', + nativeName: 'Bislama', + }, + bm: { + name: 'Bambara', + nativeName: 'bamanankan', + }, + bn: { + name: 'Bengali', + nativeName: 'বাংলা', + }, + bo: { + name: 'Tibetan Standard', + nativeName: 'བོད་ཡིག', + }, + br: { + name: 'Breton', + nativeName: 'brezhoneg', + }, + bs: { + name: 'Bosnian', + nativeName: 'bosanski jezik', + }, + ca: { + name: 'Catalan', + nativeName: 'català', + }, + ce: { + name: 'Chechen', + nativeName: 'нохчийн мотт', + }, + ch: { + name: 'Chamorro', + nativeName: 'Chamoru', + }, + co: { + name: 'Corsican', + nativeName: 'corsu', + }, + cr: { + name: 'Cree', + nativeName: 'ᓀᐦᐃᔭᐍᐏᐣ', + }, + cs: { + name: 'Czech', + nativeName: 'čeština', + }, + cu: { + name: 'Old Church Slavonic', + nativeName: 'ѩзыкъ словѣньскъ', + }, + cv: { + name: 'Chuvash', + nativeName: 'чӑваш чӗлхи', + }, + cy: { + name: 'Welsh', + nativeName: 'Cymraeg', + }, + da: { + name: 'Danish', + nativeName: 'dansk', + }, + de: { + name: 'German', + nativeName: 'Deutsch', + }, + dv: { + name: 'Divehi', + nativeName: 'Dhivehi', + }, + dz: { + name: 'Dzongkha', + nativeName: 'རྫོང་ཁ', + }, + ee: { + name: 'Ewe', + nativeName: 'Eʋegbe', + }, + el: { + name: 'Greek', + nativeName: 'ελληνικά', + }, + en: { + name: 'English', + nativeName: 'English', + }, + eo: { + name: 'Esperanto', + nativeName: 'Esperanto', + }, + es: { + name: 'Spanish', + nativeName: 'Español', + }, + et: { + name: 'Estonian', + nativeName: 'eesti', + }, + eu: { + name: 'Basque', + nativeName: 'euskara', + }, + fa: { + name: 'Persian', + nativeName: 'فارسی', + }, + ff: { + name: 'Fula', + nativeName: 'Fulfulde', + }, + fi: { + name: 'Finnish', + nativeName: 'suomi', + }, + fj: { + name: 'Fijian', + nativeName: 'Vakaviti', + }, + fo: { + name: 'Faroese', + nativeName: 'føroyskt', + }, + fr: { + name: 'French', + nativeName: 'Français', + }, + fy: { + name: 'Western Frisian', + nativeName: 'Frysk', + }, + ga: { + name: 'Irish', + nativeName: 'Gaeilge', + }, + gd: { + name: 'Scottish Gaelic', + nativeName: 'Gàidhlig', + }, + gl: { + name: 'Galician', + nativeName: 'galego', + }, + gn: { + name: 'Guaraní', + nativeName: "Avañe'ẽ", + }, + gu: { + name: 'Gujarati', + nativeName: 'ગુજરાતી', + }, + gv: { + name: 'Manx', + nativeName: 'Gaelg', + }, + ha: { + name: 'Hausa', + nativeName: 'هَوُسَ', + }, + he: { + name: 'Hebrew', + nativeName: 'עברית', + }, + hi: { + name: 'Hindi', + nativeName: 'हिन्दी', + }, + ho: { + name: 'Hiri Motu', + nativeName: 'Hiri Motu', + }, + hr: { + name: 'Croatian', + nativeName: 'hrvatski jezik', + }, + ht: { + name: 'Haitian', + nativeName: 'Kreyòl ayisyen', + }, + hu: { + name: 'Hungarian', + nativeName: 'magyar', + }, + hy: { + name: 'Armenian', + nativeName: 'Հայերեն', + }, + hz: { + name: 'Herero', + nativeName: 'Otjiherero', + }, + ia: { + name: 'Interlingua', + nativeName: 'Interlingua', + }, + id: { + name: 'Indonesian', + nativeName: 'Indonesian', + }, + ie: { + name: 'Interlingue', + nativeName: 'Interlingue', + }, + ig: { + name: 'Igbo', + nativeName: 'Asụsụ Igbo', + }, + ii: { + name: 'Nuosu', + nativeName: 'ꆈꌠ꒿ Nuosuhxop', + }, + ik: { + name: 'Inupiaq', + nativeName: 'Iñupiaq', + }, + io: { + name: 'Ido', + nativeName: 'Ido', + }, + is: { + name: 'Icelandic', + nativeName: 'Íslenska', + }, + it: { + name: 'Italian', + nativeName: 'Italiano', + }, + iu: { + name: 'Inuktitut', + nativeName: 'ᐃᓄᒃᑎᑐᑦ', + }, + ja: { + name: 'Japanese', + nativeName: '日本語', + }, + jv: { + name: 'Javanese', + nativeName: 'basa Jawa', + }, + ka: { + name: 'Georgian', + nativeName: 'ქართული', + }, + kg: { + name: 'Kongo', + nativeName: 'Kikongo', + }, + ki: { + name: 'Kikuyu', + nativeName: 'Gĩkũyũ', + }, + kj: { + name: 'Kwanyama', + nativeName: 'Kuanyama', + }, + kk: { + name: 'Kazakh', + nativeName: 'қазақ тілі', + }, + kl: { + name: 'Kalaallisut', + nativeName: 'kalaallisut', + }, + km: { + name: 'Khmer', + nativeName: 'ខេមរភាសា', + }, + kn: { + name: 'Kannada', + nativeName: 'ಕನ್ನಡ', + }, + ko: { + name: 'Korean', + nativeName: '한국어', + }, + kr: { + name: 'Kanuri', + nativeName: 'Kanuri', + }, + ks: { + name: 'Kashmiri', + nativeName: 'कश्मीरी', + }, + ku: { + name: 'Kurdish', + nativeName: 'Kurdî', + }, + kv: { + name: 'Komi', + nativeName: 'коми кыв', + }, + kw: { + name: 'Cornish', + nativeName: 'Kernewek', + }, + ky: { + name: 'Kyrgyz', + nativeName: 'Кыргызча', + }, + la: { + name: 'Latin', + nativeName: 'latine', + }, + lb: { + name: 'Luxembourgish', + nativeName: 'Lëtzebuergesch', + }, + lg: { + name: 'Ganda', + nativeName: 'Luganda', + }, + li: { + name: 'Limburgish', + nativeName: 'Limburgs', + }, + ln: { + name: 'Lingala', + nativeName: 'Lingála', + }, + lo: { + name: 'Lao', + nativeName: 'ພາສາ', + }, + lt: { + name: 'Lithuanian', + nativeName: 'lietuvių kalba', + }, + lu: { + name: 'Luba-Katanga', + nativeName: 'Tshiluba', + }, + lv: { + name: 'Latvian', + nativeName: 'latviešu valoda', + }, + mg: { + name: 'Malagasy', + nativeName: 'fiteny malagasy', + }, + mh: { + name: 'Marshallese', + nativeName: 'Kajin M̧ajeļ', + }, + mi: { + name: 'Māori', + nativeName: 'te reo Māori', + }, + mk: { + name: 'Macedonian', + nativeName: 'македонски јазик', + }, + ml: { + name: 'Malayalam', + nativeName: 'മലയാളം', + }, + mn: { + name: 'Mongolian', + nativeName: 'Монгол хэл', + }, + mr: { + name: 'Marathi', + nativeName: 'मराठी', + }, + ms: { + name: 'Malay', + nativeName: 'هاس ملايو‎', + }, + mt: { + name: 'Maltese', + nativeName: 'Malti', + }, + my: { + name: 'Burmese', + nativeName: 'ဗမာစာ', + }, + na: { + name: 'Nauru', + nativeName: 'Ekakairũ Naoero', + }, + nb: { + name: 'Norwegian Bokmål', + nativeName: 'Norsk bokmål', + }, + nd: { + name: 'Northern Ndebele', + nativeName: 'isiNdebele', + }, + ne: { + name: 'Nepali', + nativeName: 'नेपाली', + }, + ng: { + name: 'Ndonga', + nativeName: 'Owambo', + }, + nl: { + name: 'Dutch', + nativeName: 'Nederlands', + }, + nn: { + name: 'Norwegian Nynorsk', + nativeName: 'Norsk nynorsk', + }, + no: { + name: 'Norwegian', + nativeName: 'Norsk', + }, + nr: { + name: 'Southern Ndebele', + nativeName: 'isiNdebele', + }, + nv: { + name: 'Navajo', + nativeName: 'Diné bizaad', + }, + ny: { + name: 'Chichewa', + nativeName: 'chiCheŵa', + }, + oc: { + name: 'Occitan', + nativeName: 'occitan', + }, + oj: { + name: 'Ojibwe', + nativeName: 'ᐊᓂᔑᓈᐯᒧᐎᓐ', + }, + om: { + name: 'Oromo', + nativeName: 'Afaan Oromoo', + }, + or: { + name: 'Oriya', + nativeName: 'ଓଡ଼ିଆ', + }, + os: { + name: 'Ossetian', + nativeName: 'ирон æвзаг', + }, + pa: { + name: 'Panjabi', + nativeName: 'ਪੰਜਾਬੀ', + }, + pi: { + name: 'Pāli', + nativeName: 'पाऴि', + }, + pl: { + name: 'Polish', + nativeName: 'język polski', + }, + ps: { + name: 'Pashto', + nativeName: 'پښتو', + }, + pt: { + name: 'Portuguese', + nativeName: 'Português', + }, + qu: { + name: 'Quechua', + nativeName: 'Runa Simi', + }, + rm: { + name: 'Romansh', + nativeName: 'rumantsch grischun', + }, + rn: { + name: 'Kirundi', + nativeName: 'Ikirundi', + }, + ro: { + name: 'Romanian', + nativeName: 'limba română', + }, + ru: { + name: 'Russian', + nativeName: 'Русский', + }, + rw: { + name: 'Kinyarwanda', + nativeName: 'Ikinyarwanda', + }, + sa: { + name: 'Sanskrit', + nativeName: 'संस्कृतम्', + }, + sc: { + name: 'Sardinian', + nativeName: 'sardu', + }, + sd: { + name: 'Sindhi', + nativeName: 'सिन्धी', + }, + se: { + name: 'Northern Sami', + nativeName: 'Davvisámegiella', + }, + sg: { + name: 'Sango', + nativeName: 'yângâ tî sängö', + }, + si: { + name: 'Sinhala', + nativeName: 'සිංහල', + }, + sk: { + name: 'Slovak', + nativeName: 'slovenčina', + }, + sl: { + name: 'Slovene', + nativeName: 'slovenski jezik', + }, + sm: { + name: 'Samoan', + nativeName: "gagana fa'a Samoa", + }, + sn: { + name: 'Shona', + nativeName: 'chiShona', + }, + so: { + name: 'Somali', + nativeName: 'Soomaaliga', + }, + sq: { + name: 'Albanian', + nativeName: 'Shqip', + }, + sr: { + name: 'Serbian', + nativeName: 'српски језик', + }, + ss: { + name: 'Swati', + nativeName: 'SiSwati', + }, + st: { + name: 'Southern Sotho', + nativeName: 'Sesotho', + }, + su: { + name: 'Sundanese', + nativeName: 'Basa Sunda', + }, + sv: { + name: 'Swedish', + nativeName: 'svenska', + }, + sw: { + name: 'Swahili', + nativeName: 'Kiswahili', + }, + ta: { + name: 'Tamil', + nativeName: 'தமிழ்', + }, + te: { + name: 'Telugu', + nativeName: 'తెలుగు', + }, + tg: { + name: 'Tajik', + nativeName: 'тоҷикӣ', + }, + th: { + name: 'Thai', + nativeName: 'ไทย', + }, + ti: { + name: 'Tigrinya', + nativeName: 'ትግርኛ', + }, + tk: { + name: 'Turkmen', + nativeName: 'Türkmen', + }, + tl: { + name: 'Tagalog', + nativeName: 'Wikang Tagalog', + }, + tn: { + name: 'Tswana', + nativeName: 'Setswana', + }, + to: { + name: 'Tonga', + nativeName: 'faka Tonga', + }, + tr: { + name: 'Turkish', + nativeName: 'Türkçe', + }, + ts: { + name: 'Tsonga', + nativeName: 'Xitsonga', + }, + tt: { + name: 'Tatar', + nativeName: 'татар теле', + }, + tw: { + name: 'Twi', + nativeName: 'Twi', + }, + ty: { + name: 'Tahitian', + nativeName: 'Reo Tahiti', + }, + ug: { + name: 'Uyghur', + nativeName: 'ئۇيغۇرچە‎', + }, + uk: { + name: 'Ukrainian', + nativeName: 'Українська', + }, + ur: { + name: 'Urdu', + nativeName: 'اردو', + }, + uz: { + name: 'Uzbek', + nativeName: 'Ўзбек', + }, + ve: { + name: 'Venda', + nativeName: 'Tshivenḓa', + }, + vi: { + name: 'Vietnamese', + nativeName: 'Tiếng Việt', + }, + vo: { + name: 'Volapük', + nativeName: 'Volapük', + }, + wa: { + name: 'Walloon', + nativeName: 'walon', + }, + wo: { + name: 'Wolof', + nativeName: 'Wollof', + }, + xh: { + name: 'Xhosa', + nativeName: 'isiXhosa', + }, + yi: { + name: 'Yiddish', + nativeName: 'ייִדיש', + }, + yo: { + name: 'Yoruba', + nativeName: 'Yorùbá', + }, + za: { + name: 'Zhuang', + nativeName: 'Saɯ cueŋƅ', + }, + zh: { + name: 'Chinese', + nativeName: '中文', + }, + zu: { + name: 'Zulu', + nativeName: 'isiZulu', + }, + }; + + class ISO6391 { + static getLanguages(codes = []) { + return codes.map(code => ({ + code, + name: ISO6391.getName(code), + nativeName: ISO6391.getNativeName(code), + })); + } + + static getName(code) { + return ISO6391.validate(code) ? LANGUAGES_LIST[code].name : ''; + } + + static getAllNames() { + return Object.values(LANGUAGES_LIST).map(l => l.name); + } + + static getNativeName(code) { + return ISO6391.validate(code) ? LANGUAGES_LIST[code].nativeName : ''; + } + + static getAllNativeNames() { + return Object.values(LANGUAGES_LIST).map(l => l.nativeName); + } + + static getCode(name) { + const code = Object.keys(LANGUAGES_LIST).find(code => { + const language = LANGUAGES_LIST[code]; + + return ( + language.name.toLowerCase() === name.toLowerCase() || + language.nativeName.toLowerCase() === name.toLowerCase() + ); + }); + return code || ''; + } + + static getAllCodes() { + return Object.keys(LANGUAGES_LIST); + } + + static validate(code) { + return LANGUAGES_LIST[code] !== undefined; + } + } + + // http://multilinguale.webflow.io + + const defaultLang = 'en'; + const langRegExp = /\[\[([a-z]{2})\]\]([^\[]+)/g; + const isStorageEnabled = ! (typeof localStorage == 'undefined'); + let userLang = (navigator.userLanguage||navigator.browserLanguage||navigator.language||defaultLang).substr(0,2); + let documentLang = new Set(); + let documentLangIter; + + function getLangParam() { + const arr = /lang=([a-z]{2})/g.exec(location.search); + return arr ? arr[1] : null + } + + function getLangFromStorage() { + return isStorageEnabled ? localStorage.getItem('lang') : undefined + } + + function setLang(lang) { + userLang = lang; + if(isStorageEnabled){ + localStorage.setItem('lang', userLang); + } + console.log('[wm] setLang:', lang, userLang); + applyLang(); + } + + function applyLang() { + textDict.forEach((o) => { + o.el.textContent = o.dict[userLang]; + }); + + ISO6391.getAllCodes().forEach(lang => { + lang === userLang + ? document.querySelectorAll(`.wm-${lang}`).forEach(el => el.style.display = el.dataset.wmDisplay) + : document.querySelectorAll(`.wm-${lang}`).forEach(el => el.style.display = 'none'); + }); + } + + function textNodesUnder(el) { + let node; + const nodes = []; + const walk = document.createTreeWalker(el, NodeFilter.SHOW_TEXT, null, false); + + while (node=walk.nextNode()) { + nodes.push(node); + } + + return nodes + } + + const textDict = []; + + // https://medium.com/@roxeteer/javascript-one-liner-to-get-elements-text-content-without-its-child-nodes-8e59269d1e71 + function parentElTextOnly(el) { + return Array.from(el.childNodes).reduce((acc, node) => { + return acc + (node.nodeType === 3 ? node.textContent : '') + }, '') + } + + window.addEventListener('DOMContentLoaded', () => { + userLang = getLangParam() || getLangFromStorage() || userLang; + if(isStorageEnabled) { + localStorage.setItem('lang', userLang); + } + + ISO6391.getAllCodes().forEach(lang => { + document.querySelectorAll(`.wm-${lang}`).forEach(el => el.dataset.wmDisplay = el.style.display); + }); + + textNodesUnder(document).filter((node) => { + return langRegExp.test(parentElTextOnly(node.parentElement)) + }).forEach((node, i) => { + const dict = {}; + let arr; + while((arr = langRegExp.exec(parentElTextOnly(node.parentElement))) != null) { + dict[arr[1]] = arr[2]; + documentLang.add(arr[1]); + } + textDict.push({ + el: node.parentElement, + dict + }); + }); + console.log('[wm] documentLang:', documentLang); + documentLangIter = documentLang[Symbol.iterator](); + applyLang(); + }); + + + ///////////////////////// + + window.addEventListener('DOMContentLoaded', () => { + document.querySelectorAll('[data-wm-sel]').forEach((el) => { + el.addEventListener('click', (evt) => { + evt.stopPropagation(); + evt.preventDefault(); + console.log('[wm] click:', el.dataset.wmSel); + setLang(el.dataset.wmSel); + }); + }); + }); + + /////////////////////////// + + window.addEventListener('DOMContentLoaded', () => { + document.querySelectorAll('[data-wm-switch]').forEach((el) => { + el.addEventListener('click', (evt) => { + evt.stopPropagation(); + evt.preventDefault(); + let nextLang = documentLangIter.next().value; + if (nextLang === userLang) { + nextLang = documentLangIter.next().value; + } + if (!nextLang) { + documentLangIter = documentLang[Symbol.iterator](); + nextLang = documentLangIter.next().value; + } + setLang(nextLang); + console.log('[wm] switch:', nextLang); + }); + }); + }); + +}))); +//# sourceMappingURL=webflow-multilingual.js.map diff --git a/webflow-multilingual.js.map b/webflow-multilingual.js.map new file mode 100644 index 0000000..e88d1df --- /dev/null +++ b/webflow-multilingual.js.map @@ -0,0 +1 @@ +{"version":3,"file":"webflow-multilingual.js","sources":["node_modules/iso-639-1/src/data.js","node_modules/iso-639-1/src/index.js","index.js"],"sourcesContent":["const LANGUAGES_LIST = {\n aa: {\n name: 'Afar',\n nativeName: 'Afaraf',\n },\n ab: {\n name: 'Abkhaz',\n nativeName: 'аҧсуа бызшәа',\n },\n ae: {\n name: 'Avestan',\n nativeName: 'avesta',\n },\n af: {\n name: 'Afrikaans',\n nativeName: 'Afrikaans',\n },\n ak: {\n name: 'Akan',\n nativeName: 'Akan',\n },\n am: {\n name: 'Amharic',\n nativeName: 'አማርኛ',\n },\n an: {\n name: 'Aragonese',\n nativeName: 'aragonés',\n },\n ar: {\n name: 'Arabic',\n nativeName: 'اللغة العربية',\n },\n as: {\n name: 'Assamese',\n nativeName: 'অসমীয়া',\n },\n av: {\n name: 'Avaric',\n nativeName: 'авар мацӀ',\n },\n ay: {\n name: 'Aymara',\n nativeName: 'aymar aru',\n },\n az: {\n name: 'Azerbaijani',\n nativeName: 'azərbaycan dili',\n },\n ba: {\n name: 'Bashkir',\n nativeName: 'башҡорт теле',\n },\n be: {\n name: 'Belarusian',\n nativeName: 'беларуская мова',\n },\n bg: {\n name: 'Bulgarian',\n nativeName: 'български език',\n },\n bh: {\n name: 'Bihari',\n nativeName: 'भोजपुरी',\n },\n bi: {\n name: 'Bislama',\n nativeName: 'Bislama',\n },\n bm: {\n name: 'Bambara',\n nativeName: 'bamanankan',\n },\n bn: {\n name: 'Bengali',\n nativeName: 'বাংলা',\n },\n bo: {\n name: 'Tibetan Standard',\n nativeName: 'བོད་ཡིག',\n },\n br: {\n name: 'Breton',\n nativeName: 'brezhoneg',\n },\n bs: {\n name: 'Bosnian',\n nativeName: 'bosanski jezik',\n },\n ca: {\n name: 'Catalan',\n nativeName: 'català',\n },\n ce: {\n name: 'Chechen',\n nativeName: 'нохчийн мотт',\n },\n ch: {\n name: 'Chamorro',\n nativeName: 'Chamoru',\n },\n co: {\n name: 'Corsican',\n nativeName: 'corsu',\n },\n cr: {\n name: 'Cree',\n nativeName: 'ᓀᐦᐃᔭᐍᐏᐣ',\n },\n cs: {\n name: 'Czech',\n nativeName: 'čeština',\n },\n cu: {\n name: 'Old Church Slavonic',\n nativeName: 'ѩзыкъ словѣньскъ',\n },\n cv: {\n name: 'Chuvash',\n nativeName: 'чӑваш чӗлхи',\n },\n cy: {\n name: 'Welsh',\n nativeName: 'Cymraeg',\n },\n da: {\n name: 'Danish',\n nativeName: 'dansk',\n },\n de: {\n name: 'German',\n nativeName: 'Deutsch',\n },\n dv: {\n name: 'Divehi',\n nativeName: 'Dhivehi',\n },\n dz: {\n name: 'Dzongkha',\n nativeName: 'རྫོང་ཁ',\n },\n ee: {\n name: 'Ewe',\n nativeName: 'Eʋegbe',\n },\n el: {\n name: 'Greek',\n nativeName: 'ελληνικά',\n },\n en: {\n name: 'English',\n nativeName: 'English',\n },\n eo: {\n name: 'Esperanto',\n nativeName: 'Esperanto',\n },\n es: {\n name: 'Spanish',\n nativeName: 'Español',\n },\n et: {\n name: 'Estonian',\n nativeName: 'eesti',\n },\n eu: {\n name: 'Basque',\n nativeName: 'euskara',\n },\n fa: {\n name: 'Persian',\n nativeName: 'فارسی',\n },\n ff: {\n name: 'Fula',\n nativeName: 'Fulfulde',\n },\n fi: {\n name: 'Finnish',\n nativeName: 'suomi',\n },\n fj: {\n name: 'Fijian',\n nativeName: 'Vakaviti',\n },\n fo: {\n name: 'Faroese',\n nativeName: 'føroyskt',\n },\n fr: {\n name: 'French',\n nativeName: 'Français',\n },\n fy: {\n name: 'Western Frisian',\n nativeName: 'Frysk',\n },\n ga: {\n name: 'Irish',\n nativeName: 'Gaeilge',\n },\n gd: {\n name: 'Scottish Gaelic',\n nativeName: 'Gàidhlig',\n },\n gl: {\n name: 'Galician',\n nativeName: 'galego',\n },\n gn: {\n name: 'Guaraní',\n nativeName: \"Avañe'ẽ\",\n },\n gu: {\n name: 'Gujarati',\n nativeName: 'ગુજરાતી',\n },\n gv: {\n name: 'Manx',\n nativeName: 'Gaelg',\n },\n ha: {\n name: 'Hausa',\n nativeName: 'هَوُسَ',\n },\n he: {\n name: 'Hebrew',\n nativeName: 'עברית',\n },\n hi: {\n name: 'Hindi',\n nativeName: 'हिन्दी',\n },\n ho: {\n name: 'Hiri Motu',\n nativeName: 'Hiri Motu',\n },\n hr: {\n name: 'Croatian',\n nativeName: 'hrvatski jezik',\n },\n ht: {\n name: 'Haitian',\n nativeName: 'Kreyòl ayisyen',\n },\n hu: {\n name: 'Hungarian',\n nativeName: 'magyar',\n },\n hy: {\n name: 'Armenian',\n nativeName: 'Հայերեն',\n },\n hz: {\n name: 'Herero',\n nativeName: 'Otjiherero',\n },\n ia: {\n name: 'Interlingua',\n nativeName: 'Interlingua',\n },\n id: {\n name: 'Indonesian',\n nativeName: 'Indonesian',\n },\n ie: {\n name: 'Interlingue',\n nativeName: 'Interlingue',\n },\n ig: {\n name: 'Igbo',\n nativeName: 'Asụsụ Igbo',\n },\n ii: {\n name: 'Nuosu',\n nativeName: 'ꆈꌠ꒿ Nuosuhxop',\n },\n ik: {\n name: 'Inupiaq',\n nativeName: 'Iñupiaq',\n },\n io: {\n name: 'Ido',\n nativeName: 'Ido',\n },\n is: {\n name: 'Icelandic',\n nativeName: 'Íslenska',\n },\n it: {\n name: 'Italian',\n nativeName: 'Italiano',\n },\n iu: {\n name: 'Inuktitut',\n nativeName: 'ᐃᓄᒃᑎᑐᑦ',\n },\n ja: {\n name: 'Japanese',\n nativeName: '日本語',\n },\n jv: {\n name: 'Javanese',\n nativeName: 'basa Jawa',\n },\n ka: {\n name: 'Georgian',\n nativeName: 'ქართული',\n },\n kg: {\n name: 'Kongo',\n nativeName: 'Kikongo',\n },\n ki: {\n name: 'Kikuyu',\n nativeName: 'Gĩkũyũ',\n },\n kj: {\n name: 'Kwanyama',\n nativeName: 'Kuanyama',\n },\n kk: {\n name: 'Kazakh',\n nativeName: 'қазақ тілі',\n },\n kl: {\n name: 'Kalaallisut',\n nativeName: 'kalaallisut',\n },\n km: {\n name: 'Khmer',\n nativeName: 'ខេមរភាសា',\n },\n kn: {\n name: 'Kannada',\n nativeName: 'ಕನ್ನಡ',\n },\n ko: {\n name: 'Korean',\n nativeName: '한국어',\n },\n kr: {\n name: 'Kanuri',\n nativeName: 'Kanuri',\n },\n ks: {\n name: 'Kashmiri',\n nativeName: 'कश्मीरी',\n },\n ku: {\n name: 'Kurdish',\n nativeName: 'Kurdî',\n },\n kv: {\n name: 'Komi',\n nativeName: 'коми кыв',\n },\n kw: {\n name: 'Cornish',\n nativeName: 'Kernewek',\n },\n ky: {\n name: 'Kyrgyz',\n nativeName: 'Кыргызча',\n },\n la: {\n name: 'Latin',\n nativeName: 'latine',\n },\n lb: {\n name: 'Luxembourgish',\n nativeName: 'Lëtzebuergesch',\n },\n lg: {\n name: 'Ganda',\n nativeName: 'Luganda',\n },\n li: {\n name: 'Limburgish',\n nativeName: 'Limburgs',\n },\n ln: {\n name: 'Lingala',\n nativeName: 'Lingála',\n },\n lo: {\n name: 'Lao',\n nativeName: 'ພາສາ',\n },\n lt: {\n name: 'Lithuanian',\n nativeName: 'lietuvių kalba',\n },\n lu: {\n name: 'Luba-Katanga',\n nativeName: 'Tshiluba',\n },\n lv: {\n name: 'Latvian',\n nativeName: 'latviešu valoda',\n },\n mg: {\n name: 'Malagasy',\n nativeName: 'fiteny malagasy',\n },\n mh: {\n name: 'Marshallese',\n nativeName: 'Kajin M̧ajeļ',\n },\n mi: {\n name: 'Māori',\n nativeName: 'te reo Māori',\n },\n mk: {\n name: 'Macedonian',\n nativeName: 'македонски јазик',\n },\n ml: {\n name: 'Malayalam',\n nativeName: 'മലയാളം',\n },\n mn: {\n name: 'Mongolian',\n nativeName: 'Монгол хэл',\n },\n mr: {\n name: 'Marathi',\n nativeName: 'मराठी',\n },\n ms: {\n name: 'Malay',\n nativeName: 'هاس ملايو‎',\n },\n mt: {\n name: 'Maltese',\n nativeName: 'Malti',\n },\n my: {\n name: 'Burmese',\n nativeName: 'ဗမာစာ',\n },\n na: {\n name: 'Nauru',\n nativeName: 'Ekakairũ Naoero',\n },\n nb: {\n name: 'Norwegian Bokmål',\n nativeName: 'Norsk bokmål',\n },\n nd: {\n name: 'Northern Ndebele',\n nativeName: 'isiNdebele',\n },\n ne: {\n name: 'Nepali',\n nativeName: 'नेपाली',\n },\n ng: {\n name: 'Ndonga',\n nativeName: 'Owambo',\n },\n nl: {\n name: 'Dutch',\n nativeName: 'Nederlands',\n },\n nn: {\n name: 'Norwegian Nynorsk',\n nativeName: 'Norsk nynorsk',\n },\n no: {\n name: 'Norwegian',\n nativeName: 'Norsk',\n },\n nr: {\n name: 'Southern Ndebele',\n nativeName: 'isiNdebele',\n },\n nv: {\n name: 'Navajo',\n nativeName: 'Diné bizaad',\n },\n ny: {\n name: 'Chichewa',\n nativeName: 'chiCheŵa',\n },\n oc: {\n name: 'Occitan',\n nativeName: 'occitan',\n },\n oj: {\n name: 'Ojibwe',\n nativeName: 'ᐊᓂᔑᓈᐯᒧᐎᓐ',\n },\n om: {\n name: 'Oromo',\n nativeName: 'Afaan Oromoo',\n },\n or: {\n name: 'Oriya',\n nativeName: 'ଓଡ଼ିଆ',\n },\n os: {\n name: 'Ossetian',\n nativeName: 'ирон æвзаг',\n },\n pa: {\n name: 'Panjabi',\n nativeName: 'ਪੰਜਾਬੀ',\n },\n pi: {\n name: 'Pāli',\n nativeName: 'पाऴि',\n },\n pl: {\n name: 'Polish',\n nativeName: 'język polski',\n },\n ps: {\n name: 'Pashto',\n nativeName: 'پښتو',\n },\n pt: {\n name: 'Portuguese',\n nativeName: 'Português',\n },\n qu: {\n name: 'Quechua',\n nativeName: 'Runa Simi',\n },\n rm: {\n name: 'Romansh',\n nativeName: 'rumantsch grischun',\n },\n rn: {\n name: 'Kirundi',\n nativeName: 'Ikirundi',\n },\n ro: {\n name: 'Romanian',\n nativeName: 'limba română',\n },\n ru: {\n name: 'Russian',\n nativeName: 'Русский',\n },\n rw: {\n name: 'Kinyarwanda',\n nativeName: 'Ikinyarwanda',\n },\n sa: {\n name: 'Sanskrit',\n nativeName: 'संस्कृतम्',\n },\n sc: {\n name: 'Sardinian',\n nativeName: 'sardu',\n },\n sd: {\n name: 'Sindhi',\n nativeName: 'सिन्धी',\n },\n se: {\n name: 'Northern Sami',\n nativeName: 'Davvisámegiella',\n },\n sg: {\n name: 'Sango',\n nativeName: 'yângâ tî sängö',\n },\n si: {\n name: 'Sinhala',\n nativeName: 'සිංහල',\n },\n sk: {\n name: 'Slovak',\n nativeName: 'slovenčina',\n },\n sl: {\n name: 'Slovene',\n nativeName: 'slovenski jezik',\n },\n sm: {\n name: 'Samoan',\n nativeName: \"gagana fa'a Samoa\",\n },\n sn: {\n name: 'Shona',\n nativeName: 'chiShona',\n },\n so: {\n name: 'Somali',\n nativeName: 'Soomaaliga',\n },\n sq: {\n name: 'Albanian',\n nativeName: 'Shqip',\n },\n sr: {\n name: 'Serbian',\n nativeName: 'српски језик',\n },\n ss: {\n name: 'Swati',\n nativeName: 'SiSwati',\n },\n st: {\n name: 'Southern Sotho',\n nativeName: 'Sesotho',\n },\n su: {\n name: 'Sundanese',\n nativeName: 'Basa Sunda',\n },\n sv: {\n name: 'Swedish',\n nativeName: 'svenska',\n },\n sw: {\n name: 'Swahili',\n nativeName: 'Kiswahili',\n },\n ta: {\n name: 'Tamil',\n nativeName: 'தமிழ்',\n },\n te: {\n name: 'Telugu',\n nativeName: 'తెలుగు',\n },\n tg: {\n name: 'Tajik',\n nativeName: 'тоҷикӣ',\n },\n th: {\n name: 'Thai',\n nativeName: 'ไทย',\n },\n ti: {\n name: 'Tigrinya',\n nativeName: 'ትግርኛ',\n },\n tk: {\n name: 'Turkmen',\n nativeName: 'Türkmen',\n },\n tl: {\n name: 'Tagalog',\n nativeName: 'Wikang Tagalog',\n },\n tn: {\n name: 'Tswana',\n nativeName: 'Setswana',\n },\n to: {\n name: 'Tonga',\n nativeName: 'faka Tonga',\n },\n tr: {\n name: 'Turkish',\n nativeName: 'Türkçe',\n },\n ts: {\n name: 'Tsonga',\n nativeName: 'Xitsonga',\n },\n tt: {\n name: 'Tatar',\n nativeName: 'татар теле',\n },\n tw: {\n name: 'Twi',\n nativeName: 'Twi',\n },\n ty: {\n name: 'Tahitian',\n nativeName: 'Reo Tahiti',\n },\n ug: {\n name: 'Uyghur',\n nativeName: 'ئۇيغۇرچە‎',\n },\n uk: {\n name: 'Ukrainian',\n nativeName: 'Українська',\n },\n ur: {\n name: 'Urdu',\n nativeName: 'اردو',\n },\n uz: {\n name: 'Uzbek',\n nativeName: 'Ўзбек',\n },\n ve: {\n name: 'Venda',\n nativeName: 'Tshivenḓa',\n },\n vi: {\n name: 'Vietnamese',\n nativeName: 'Tiếng Việt',\n },\n vo: {\n name: 'Volapük',\n nativeName: 'Volapük',\n },\n wa: {\n name: 'Walloon',\n nativeName: 'walon',\n },\n wo: {\n name: 'Wolof',\n nativeName: 'Wollof',\n },\n xh: {\n name: 'Xhosa',\n nativeName: 'isiXhosa',\n },\n yi: {\n name: 'Yiddish',\n nativeName: 'ייִדיש',\n },\n yo: {\n name: 'Yoruba',\n nativeName: 'Yorùbá',\n },\n za: {\n name: 'Zhuang',\n nativeName: 'Saɯ cueŋƅ',\n },\n zh: {\n name: 'Chinese',\n nativeName: '中文',\n },\n zu: {\n name: 'Zulu',\n nativeName: 'isiZulu',\n },\n};\n\nexport default LANGUAGES_LIST;\n","import LANGUAGES_LIST from './data';\n\nexport default class ISO6391 {\n static getLanguages(codes = []) {\n return codes.map(code => ({\n code,\n name: ISO6391.getName(code),\n nativeName: ISO6391.getNativeName(code),\n }));\n }\n\n static getName(code) {\n return ISO6391.validate(code) ? LANGUAGES_LIST[code].name : '';\n }\n\n static getAllNames() {\n return Object.values(LANGUAGES_LIST).map(l => l.name);\n }\n\n static getNativeName(code) {\n return ISO6391.validate(code) ? LANGUAGES_LIST[code].nativeName : '';\n }\n\n static getAllNativeNames() {\n return Object.values(LANGUAGES_LIST).map(l => l.nativeName);\n }\n\n static getCode(name) {\n const code = Object.keys(LANGUAGES_LIST).find(code => {\n const language = LANGUAGES_LIST[code];\n\n return (\n language.name.toLowerCase() === name.toLowerCase() ||\n language.nativeName.toLowerCase() === name.toLowerCase()\n );\n });\n return code || '';\n }\n\n static getAllCodes() {\n return Object.keys(LANGUAGES_LIST);\n }\n\n static validate(code) {\n return LANGUAGES_LIST[code] !== undefined;\n }\n}\n","// http://multilinguale.webflow.io\nimport ISO6391 from 'iso-639-1'\n\nconst defaultLang = 'en'\nconst langRegExp = /\\[\\[([a-z]{2})\\]\\]([^\\[]+)/g\nconst isStorageEnabled = ! (typeof localStorage == 'undefined')\nlet userLang = (navigator.userLanguage||navigator.browserLanguage||navigator.language||defaultLang).substr(0,2)\nlet documentLang = new Set()\nlet documentLangIter\n\nfunction getLangParam() {\n const arr = /lang=([a-z]{2})/g.exec(location.search)\n return arr ? arr[1] : null\n}\n\nfunction getLangFromStorage() {\n return isStorageEnabled ? localStorage.getItem('lang') : undefined\n}\n\nfunction setLang(lang) {\n userLang = lang\n if(isStorageEnabled){\n localStorage.setItem('lang', userLang)\n }\n console.log('[wm] setLang:', lang, userLang)\n applyLang()\n}\n\nfunction applyLang() {\n textDict.forEach((o) => {\n o.el.textContent = o.dict[userLang]\n })\n\n ISO6391.getAllCodes().forEach(lang => {\n lang === userLang\n ? document.querySelectorAll(`.wm-${lang}`).forEach(el => el.style.display = el.dataset.wmDisplay)\n : document.querySelectorAll(`.wm-${lang}`).forEach(el => el.style.display = 'none')\n })\n}\n\nfunction textNodesUnder(el) {\n let node\n const nodes = []\n const walk = document.createTreeWalker(el, NodeFilter.SHOW_TEXT, null, false)\n \n while (node=walk.nextNode()) {\n nodes.push(node)\n }\n \n return nodes\n}\n\nconst textDict = []\n\n// https://medium.com/@roxeteer/javascript-one-liner-to-get-elements-text-content-without-its-child-nodes-8e59269d1e71\nfunction parentElTextOnly(el) {\n return Array.from(el.childNodes).reduce((acc, node) => {\n return acc + (node.nodeType === 3 ? node.textContent : '')\n }, '')\n}\n\nwindow.addEventListener('DOMContentLoaded', () => {\n userLang = getLangParam() || getLangFromStorage() || userLang\n if(isStorageEnabled) {\n localStorage.setItem('lang', userLang);\n }\n\n ISO6391.getAllCodes().forEach(lang => {\n document.querySelectorAll(`.wm-${lang}`).forEach(el => el.dataset.wmDisplay = el.style.display)\n })\n \n textNodesUnder(document).filter((node) => {\n return langRegExp.test(parentElTextOnly(node.parentElement))\n }).forEach((node, i) => {\n const dict = {}\n let arr\n while((arr = langRegExp.exec(parentElTextOnly(node.parentElement))) != null) {\n dict[arr[1]] = arr[2]\n documentLang.add(arr[1])\n }\n textDict.push({\n el: node.parentElement,\n dict\n })\n })\n console.log('[wm] documentLang:', documentLang)\n documentLangIter = documentLang[Symbol.iterator]()\n applyLang()\n});\n\n\n/////////////////////////\n\nwindow.addEventListener('DOMContentLoaded', () => {\n document.querySelectorAll('[data-wm-sel]').forEach((el) => {\n el.addEventListener('click', (evt) => {\n evt.stopPropagation()\n evt.preventDefault()\n console.log('[wm] click:', el.dataset.wmSel)\n setLang(el.dataset.wmSel)\n })\n })\n})\n\n///////////////////////////\n\nwindow.addEventListener('DOMContentLoaded', () => {\n document.querySelectorAll('[data-wm-switch]').forEach((el) => {\n el.addEventListener('click', (evt) => {\n evt.stopPropagation()\n evt.preventDefault()\n let nextLang = documentLangIter.next().value\n if (nextLang === userLang) {\n nextLang = documentLangIter.next().value\n }\n if (!nextLang) {\n documentLangIter = documentLang[Symbol.iterator]()\n nextLang = documentLangIter.next().value\n }\n setLang(nextLang)\n console.log('[wm] switch:', nextLang)\n })\n })\n})\n"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/webflow-multilingual.mjs b/webflow-multilingual.mjs new file mode 100644 index 0000000..0a84093 --- /dev/null +++ b/webflow-multilingual.mjs @@ -0,0 +1,911 @@ + +(function(l, i, v, e) { v = l.createElement(i); v.async = 1; v.src = '//' + (location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; e = l.getElementsByTagName(i)[0]; e.parentNode.insertBefore(v, e)})(document, 'script'); +const LANGUAGES_LIST = { + aa: { + name: 'Afar', + nativeName: 'Afaraf', + }, + ab: { + name: 'Abkhaz', + nativeName: 'аҧсуа бызшәа', + }, + ae: { + name: 'Avestan', + nativeName: 'avesta', + }, + af: { + name: 'Afrikaans', + nativeName: 'Afrikaans', + }, + ak: { + name: 'Akan', + nativeName: 'Akan', + }, + am: { + name: 'Amharic', + nativeName: 'አማርኛ', + }, + an: { + name: 'Aragonese', + nativeName: 'aragonés', + }, + ar: { + name: 'Arabic', + nativeName: 'اللغة العربية', + }, + as: { + name: 'Assamese', + nativeName: 'অসমীয়া', + }, + av: { + name: 'Avaric', + nativeName: 'авар мацӀ', + }, + ay: { + name: 'Aymara', + nativeName: 'aymar aru', + }, + az: { + name: 'Azerbaijani', + nativeName: 'azərbaycan dili', + }, + ba: { + name: 'Bashkir', + nativeName: 'башҡорт теле', + }, + be: { + name: 'Belarusian', + nativeName: 'беларуская мова', + }, + bg: { + name: 'Bulgarian', + nativeName: 'български език', + }, + bh: { + name: 'Bihari', + nativeName: 'भोजपुरी', + }, + bi: { + name: 'Bislama', + nativeName: 'Bislama', + }, + bm: { + name: 'Bambara', + nativeName: 'bamanankan', + }, + bn: { + name: 'Bengali', + nativeName: 'বাংলা', + }, + bo: { + name: 'Tibetan Standard', + nativeName: 'བོད་ཡིག', + }, + br: { + name: 'Breton', + nativeName: 'brezhoneg', + }, + bs: { + name: 'Bosnian', + nativeName: 'bosanski jezik', + }, + ca: { + name: 'Catalan', + nativeName: 'català', + }, + ce: { + name: 'Chechen', + nativeName: 'нохчийн мотт', + }, + ch: { + name: 'Chamorro', + nativeName: 'Chamoru', + }, + co: { + name: 'Corsican', + nativeName: 'corsu', + }, + cr: { + name: 'Cree', + nativeName: 'ᓀᐦᐃᔭᐍᐏᐣ', + }, + cs: { + name: 'Czech', + nativeName: 'čeština', + }, + cu: { + name: 'Old Church Slavonic', + nativeName: 'ѩзыкъ словѣньскъ', + }, + cv: { + name: 'Chuvash', + nativeName: 'чӑваш чӗлхи', + }, + cy: { + name: 'Welsh', + nativeName: 'Cymraeg', + }, + da: { + name: 'Danish', + nativeName: 'dansk', + }, + de: { + name: 'German', + nativeName: 'Deutsch', + }, + dv: { + name: 'Divehi', + nativeName: 'Dhivehi', + }, + dz: { + name: 'Dzongkha', + nativeName: 'རྫོང་ཁ', + }, + ee: { + name: 'Ewe', + nativeName: 'Eʋegbe', + }, + el: { + name: 'Greek', + nativeName: 'ελληνικά', + }, + en: { + name: 'English', + nativeName: 'English', + }, + eo: { + name: 'Esperanto', + nativeName: 'Esperanto', + }, + es: { + name: 'Spanish', + nativeName: 'Español', + }, + et: { + name: 'Estonian', + nativeName: 'eesti', + }, + eu: { + name: 'Basque', + nativeName: 'euskara', + }, + fa: { + name: 'Persian', + nativeName: 'فارسی', + }, + ff: { + name: 'Fula', + nativeName: 'Fulfulde', + }, + fi: { + name: 'Finnish', + nativeName: 'suomi', + }, + fj: { + name: 'Fijian', + nativeName: 'Vakaviti', + }, + fo: { + name: 'Faroese', + nativeName: 'føroyskt', + }, + fr: { + name: 'French', + nativeName: 'Français', + }, + fy: { + name: 'Western Frisian', + nativeName: 'Frysk', + }, + ga: { + name: 'Irish', + nativeName: 'Gaeilge', + }, + gd: { + name: 'Scottish Gaelic', + nativeName: 'Gàidhlig', + }, + gl: { + name: 'Galician', + nativeName: 'galego', + }, + gn: { + name: 'Guaraní', + nativeName: "Avañe'ẽ", + }, + gu: { + name: 'Gujarati', + nativeName: 'ગુજરાતી', + }, + gv: { + name: 'Manx', + nativeName: 'Gaelg', + }, + ha: { + name: 'Hausa', + nativeName: 'هَوُسَ', + }, + he: { + name: 'Hebrew', + nativeName: 'עברית', + }, + hi: { + name: 'Hindi', + nativeName: 'हिन्दी', + }, + ho: { + name: 'Hiri Motu', + nativeName: 'Hiri Motu', + }, + hr: { + name: 'Croatian', + nativeName: 'hrvatski jezik', + }, + ht: { + name: 'Haitian', + nativeName: 'Kreyòl ayisyen', + }, + hu: { + name: 'Hungarian', + nativeName: 'magyar', + }, + hy: { + name: 'Armenian', + nativeName: 'Հայերեն', + }, + hz: { + name: 'Herero', + nativeName: 'Otjiherero', + }, + ia: { + name: 'Interlingua', + nativeName: 'Interlingua', + }, + id: { + name: 'Indonesian', + nativeName: 'Indonesian', + }, + ie: { + name: 'Interlingue', + nativeName: 'Interlingue', + }, + ig: { + name: 'Igbo', + nativeName: 'Asụsụ Igbo', + }, + ii: { + name: 'Nuosu', + nativeName: 'ꆈꌠ꒿ Nuosuhxop', + }, + ik: { + name: 'Inupiaq', + nativeName: 'Iñupiaq', + }, + io: { + name: 'Ido', + nativeName: 'Ido', + }, + is: { + name: 'Icelandic', + nativeName: 'Íslenska', + }, + it: { + name: 'Italian', + nativeName: 'Italiano', + }, + iu: { + name: 'Inuktitut', + nativeName: 'ᐃᓄᒃᑎᑐᑦ', + }, + ja: { + name: 'Japanese', + nativeName: '日本語', + }, + jv: { + name: 'Javanese', + nativeName: 'basa Jawa', + }, + ka: { + name: 'Georgian', + nativeName: 'ქართული', + }, + kg: { + name: 'Kongo', + nativeName: 'Kikongo', + }, + ki: { + name: 'Kikuyu', + nativeName: 'Gĩkũyũ', + }, + kj: { + name: 'Kwanyama', + nativeName: 'Kuanyama', + }, + kk: { + name: 'Kazakh', + nativeName: 'қазақ тілі', + }, + kl: { + name: 'Kalaallisut', + nativeName: 'kalaallisut', + }, + km: { + name: 'Khmer', + nativeName: 'ខេមរភាសា', + }, + kn: { + name: 'Kannada', + nativeName: 'ಕನ್ನಡ', + }, + ko: { + name: 'Korean', + nativeName: '한국어', + }, + kr: { + name: 'Kanuri', + nativeName: 'Kanuri', + }, + ks: { + name: 'Kashmiri', + nativeName: 'कश्मीरी', + }, + ku: { + name: 'Kurdish', + nativeName: 'Kurdî', + }, + kv: { + name: 'Komi', + nativeName: 'коми кыв', + }, + kw: { + name: 'Cornish', + nativeName: 'Kernewek', + }, + ky: { + name: 'Kyrgyz', + nativeName: 'Кыргызча', + }, + la: { + name: 'Latin', + nativeName: 'latine', + }, + lb: { + name: 'Luxembourgish', + nativeName: 'Lëtzebuergesch', + }, + lg: { + name: 'Ganda', + nativeName: 'Luganda', + }, + li: { + name: 'Limburgish', + nativeName: 'Limburgs', + }, + ln: { + name: 'Lingala', + nativeName: 'Lingála', + }, + lo: { + name: 'Lao', + nativeName: 'ພາສາ', + }, + lt: { + name: 'Lithuanian', + nativeName: 'lietuvių kalba', + }, + lu: { + name: 'Luba-Katanga', + nativeName: 'Tshiluba', + }, + lv: { + name: 'Latvian', + nativeName: 'latviešu valoda', + }, + mg: { + name: 'Malagasy', + nativeName: 'fiteny malagasy', + }, + mh: { + name: 'Marshallese', + nativeName: 'Kajin M̧ajeļ', + }, + mi: { + name: 'Māori', + nativeName: 'te reo Māori', + }, + mk: { + name: 'Macedonian', + nativeName: 'македонски јазик', + }, + ml: { + name: 'Malayalam', + nativeName: 'മലയാളം', + }, + mn: { + name: 'Mongolian', + nativeName: 'Монгол хэл', + }, + mr: { + name: 'Marathi', + nativeName: 'मराठी', + }, + ms: { + name: 'Malay', + nativeName: 'هاس ملايو‎', + }, + mt: { + name: 'Maltese', + nativeName: 'Malti', + }, + my: { + name: 'Burmese', + nativeName: 'ဗမာစာ', + }, + na: { + name: 'Nauru', + nativeName: 'Ekakairũ Naoero', + }, + nb: { + name: 'Norwegian Bokmål', + nativeName: 'Norsk bokmål', + }, + nd: { + name: 'Northern Ndebele', + nativeName: 'isiNdebele', + }, + ne: { + name: 'Nepali', + nativeName: 'नेपाली', + }, + ng: { + name: 'Ndonga', + nativeName: 'Owambo', + }, + nl: { + name: 'Dutch', + nativeName: 'Nederlands', + }, + nn: { + name: 'Norwegian Nynorsk', + nativeName: 'Norsk nynorsk', + }, + no: { + name: 'Norwegian', + nativeName: 'Norsk', + }, + nr: { + name: 'Southern Ndebele', + nativeName: 'isiNdebele', + }, + nv: { + name: 'Navajo', + nativeName: 'Diné bizaad', + }, + ny: { + name: 'Chichewa', + nativeName: 'chiCheŵa', + }, + oc: { + name: 'Occitan', + nativeName: 'occitan', + }, + oj: { + name: 'Ojibwe', + nativeName: 'ᐊᓂᔑᓈᐯᒧᐎᓐ', + }, + om: { + name: 'Oromo', + nativeName: 'Afaan Oromoo', + }, + or: { + name: 'Oriya', + nativeName: 'ଓଡ଼ିଆ', + }, + os: { + name: 'Ossetian', + nativeName: 'ирон æвзаг', + }, + pa: { + name: 'Panjabi', + nativeName: 'ਪੰਜਾਬੀ', + }, + pi: { + name: 'Pāli', + nativeName: 'पाऴि', + }, + pl: { + name: 'Polish', + nativeName: 'język polski', + }, + ps: { + name: 'Pashto', + nativeName: 'پښتو', + }, + pt: { + name: 'Portuguese', + nativeName: 'Português', + }, + qu: { + name: 'Quechua', + nativeName: 'Runa Simi', + }, + rm: { + name: 'Romansh', + nativeName: 'rumantsch grischun', + }, + rn: { + name: 'Kirundi', + nativeName: 'Ikirundi', + }, + ro: { + name: 'Romanian', + nativeName: 'limba română', + }, + ru: { + name: 'Russian', + nativeName: 'Русский', + }, + rw: { + name: 'Kinyarwanda', + nativeName: 'Ikinyarwanda', + }, + sa: { + name: 'Sanskrit', + nativeName: 'संस्कृतम्', + }, + sc: { + name: 'Sardinian', + nativeName: 'sardu', + }, + sd: { + name: 'Sindhi', + nativeName: 'सिन्धी', + }, + se: { + name: 'Northern Sami', + nativeName: 'Davvisámegiella', + }, + sg: { + name: 'Sango', + nativeName: 'yângâ tî sängö', + }, + si: { + name: 'Sinhala', + nativeName: 'සිංහල', + }, + sk: { + name: 'Slovak', + nativeName: 'slovenčina', + }, + sl: { + name: 'Slovene', + nativeName: 'slovenski jezik', + }, + sm: { + name: 'Samoan', + nativeName: "gagana fa'a Samoa", + }, + sn: { + name: 'Shona', + nativeName: 'chiShona', + }, + so: { + name: 'Somali', + nativeName: 'Soomaaliga', + }, + sq: { + name: 'Albanian', + nativeName: 'Shqip', + }, + sr: { + name: 'Serbian', + nativeName: 'српски језик', + }, + ss: { + name: 'Swati', + nativeName: 'SiSwati', + }, + st: { + name: 'Southern Sotho', + nativeName: 'Sesotho', + }, + su: { + name: 'Sundanese', + nativeName: 'Basa Sunda', + }, + sv: { + name: 'Swedish', + nativeName: 'svenska', + }, + sw: { + name: 'Swahili', + nativeName: 'Kiswahili', + }, + ta: { + name: 'Tamil', + nativeName: 'தமிழ்', + }, + te: { + name: 'Telugu', + nativeName: 'తెలుగు', + }, + tg: { + name: 'Tajik', + nativeName: 'тоҷикӣ', + }, + th: { + name: 'Thai', + nativeName: 'ไทย', + }, + ti: { + name: 'Tigrinya', + nativeName: 'ትግርኛ', + }, + tk: { + name: 'Turkmen', + nativeName: 'Türkmen', + }, + tl: { + name: 'Tagalog', + nativeName: 'Wikang Tagalog', + }, + tn: { + name: 'Tswana', + nativeName: 'Setswana', + }, + to: { + name: 'Tonga', + nativeName: 'faka Tonga', + }, + tr: { + name: 'Turkish', + nativeName: 'Türkçe', + }, + ts: { + name: 'Tsonga', + nativeName: 'Xitsonga', + }, + tt: { + name: 'Tatar', + nativeName: 'татар теле', + }, + tw: { + name: 'Twi', + nativeName: 'Twi', + }, + ty: { + name: 'Tahitian', + nativeName: 'Reo Tahiti', + }, + ug: { + name: 'Uyghur', + nativeName: 'ئۇيغۇرچە‎', + }, + uk: { + name: 'Ukrainian', + nativeName: 'Українська', + }, + ur: { + name: 'Urdu', + nativeName: 'اردو', + }, + uz: { + name: 'Uzbek', + nativeName: 'Ўзбек', + }, + ve: { + name: 'Venda', + nativeName: 'Tshivenḓa', + }, + vi: { + name: 'Vietnamese', + nativeName: 'Tiếng Việt', + }, + vo: { + name: 'Volapük', + nativeName: 'Volapük', + }, + wa: { + name: 'Walloon', + nativeName: 'walon', + }, + wo: { + name: 'Wolof', + nativeName: 'Wollof', + }, + xh: { + name: 'Xhosa', + nativeName: 'isiXhosa', + }, + yi: { + name: 'Yiddish', + nativeName: 'ייִדיש', + }, + yo: { + name: 'Yoruba', + nativeName: 'Yorùbá', + }, + za: { + name: 'Zhuang', + nativeName: 'Saɯ cueŋƅ', + }, + zh: { + name: 'Chinese', + nativeName: '中文', + }, + zu: { + name: 'Zulu', + nativeName: 'isiZulu', + }, +}; + +class ISO6391 { + static getLanguages(codes = []) { + return codes.map(code => ({ + code, + name: ISO6391.getName(code), + nativeName: ISO6391.getNativeName(code), + })); + } + + static getName(code) { + return ISO6391.validate(code) ? LANGUAGES_LIST[code].name : ''; + } + + static getAllNames() { + return Object.values(LANGUAGES_LIST).map(l => l.name); + } + + static getNativeName(code) { + return ISO6391.validate(code) ? LANGUAGES_LIST[code].nativeName : ''; + } + + static getAllNativeNames() { + return Object.values(LANGUAGES_LIST).map(l => l.nativeName); + } + + static getCode(name) { + const code = Object.keys(LANGUAGES_LIST).find(code => { + const language = LANGUAGES_LIST[code]; + + return ( + language.name.toLowerCase() === name.toLowerCase() || + language.nativeName.toLowerCase() === name.toLowerCase() + ); + }); + return code || ''; + } + + static getAllCodes() { + return Object.keys(LANGUAGES_LIST); + } + + static validate(code) { + return LANGUAGES_LIST[code] !== undefined; + } +} + +// http://multilinguale.webflow.io + +const defaultLang = 'en'; +const langRegExp = /\[\[([a-z]{2})\]\]([^\[]+)/g; +const isStorageEnabled = ! (typeof localStorage == 'undefined'); +let userLang = (navigator.userLanguage||navigator.browserLanguage||navigator.language||defaultLang).substr(0,2); +let documentLang = new Set(); +let documentLangIter; + +function getLangParam() { + const arr = /lang=([a-z]{2})/g.exec(location.search); + return arr ? arr[1] : null +} + +function getLangFromStorage() { + return isStorageEnabled ? localStorage.getItem('lang') : undefined +} + +function setLang(lang) { + userLang = lang; + if(isStorageEnabled){ + localStorage.setItem('lang', userLang); + } + console.log('[wm] setLang:', lang, userLang); + applyLang(); +} + +function applyLang() { + textDict.forEach((o) => { + o.el.textContent = o.dict[userLang]; + }); + + ISO6391.getAllCodes().forEach(lang => { + lang === userLang + ? document.querySelectorAll(`.wm-${lang}`).forEach(el => el.style.display = el.dataset.wmDisplay) + : document.querySelectorAll(`.wm-${lang}`).forEach(el => el.style.display = 'none'); + }); +} + +function textNodesUnder(el) { + let node; + const nodes = []; + const walk = document.createTreeWalker(el, NodeFilter.SHOW_TEXT, null, false); + + while (node=walk.nextNode()) { + nodes.push(node); + } + + return nodes +} + +const textDict = []; + +// https://medium.com/@roxeteer/javascript-one-liner-to-get-elements-text-content-without-its-child-nodes-8e59269d1e71 +function parentElTextOnly(el) { + return Array.from(el.childNodes).reduce((acc, node) => { + return acc + (node.nodeType === 3 ? node.textContent : '') + }, '') +} + +window.addEventListener('DOMContentLoaded', () => { + userLang = getLangParam() || getLangFromStorage() || userLang; + if(isStorageEnabled) { + localStorage.setItem('lang', userLang); + } + + ISO6391.getAllCodes().forEach(lang => { + document.querySelectorAll(`.wm-${lang}`).forEach(el => el.dataset.wmDisplay = el.style.display); + }); + + textNodesUnder(document).filter((node) => { + return langRegExp.test(parentElTextOnly(node.parentElement)) + }).forEach((node, i) => { + const dict = {}; + let arr; + while((arr = langRegExp.exec(parentElTextOnly(node.parentElement))) != null) { + dict[arr[1]] = arr[2]; + documentLang.add(arr[1]); + } + textDict.push({ + el: node.parentElement, + dict + }); + }); + console.log('[wm] documentLang:', documentLang); + documentLangIter = documentLang[Symbol.iterator](); + applyLang(); +}); + + +///////////////////////// + +window.addEventListener('DOMContentLoaded', () => { + document.querySelectorAll('[data-wm-sel]').forEach((el) => { + el.addEventListener('click', (evt) => { + evt.stopPropagation(); + evt.preventDefault(); + console.log('[wm] click:', el.dataset.wmSel); + setLang(el.dataset.wmSel); + }); + }); +}); + +/////////////////////////// + +window.addEventListener('DOMContentLoaded', () => { + document.querySelectorAll('[data-wm-switch]').forEach((el) => { + el.addEventListener('click', (evt) => { + evt.stopPropagation(); + evt.preventDefault(); + let nextLang = documentLangIter.next().value; + if (nextLang === userLang) { + nextLang = documentLangIter.next().value; + } + if (!nextLang) { + documentLangIter = documentLang[Symbol.iterator](); + nextLang = documentLangIter.next().value; + } + setLang(nextLang); + console.log('[wm] switch:', nextLang); + }); + }); +}); +//# sourceMappingURL=webflow-multilingual.mjs.map diff --git a/webflow-multilingual.mjs.map b/webflow-multilingual.mjs.map new file mode 100644 index 0000000..67ad4da --- /dev/null +++ b/webflow-multilingual.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"webflow-multilingual.mjs","sources":["node_modules/iso-639-1/src/data.js","node_modules/iso-639-1/src/index.js","index.js"],"sourcesContent":["const LANGUAGES_LIST = {\n aa: {\n name: 'Afar',\n nativeName: 'Afaraf',\n },\n ab: {\n name: 'Abkhaz',\n nativeName: 'аҧсуа бызшәа',\n },\n ae: {\n name: 'Avestan',\n nativeName: 'avesta',\n },\n af: {\n name: 'Afrikaans',\n nativeName: 'Afrikaans',\n },\n ak: {\n name: 'Akan',\n nativeName: 'Akan',\n },\n am: {\n name: 'Amharic',\n nativeName: 'አማርኛ',\n },\n an: {\n name: 'Aragonese',\n nativeName: 'aragonés',\n },\n ar: {\n name: 'Arabic',\n nativeName: 'اللغة العربية',\n },\n as: {\n name: 'Assamese',\n nativeName: 'অসমীয়া',\n },\n av: {\n name: 'Avaric',\n nativeName: 'авар мацӀ',\n },\n ay: {\n name: 'Aymara',\n nativeName: 'aymar aru',\n },\n az: {\n name: 'Azerbaijani',\n nativeName: 'azərbaycan dili',\n },\n ba: {\n name: 'Bashkir',\n nativeName: 'башҡорт теле',\n },\n be: {\n name: 'Belarusian',\n nativeName: 'беларуская мова',\n },\n bg: {\n name: 'Bulgarian',\n nativeName: 'български език',\n },\n bh: {\n name: 'Bihari',\n nativeName: 'भोजपुरी',\n },\n bi: {\n name: 'Bislama',\n nativeName: 'Bislama',\n },\n bm: {\n name: 'Bambara',\n nativeName: 'bamanankan',\n },\n bn: {\n name: 'Bengali',\n nativeName: 'বাংলা',\n },\n bo: {\n name: 'Tibetan Standard',\n nativeName: 'བོད་ཡིག',\n },\n br: {\n name: 'Breton',\n nativeName: 'brezhoneg',\n },\n bs: {\n name: 'Bosnian',\n nativeName: 'bosanski jezik',\n },\n ca: {\n name: 'Catalan',\n nativeName: 'català',\n },\n ce: {\n name: 'Chechen',\n nativeName: 'нохчийн мотт',\n },\n ch: {\n name: 'Chamorro',\n nativeName: 'Chamoru',\n },\n co: {\n name: 'Corsican',\n nativeName: 'corsu',\n },\n cr: {\n name: 'Cree',\n nativeName: 'ᓀᐦᐃᔭᐍᐏᐣ',\n },\n cs: {\n name: 'Czech',\n nativeName: 'čeština',\n },\n cu: {\n name: 'Old Church Slavonic',\n nativeName: 'ѩзыкъ словѣньскъ',\n },\n cv: {\n name: 'Chuvash',\n nativeName: 'чӑваш чӗлхи',\n },\n cy: {\n name: 'Welsh',\n nativeName: 'Cymraeg',\n },\n da: {\n name: 'Danish',\n nativeName: 'dansk',\n },\n de: {\n name: 'German',\n nativeName: 'Deutsch',\n },\n dv: {\n name: 'Divehi',\n nativeName: 'Dhivehi',\n },\n dz: {\n name: 'Dzongkha',\n nativeName: 'རྫོང་ཁ',\n },\n ee: {\n name: 'Ewe',\n nativeName: 'Eʋegbe',\n },\n el: {\n name: 'Greek',\n nativeName: 'ελληνικά',\n },\n en: {\n name: 'English',\n nativeName: 'English',\n },\n eo: {\n name: 'Esperanto',\n nativeName: 'Esperanto',\n },\n es: {\n name: 'Spanish',\n nativeName: 'Español',\n },\n et: {\n name: 'Estonian',\n nativeName: 'eesti',\n },\n eu: {\n name: 'Basque',\n nativeName: 'euskara',\n },\n fa: {\n name: 'Persian',\n nativeName: 'فارسی',\n },\n ff: {\n name: 'Fula',\n nativeName: 'Fulfulde',\n },\n fi: {\n name: 'Finnish',\n nativeName: 'suomi',\n },\n fj: {\n name: 'Fijian',\n nativeName: 'Vakaviti',\n },\n fo: {\n name: 'Faroese',\n nativeName: 'føroyskt',\n },\n fr: {\n name: 'French',\n nativeName: 'Français',\n },\n fy: {\n name: 'Western Frisian',\n nativeName: 'Frysk',\n },\n ga: {\n name: 'Irish',\n nativeName: 'Gaeilge',\n },\n gd: {\n name: 'Scottish Gaelic',\n nativeName: 'Gàidhlig',\n },\n gl: {\n name: 'Galician',\n nativeName: 'galego',\n },\n gn: {\n name: 'Guaraní',\n nativeName: \"Avañe'ẽ\",\n },\n gu: {\n name: 'Gujarati',\n nativeName: 'ગુજરાતી',\n },\n gv: {\n name: 'Manx',\n nativeName: 'Gaelg',\n },\n ha: {\n name: 'Hausa',\n nativeName: 'هَوُسَ',\n },\n he: {\n name: 'Hebrew',\n nativeName: 'עברית',\n },\n hi: {\n name: 'Hindi',\n nativeName: 'हिन्दी',\n },\n ho: {\n name: 'Hiri Motu',\n nativeName: 'Hiri Motu',\n },\n hr: {\n name: 'Croatian',\n nativeName: 'hrvatski jezik',\n },\n ht: {\n name: 'Haitian',\n nativeName: 'Kreyòl ayisyen',\n },\n hu: {\n name: 'Hungarian',\n nativeName: 'magyar',\n },\n hy: {\n name: 'Armenian',\n nativeName: 'Հայերեն',\n },\n hz: {\n name: 'Herero',\n nativeName: 'Otjiherero',\n },\n ia: {\n name: 'Interlingua',\n nativeName: 'Interlingua',\n },\n id: {\n name: 'Indonesian',\n nativeName: 'Indonesian',\n },\n ie: {\n name: 'Interlingue',\n nativeName: 'Interlingue',\n },\n ig: {\n name: 'Igbo',\n nativeName: 'Asụsụ Igbo',\n },\n ii: {\n name: 'Nuosu',\n nativeName: 'ꆈꌠ꒿ Nuosuhxop',\n },\n ik: {\n name: 'Inupiaq',\n nativeName: 'Iñupiaq',\n },\n io: {\n name: 'Ido',\n nativeName: 'Ido',\n },\n is: {\n name: 'Icelandic',\n nativeName: 'Íslenska',\n },\n it: {\n name: 'Italian',\n nativeName: 'Italiano',\n },\n iu: {\n name: 'Inuktitut',\n nativeName: 'ᐃᓄᒃᑎᑐᑦ',\n },\n ja: {\n name: 'Japanese',\n nativeName: '日本語',\n },\n jv: {\n name: 'Javanese',\n nativeName: 'basa Jawa',\n },\n ka: {\n name: 'Georgian',\n nativeName: 'ქართული',\n },\n kg: {\n name: 'Kongo',\n nativeName: 'Kikongo',\n },\n ki: {\n name: 'Kikuyu',\n nativeName: 'Gĩkũyũ',\n },\n kj: {\n name: 'Kwanyama',\n nativeName: 'Kuanyama',\n },\n kk: {\n name: 'Kazakh',\n nativeName: 'қазақ тілі',\n },\n kl: {\n name: 'Kalaallisut',\n nativeName: 'kalaallisut',\n },\n km: {\n name: 'Khmer',\n nativeName: 'ខេមរភាសា',\n },\n kn: {\n name: 'Kannada',\n nativeName: 'ಕನ್ನಡ',\n },\n ko: {\n name: 'Korean',\n nativeName: '한국어',\n },\n kr: {\n name: 'Kanuri',\n nativeName: 'Kanuri',\n },\n ks: {\n name: 'Kashmiri',\n nativeName: 'कश्मीरी',\n },\n ku: {\n name: 'Kurdish',\n nativeName: 'Kurdî',\n },\n kv: {\n name: 'Komi',\n nativeName: 'коми кыв',\n },\n kw: {\n name: 'Cornish',\n nativeName: 'Kernewek',\n },\n ky: {\n name: 'Kyrgyz',\n nativeName: 'Кыргызча',\n },\n la: {\n name: 'Latin',\n nativeName: 'latine',\n },\n lb: {\n name: 'Luxembourgish',\n nativeName: 'Lëtzebuergesch',\n },\n lg: {\n name: 'Ganda',\n nativeName: 'Luganda',\n },\n li: {\n name: 'Limburgish',\n nativeName: 'Limburgs',\n },\n ln: {\n name: 'Lingala',\n nativeName: 'Lingála',\n },\n lo: {\n name: 'Lao',\n nativeName: 'ພາສາ',\n },\n lt: {\n name: 'Lithuanian',\n nativeName: 'lietuvių kalba',\n },\n lu: {\n name: 'Luba-Katanga',\n nativeName: 'Tshiluba',\n },\n lv: {\n name: 'Latvian',\n nativeName: 'latviešu valoda',\n },\n mg: {\n name: 'Malagasy',\n nativeName: 'fiteny malagasy',\n },\n mh: {\n name: 'Marshallese',\n nativeName: 'Kajin M̧ajeļ',\n },\n mi: {\n name: 'Māori',\n nativeName: 'te reo Māori',\n },\n mk: {\n name: 'Macedonian',\n nativeName: 'македонски јазик',\n },\n ml: {\n name: 'Malayalam',\n nativeName: 'മലയാളം',\n },\n mn: {\n name: 'Mongolian',\n nativeName: 'Монгол хэл',\n },\n mr: {\n name: 'Marathi',\n nativeName: 'मराठी',\n },\n ms: {\n name: 'Malay',\n nativeName: 'هاس ملايو‎',\n },\n mt: {\n name: 'Maltese',\n nativeName: 'Malti',\n },\n my: {\n name: 'Burmese',\n nativeName: 'ဗမာစာ',\n },\n na: {\n name: 'Nauru',\n nativeName: 'Ekakairũ Naoero',\n },\n nb: {\n name: 'Norwegian Bokmål',\n nativeName: 'Norsk bokmål',\n },\n nd: {\n name: 'Northern Ndebele',\n nativeName: 'isiNdebele',\n },\n ne: {\n name: 'Nepali',\n nativeName: 'नेपाली',\n },\n ng: {\n name: 'Ndonga',\n nativeName: 'Owambo',\n },\n nl: {\n name: 'Dutch',\n nativeName: 'Nederlands',\n },\n nn: {\n name: 'Norwegian Nynorsk',\n nativeName: 'Norsk nynorsk',\n },\n no: {\n name: 'Norwegian',\n nativeName: 'Norsk',\n },\n nr: {\n name: 'Southern Ndebele',\n nativeName: 'isiNdebele',\n },\n nv: {\n name: 'Navajo',\n nativeName: 'Diné bizaad',\n },\n ny: {\n name: 'Chichewa',\n nativeName: 'chiCheŵa',\n },\n oc: {\n name: 'Occitan',\n nativeName: 'occitan',\n },\n oj: {\n name: 'Ojibwe',\n nativeName: 'ᐊᓂᔑᓈᐯᒧᐎᓐ',\n },\n om: {\n name: 'Oromo',\n nativeName: 'Afaan Oromoo',\n },\n or: {\n name: 'Oriya',\n nativeName: 'ଓଡ଼ିଆ',\n },\n os: {\n name: 'Ossetian',\n nativeName: 'ирон æвзаг',\n },\n pa: {\n name: 'Panjabi',\n nativeName: 'ਪੰਜਾਬੀ',\n },\n pi: {\n name: 'Pāli',\n nativeName: 'पाऴि',\n },\n pl: {\n name: 'Polish',\n nativeName: 'język polski',\n },\n ps: {\n name: 'Pashto',\n nativeName: 'پښتو',\n },\n pt: {\n name: 'Portuguese',\n nativeName: 'Português',\n },\n qu: {\n name: 'Quechua',\n nativeName: 'Runa Simi',\n },\n rm: {\n name: 'Romansh',\n nativeName: 'rumantsch grischun',\n },\n rn: {\n name: 'Kirundi',\n nativeName: 'Ikirundi',\n },\n ro: {\n name: 'Romanian',\n nativeName: 'limba română',\n },\n ru: {\n name: 'Russian',\n nativeName: 'Русский',\n },\n rw: {\n name: 'Kinyarwanda',\n nativeName: 'Ikinyarwanda',\n },\n sa: {\n name: 'Sanskrit',\n nativeName: 'संस्कृतम्',\n },\n sc: {\n name: 'Sardinian',\n nativeName: 'sardu',\n },\n sd: {\n name: 'Sindhi',\n nativeName: 'सिन्धी',\n },\n se: {\n name: 'Northern Sami',\n nativeName: 'Davvisámegiella',\n },\n sg: {\n name: 'Sango',\n nativeName: 'yângâ tî sängö',\n },\n si: {\n name: 'Sinhala',\n nativeName: 'සිංහල',\n },\n sk: {\n name: 'Slovak',\n nativeName: 'slovenčina',\n },\n sl: {\n name: 'Slovene',\n nativeName: 'slovenski jezik',\n },\n sm: {\n name: 'Samoan',\n nativeName: \"gagana fa'a Samoa\",\n },\n sn: {\n name: 'Shona',\n nativeName: 'chiShona',\n },\n so: {\n name: 'Somali',\n nativeName: 'Soomaaliga',\n },\n sq: {\n name: 'Albanian',\n nativeName: 'Shqip',\n },\n sr: {\n name: 'Serbian',\n nativeName: 'српски језик',\n },\n ss: {\n name: 'Swati',\n nativeName: 'SiSwati',\n },\n st: {\n name: 'Southern Sotho',\n nativeName: 'Sesotho',\n },\n su: {\n name: 'Sundanese',\n nativeName: 'Basa Sunda',\n },\n sv: {\n name: 'Swedish',\n nativeName: 'svenska',\n },\n sw: {\n name: 'Swahili',\n nativeName: 'Kiswahili',\n },\n ta: {\n name: 'Tamil',\n nativeName: 'தமிழ்',\n },\n te: {\n name: 'Telugu',\n nativeName: 'తెలుగు',\n },\n tg: {\n name: 'Tajik',\n nativeName: 'тоҷикӣ',\n },\n th: {\n name: 'Thai',\n nativeName: 'ไทย',\n },\n ti: {\n name: 'Tigrinya',\n nativeName: 'ትግርኛ',\n },\n tk: {\n name: 'Turkmen',\n nativeName: 'Türkmen',\n },\n tl: {\n name: 'Tagalog',\n nativeName: 'Wikang Tagalog',\n },\n tn: {\n name: 'Tswana',\n nativeName: 'Setswana',\n },\n to: {\n name: 'Tonga',\n nativeName: 'faka Tonga',\n },\n tr: {\n name: 'Turkish',\n nativeName: 'Türkçe',\n },\n ts: {\n name: 'Tsonga',\n nativeName: 'Xitsonga',\n },\n tt: {\n name: 'Tatar',\n nativeName: 'татар теле',\n },\n tw: {\n name: 'Twi',\n nativeName: 'Twi',\n },\n ty: {\n name: 'Tahitian',\n nativeName: 'Reo Tahiti',\n },\n ug: {\n name: 'Uyghur',\n nativeName: 'ئۇيغۇرچە‎',\n },\n uk: {\n name: 'Ukrainian',\n nativeName: 'Українська',\n },\n ur: {\n name: 'Urdu',\n nativeName: 'اردو',\n },\n uz: {\n name: 'Uzbek',\n nativeName: 'Ўзбек',\n },\n ve: {\n name: 'Venda',\n nativeName: 'Tshivenḓa',\n },\n vi: {\n name: 'Vietnamese',\n nativeName: 'Tiếng Việt',\n },\n vo: {\n name: 'Volapük',\n nativeName: 'Volapük',\n },\n wa: {\n name: 'Walloon',\n nativeName: 'walon',\n },\n wo: {\n name: 'Wolof',\n nativeName: 'Wollof',\n },\n xh: {\n name: 'Xhosa',\n nativeName: 'isiXhosa',\n },\n yi: {\n name: 'Yiddish',\n nativeName: 'ייִדיש',\n },\n yo: {\n name: 'Yoruba',\n nativeName: 'Yorùbá',\n },\n za: {\n name: 'Zhuang',\n nativeName: 'Saɯ cueŋƅ',\n },\n zh: {\n name: 'Chinese',\n nativeName: '中文',\n },\n zu: {\n name: 'Zulu',\n nativeName: 'isiZulu',\n },\n};\n\nexport default LANGUAGES_LIST;\n","import LANGUAGES_LIST from './data';\n\nexport default class ISO6391 {\n static getLanguages(codes = []) {\n return codes.map(code => ({\n code,\n name: ISO6391.getName(code),\n nativeName: ISO6391.getNativeName(code),\n }));\n }\n\n static getName(code) {\n return ISO6391.validate(code) ? LANGUAGES_LIST[code].name : '';\n }\n\n static getAllNames() {\n return Object.values(LANGUAGES_LIST).map(l => l.name);\n }\n\n static getNativeName(code) {\n return ISO6391.validate(code) ? LANGUAGES_LIST[code].nativeName : '';\n }\n\n static getAllNativeNames() {\n return Object.values(LANGUAGES_LIST).map(l => l.nativeName);\n }\n\n static getCode(name) {\n const code = Object.keys(LANGUAGES_LIST).find(code => {\n const language = LANGUAGES_LIST[code];\n\n return (\n language.name.toLowerCase() === name.toLowerCase() ||\n language.nativeName.toLowerCase() === name.toLowerCase()\n );\n });\n return code || '';\n }\n\n static getAllCodes() {\n return Object.keys(LANGUAGES_LIST);\n }\n\n static validate(code) {\n return LANGUAGES_LIST[code] !== undefined;\n }\n}\n","// http://multilinguale.webflow.io\nimport ISO6391 from 'iso-639-1'\n\nconst defaultLang = 'en'\nconst langRegExp = /\\[\\[([a-z]{2})\\]\\]([^\\[]+)/g\nconst isStorageEnabled = ! (typeof localStorage == 'undefined')\nlet userLang = (navigator.userLanguage||navigator.browserLanguage||navigator.language||defaultLang).substr(0,2)\nlet documentLang = new Set()\nlet documentLangIter\n\nfunction getLangParam() {\n const arr = /lang=([a-z]{2})/g.exec(location.search)\n return arr ? arr[1] : null\n}\n\nfunction getLangFromStorage() {\n return isStorageEnabled ? localStorage.getItem('lang') : undefined\n}\n\nfunction setLang(lang) {\n userLang = lang\n if(isStorageEnabled){\n localStorage.setItem('lang', userLang)\n }\n console.log('[wm] setLang:', lang, userLang)\n applyLang()\n}\n\nfunction applyLang() {\n textDict.forEach((o) => {\n o.el.textContent = o.dict[userLang]\n })\n\n ISO6391.getAllCodes().forEach(lang => {\n lang === userLang\n ? document.querySelectorAll(`.wm-${lang}`).forEach(el => el.style.display = el.dataset.wmDisplay)\n : document.querySelectorAll(`.wm-${lang}`).forEach(el => el.style.display = 'none')\n })\n}\n\nfunction textNodesUnder(el) {\n let node\n const nodes = []\n const walk = document.createTreeWalker(el, NodeFilter.SHOW_TEXT, null, false)\n \n while (node=walk.nextNode()) {\n nodes.push(node)\n }\n \n return nodes\n}\n\nconst textDict = []\n\n// https://medium.com/@roxeteer/javascript-one-liner-to-get-elements-text-content-without-its-child-nodes-8e59269d1e71\nfunction parentElTextOnly(el) {\n return Array.from(el.childNodes).reduce((acc, node) => {\n return acc + (node.nodeType === 3 ? node.textContent : '')\n }, '')\n}\n\nwindow.addEventListener('DOMContentLoaded', () => {\n userLang = getLangParam() || getLangFromStorage() || userLang\n if(isStorageEnabled) {\n localStorage.setItem('lang', userLang);\n }\n\n ISO6391.getAllCodes().forEach(lang => {\n document.querySelectorAll(`.wm-${lang}`).forEach(el => el.dataset.wmDisplay = el.style.display)\n })\n \n textNodesUnder(document).filter((node) => {\n return langRegExp.test(parentElTextOnly(node.parentElement))\n }).forEach((node, i) => {\n const dict = {}\n let arr\n while((arr = langRegExp.exec(parentElTextOnly(node.parentElement))) != null) {\n dict[arr[1]] = arr[2]\n documentLang.add(arr[1])\n }\n textDict.push({\n el: node.parentElement,\n dict\n })\n })\n console.log('[wm] documentLang:', documentLang)\n documentLangIter = documentLang[Symbol.iterator]()\n applyLang()\n});\n\n\n/////////////////////////\n\nwindow.addEventListener('DOMContentLoaded', () => {\n document.querySelectorAll('[data-wm-sel]').forEach((el) => {\n el.addEventListener('click', (evt) => {\n evt.stopPropagation()\n evt.preventDefault()\n console.log('[wm] click:', el.dataset.wmSel)\n setLang(el.dataset.wmSel)\n })\n })\n})\n\n///////////////////////////\n\nwindow.addEventListener('DOMContentLoaded', () => {\n document.querySelectorAll('[data-wm-switch]').forEach((el) => {\n el.addEventListener('click', (evt) => {\n evt.stopPropagation()\n evt.preventDefault()\n let nextLang = documentLangIter.next().value\n if (nextLang === userLang) {\n nextLang = documentLangIter.next().value\n }\n if (!nextLang) {\n documentLangIter = documentLang[Symbol.iterator]()\n nextLang = documentLangIter.next().value\n }\n setLang(nextLang)\n console.log('[wm] switch:', nextLang)\n })\n })\n})\n"],"names":[],"mappings":"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"} \ No newline at end of file