├── .travis.yml ├── .npmignore ├── src ├── dasherize.js ├── ordinalize.js ├── util │ └── isFunction.js ├── constantify.js ├── capitalize.js ├── tableize.js ├── classify.js ├── foreignKey.js ├── .babelrc ├── pluralize.js ├── singularize.js ├── transliterate.js ├── titleize.js ├── transliterations.js ├── ordinal.js ├── inflections.js ├── underscore.js ├── applyInflections.js ├── index.js ├── camelize.js ├── parameterize.js ├── humanize.js ├── defaults.js ├── Transliterator.js └── Inflector.js ├── .gitignore ├── .editorconfig ├── rollup.config.js ├── Makefile ├── LICENSE.txt ├── package.json ├── .eslintrc ├── test ├── cases.js └── index.js ├── README.md └── yarn.lock /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "node" 4 | - "12" 5 | - "10" 6 | cache: yarn 7 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | test 2 | .editorconfig 3 | .eslintrc 4 | .npmignore 5 | LICENSE.txt 6 | Makefile 7 | rollup.config.js 8 | -------------------------------------------------------------------------------- /src/dasherize.js: -------------------------------------------------------------------------------- 1 | export default function dasherize(underscoredWord) { 2 | return underscoredWord.replace(/_/g, "-"); 3 | } 4 | -------------------------------------------------------------------------------- /src/ordinalize.js: -------------------------------------------------------------------------------- 1 | import ordinal from "./ordinal"; 2 | 3 | export default function ordinalize(number) { 4 | return `${number}${ordinal(number)}`; 5 | } 6 | -------------------------------------------------------------------------------- /src/util/isFunction.js: -------------------------------------------------------------------------------- 1 | const toString = Object.prototype.toString; 2 | 3 | export default function isFunc(obj) { 4 | return toString.call(obj) === "[object Function]"; 5 | } 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_STORE 2 | dist 3 | node_modules 4 | *~ 5 | *.pyc 6 | .module-cache 7 | *.gem 8 | *.log* 9 | *.sublime-project 10 | *.sublime-workspace 11 | .idea 12 | *.iml 13 | -------------------------------------------------------------------------------- /src/constantify.js: -------------------------------------------------------------------------------- 1 | import underscore from "./underscore"; 2 | 3 | export default function constantify(word) { 4 | return underscore(word).toUpperCase().replace(/\s+/g, "_"); 5 | } 6 | -------------------------------------------------------------------------------- /src/capitalize.js: -------------------------------------------------------------------------------- 1 | export default function capitalize(str) { 2 | const result = str === null || str === undefined ? "" : String(str); 3 | return result.charAt(0).toUpperCase() + result.slice(1); 4 | } 5 | -------------------------------------------------------------------------------- /src/tableize.js: -------------------------------------------------------------------------------- 1 | import pluralize from "./pluralize"; 2 | import underscore from "./underscore"; 3 | 4 | export default function tableize(className) { 5 | return pluralize(underscore(className)); 6 | } 7 | -------------------------------------------------------------------------------- /src/classify.js: -------------------------------------------------------------------------------- 1 | import camelize from "./camelize"; 2 | import singularize from "./singularize"; 3 | 4 | export default function classify(tableName) { 5 | return camelize(singularize(tableName.replace(/.*\./g, ""))); 6 | } 7 | -------------------------------------------------------------------------------- /src/foreignKey.js: -------------------------------------------------------------------------------- 1 | import underscore from "./underscore"; 2 | 3 | export default function foreignKey(className, separateWithUnderscore = true) { 4 | return `${underscore(className)}${separateWithUnderscore ? "_id" : "id"}`; 5 | } 6 | -------------------------------------------------------------------------------- /src/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["latest", { 4 | "es2015": { 5 | "modules": false 6 | } 7 | }] 8 | ], 9 | "plugins": [ 10 | "external-helpers", 11 | "transform-class-properties" 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /src/pluralize.js: -------------------------------------------------------------------------------- 1 | import applyInflections from "./applyInflections"; 2 | import inflections from "./inflections"; 3 | 4 | export default function pluralize(word, locale = "en") { 5 | return applyInflections(word, inflections(locale).plurals); 6 | } 7 | -------------------------------------------------------------------------------- /src/singularize.js: -------------------------------------------------------------------------------- 1 | import applyInflections from "./applyInflections"; 2 | import inflections from "./inflections"; 3 | 4 | export default function singularize(word, locale = "en") { 5 | return applyInflections(word, inflections(locale).singulars); 6 | } 7 | -------------------------------------------------------------------------------- /src/transliterate.js: -------------------------------------------------------------------------------- 1 | import transliterations from "./transliterations"; 2 | 3 | export default function transliterate(string, options = {}) { 4 | const locale = options.locale || "en"; 5 | const replacement = options.replacement || "?"; 6 | 7 | return transliterations(locale).transliterate(string, replacement); 8 | } 9 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | end_of_line = lf 7 | indent_size = 2 8 | indent_style = space 9 | insert_final_newline = true 10 | max_line_length = 120 11 | trim_trailing_whitespace = true 12 | 13 | [*.md] 14 | max_line_length = 0 15 | trim_trailing_whitespace = false 16 | 17 | [COMMIT_EDITMSG] 18 | max_line_length = 0 19 | -------------------------------------------------------------------------------- /src/titleize.js: -------------------------------------------------------------------------------- 1 | import humanize from "./humanize"; 2 | import underscore from "./underscore"; 3 | 4 | export default function titleize(word) { 5 | return humanize(underscore(word)).replace(/(^|[\s¿/]+)([a-z])/g, function( 6 | match, 7 | boundary, 8 | letter, 9 | idx, 10 | string 11 | ) { 12 | return match.replace(letter, letter.toUpperCase()); 13 | }); 14 | } 15 | -------------------------------------------------------------------------------- /src/transliterations.js: -------------------------------------------------------------------------------- 1 | import isFunction from "./util/isFunction"; 2 | import Transliterator from "./Transliterator"; 3 | 4 | export default function transliterations(locale, fn) { 5 | if (isFunction(locale)) { 6 | fn = locale; 7 | locale = null; 8 | } 9 | 10 | locale = locale || "en"; 11 | 12 | if (fn) { 13 | fn(Transliterator.getInstance(locale)); 14 | } else { 15 | return Transliterator.getInstance(locale); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | import resolve from 'rollup-plugin-node-resolve'; 2 | import babel from 'rollup-plugin-babel'; 3 | 4 | const pkg = require('./package.json'); 5 | 6 | export default { 7 | entry: 'src/index.js', 8 | plugins: [ 9 | resolve(), 10 | babel({ 11 | exclude: 'node_modules/**', 12 | }), 13 | ], 14 | targets: [ 15 | { dest: pkg.main, format: 'umd', moduleName: 'Inflector' }, 16 | { dest: pkg.module, format: 'es' }, 17 | ], 18 | }; 19 | -------------------------------------------------------------------------------- /src/ordinal.js: -------------------------------------------------------------------------------- 1 | export default function ordinal(number) { 2 | const absNumber = Math.abs(Number(number)); 3 | const mod100 = absNumber % 100; 4 | 5 | if (mod100 === 11 || mod100 === 12 || mod100 === 13) { 6 | return "th"; 7 | } else { 8 | switch (absNumber % 10) { 9 | case 1: 10 | return "st"; 11 | case 2: 12 | return "nd"; 13 | case 3: 14 | return "rd"; 15 | default: 16 | return "th"; 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | BIN = ./node_modules/.bin 2 | 3 | install:: 4 | @yarn install 5 | 6 | test:: 7 | @yarn test 8 | 9 | build:: 10 | @yarn build 11 | 12 | clean:: 13 | @rm -rf dist 14 | 15 | release-patch:: clean test build 16 | @$(call release,patch) 17 | 18 | release-minor:: clean test build 19 | @$(call release,minor) 20 | 21 | release-major:: clean test build 22 | @$(call release,major) 23 | 24 | publish:: 25 | git push --tags origin HEAD:master 26 | npm publish 27 | 28 | define release 29 | npm version $(1) -m 'Release v%s' 30 | endef 31 | -------------------------------------------------------------------------------- /src/inflections.js: -------------------------------------------------------------------------------- 1 | import isFunction from "./util/isFunction"; 2 | import Inflector from "./Inflector"; 3 | import defaults from "./defaults"; 4 | 5 | export default function inflections(locale, fn) { 6 | if (isFunction(locale)) { 7 | fn = locale; 8 | locale = null; 9 | } 10 | 11 | locale = locale || "en"; 12 | 13 | if (fn) { 14 | fn(Inflector.getInstance(locale)); 15 | } else { 16 | return Inflector.getInstance(locale); 17 | } 18 | } 19 | 20 | for (let locale in defaults) { 21 | inflections(locale, defaults[locale]); 22 | } 23 | -------------------------------------------------------------------------------- /src/underscore.js: -------------------------------------------------------------------------------- 1 | import inflections from "./inflections"; 2 | 3 | export default function underscore(camelCasedWord) { 4 | let result = "" + camelCasedWord; 5 | 6 | result = result.replace( 7 | new RegExp( 8 | "(?:([A-Za-z\\d])|^)(" + 9 | inflections().acronymRegex.source + 10 | ")(?=\\b|[^a-z])", 11 | "g" 12 | ), 13 | function(match, $1, $2) { 14 | return "" + ($1 || "") + ($1 ? "_" : "") + $2.toLowerCase(); 15 | } 16 | ); 17 | 18 | result = result.replace(/([A-Z\d]+)([A-Z][a-z])/g, "$1_$2"); 19 | result = result.replace(/([a-z\d])([A-Z])/g, "$1_$2"); 20 | result = result.replace(/-/g, "_"); 21 | 22 | return result.toLowerCase(); 23 | } 24 | -------------------------------------------------------------------------------- /src/applyInflections.js: -------------------------------------------------------------------------------- 1 | import inflections from "./inflections"; 2 | 3 | export default function applyInflections(word, rules) { 4 | var result = "" + word, rule, regex, replacement; 5 | 6 | if (result.length === 0) { 7 | return result; 8 | } else { 9 | var match = result.toLowerCase().match(/\b\w+$/); 10 | 11 | if (match && inflections().uncountables.indexOf(match[0]) > -1) { 12 | return result; 13 | } else { 14 | for (var i = 0, ii = rules.length; i < ii; i++) { 15 | rule = rules[i]; 16 | 17 | regex = rule[0]; 18 | replacement = rule[1]; 19 | 20 | if (result.match(regex)) { 21 | result = result.replace(regex, replacement); 22 | break; 23 | } 24 | } 25 | 26 | return result; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | export { default as pluralize } from "./pluralize"; 2 | export { default as singularize } from "./singularize"; 3 | export { default as camelize } from "./camelize"; 4 | export { default as underscore } from "./underscore"; 5 | export { default as humanize } from "./humanize"; 6 | export { default as titleize } from "./titleize"; 7 | export { default as tableize } from "./tableize"; 8 | export { default as classify } from "./classify"; 9 | export { default as dasherize } from "./dasherize"; 10 | export { default as foreignKey } from "./foreignKey"; 11 | export { default as ordinal } from "./ordinal"; 12 | export { default as ordinalize } from "./ordinalize"; 13 | export { default as transliterate } from "./transliterate"; 14 | export { default as parameterize } from "./parameterize"; 15 | export { default as capitalize } from "./capitalize"; 16 | export { default as inflections } from "./inflections"; 17 | export { default as transliterations } from "./transliterations"; 18 | export { default as constantify } from "./constantify"; 19 | -------------------------------------------------------------------------------- /src/camelize.js: -------------------------------------------------------------------------------- 1 | import inflections from "./inflections"; 2 | import capitalize from "./capitalize"; 3 | 4 | export default function camelize(term, uppercaseFirstLetter) { 5 | if (uppercaseFirstLetter === null || uppercaseFirstLetter === undefined) { 6 | uppercaseFirstLetter = true; 7 | } 8 | 9 | let result = "" + term; 10 | 11 | if (uppercaseFirstLetter) { 12 | result = result.replace(/^[a-z\d]*/, function(a) { 13 | return inflections().acronyms[a] || capitalize(a); 14 | }); 15 | } else { 16 | result = result.replace( 17 | new RegExp( 18 | "^(?:" + inflections().acronymRegex.source + "(?=\\b|[A-Z_])|\\w)" 19 | ), 20 | function(a) { 21 | return a.toLowerCase(); 22 | } 23 | ); 24 | } 25 | 26 | result = result.replace(/(?:_|(\/))([a-z\d]*)/gi, function( 27 | match, 28 | a, 29 | b, 30 | idx, 31 | string 32 | ) { 33 | a || (a = ""); 34 | return "" + a + (inflections().acronyms[b] || capitalize(b)); 35 | }); 36 | 37 | return result; 38 | } 39 | -------------------------------------------------------------------------------- /src/parameterize.js: -------------------------------------------------------------------------------- 1 | import transliterate from "./transliterate"; 2 | 3 | export default function parameterize(string, options = {}) { 4 | if (options.separator === undefined) { 5 | options.separator = "-"; 6 | } 7 | 8 | if (options.separator === null) { 9 | options.separator = ""; 10 | } 11 | 12 | // replace accented chars with their ascii equivalents 13 | let result = transliterate(string, options); 14 | 15 | result = result.replace(/[^a-z0-9\-_]+/ig, options.separator); 16 | 17 | if (options.separator.length) { 18 | const separatorRegex = new RegExp(options.separator); 19 | 20 | // no more than one of the separator in a row 21 | result = result.replace( 22 | new RegExp(separatorRegex.source + "{2,}"), 23 | options.separator 24 | ); 25 | 26 | // remove leading/trailing separator 27 | result = result.replace( 28 | new RegExp( 29 | "^" + separatorRegex.source + "|" + separatorRegex.source + "$", 30 | "i" 31 | ), 32 | "" 33 | ); 34 | } 35 | 36 | if (options.preserveCase) { 37 | return result; 38 | } 39 | 40 | return result.toLowerCase(); 41 | } 42 | -------------------------------------------------------------------------------- /src/humanize.js: -------------------------------------------------------------------------------- 1 | import inflections from "./inflections"; 2 | 3 | export default function humanize(lowerCaseAndUnderscoredWord, options) { 4 | let result = "" + lowerCaseAndUnderscoredWord; 5 | const humans = inflections().humans; 6 | let human, rule, replacement; 7 | 8 | options = options || {}; 9 | 10 | if (options.capitalize === null || options.capitalize === undefined) { 11 | options.capitalize = true; 12 | } 13 | 14 | for (var i = 0, ii = humans.length; i < ii; i++) { 15 | human = humans[i]; 16 | rule = human[0]; 17 | replacement = human[1]; 18 | 19 | if ((rule.test && rule.test(result)) || result.indexOf(rule) > -1) { 20 | result = result.replace(rule, replacement); 21 | break; 22 | } 23 | } 24 | 25 | result = result.replace(/_id$/, ""); 26 | result = result.replace(/_/g, " "); 27 | 28 | result = result.replace(/([a-z\d]*)/gi, function(match) { 29 | return inflections().acronyms[match] || match.toLowerCase(); 30 | }); 31 | 32 | if (options.capitalize) { 33 | result = result.replace(/^\w/, function(match) { 34 | return match.toUpperCase(); 35 | }); 36 | } 37 | 38 | return result; 39 | } 40 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014-2017 Martin Andert 4 | Copyright (c) 2005-2017 David Heinemeier Hansson 5 | Copyright (c) 2008 The Ruby I18n team 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to deal 9 | in the Software without restriction, including without limitation the rights 10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the Software is 12 | furnished to do so, subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in all 15 | copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | SOFTWARE. 24 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "inflected", 3 | "version": "2.1.0", 4 | "description": "A port of ActiveSupport's inflector to Node.js", 5 | "main": "dist/umd/inflected.js", 6 | "module": "dist/esm/inflected.js", 7 | "repository": "martinandert/inflected", 8 | "author": "Martin Andert", 9 | "license": "MIT", 10 | "keywords": [ 11 | "inflector", 12 | "inflection", 13 | "pluralize", 14 | "singularize", 15 | "camelize", 16 | "titleize", 17 | "tableize", 18 | "humanize", 19 | "capitalize", 20 | "constantify", 21 | "dasherize", 22 | "ordinalize", 23 | "parameterize", 24 | "transliterate", 25 | "activesupport" 26 | ], 27 | "scripts": { 28 | "lint": "eslint --max-warnings 0 src/**", 29 | "test": "yarn lint && yarn bundle && mocha -R spec --bail test/index.js && bundlewatch", 30 | "precommit": "lint-staged", 31 | "build": "yarn bundle && yarn minify", 32 | "bundle": "rollup --config", 33 | "minify": "uglifyjs dist/umd/inflected.js --compress --mangle --output dist/umd/inflected.min.js" 34 | }, 35 | "devDependencies": { 36 | "babel-eslint": "^7.2.2", 37 | "babel-plugin-external-helpers": "^6.22.0", 38 | "babel-plugin-transform-class-properties": "^6.24.1", 39 | "babel-preset-latest": "^6.24.1", 40 | "bundlewatch": "^0.3.0", 41 | "eslint": "^4.18.2", 42 | "eslint-plugin-import": "^2.2.0", 43 | "husky": "^0.13.3", 44 | "lint-staged": "^3.4.0", 45 | "mocha": "^3.2.0", 46 | "object-assign": "^4.1.1", 47 | "prettier": "^1.1.0", 48 | "rollup": "^0.41.6", 49 | "rollup-plugin-babel": "^2.7.1", 50 | "rollup-plugin-node-resolve": "^3.0.0", 51 | "uglify-js": "^2.8.22" 52 | }, 53 | "lint-staged": { 54 | "src/**/*.js": [ 55 | "prettier --write", 56 | "git add" 57 | ] 58 | }, 59 | "bundlewatch": [ 60 | { 61 | "path": "./dist/*/inflected.js", 62 | "maxSize": "5 kB" 63 | } 64 | ] 65 | } 66 | -------------------------------------------------------------------------------- /src/defaults.js: -------------------------------------------------------------------------------- 1 | function en(inflector) { 2 | inflector.plural(/$/, "s"); 3 | inflector.plural(/s$/i, "s"); 4 | inflector.plural(/^(ax|test)is$/i, "$1es"); 5 | inflector.plural(/(octop|vir)us$/i, "$1i"); 6 | inflector.plural(/(octop|vir)i$/i, "$1i"); 7 | inflector.plural(/(alias|status)$/i, "$1es"); 8 | inflector.plural(/(bu)s$/i, "$1ses"); 9 | inflector.plural(/(buffal|tomat)o$/i, "$1oes"); 10 | inflector.plural(/([ti])um$/i, "$1a"); 11 | inflector.plural(/([ti])a$/i, "$1a"); 12 | inflector.plural(/sis$/i, "ses"); 13 | inflector.plural(/(?:([^f])fe|([lr])f)$/i, "$1$2ves"); 14 | inflector.plural(/(hive)$/i, "$1s"); 15 | inflector.plural(/([^aeiouy]|qu)y$/i, "$1ies"); 16 | inflector.plural(/(x|ch|ss|sh)$/i, "$1es"); 17 | inflector.plural(/(matr|vert|ind)(?:ix|ex)$/i, "$1ices"); 18 | inflector.plural(/^(m|l)ouse$/i, "$1ice"); 19 | inflector.plural(/^(m|l)ice$/i, "$1ice"); 20 | inflector.plural(/^(ox)$/i, "$1en"); 21 | inflector.plural(/^(oxen)$/i, "$1"); 22 | inflector.plural(/(quiz)$/i, "$1zes"); 23 | 24 | inflector.singular(/s$/i, ""); 25 | inflector.singular(/(ss)$/i, "$1"); 26 | inflector.singular(/(n)ews$/i, "$1ews"); 27 | inflector.singular(/([ti])a$/i, "$1um"); 28 | inflector.singular( 29 | /((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)(sis|ses)$/i, 30 | "$1sis" 31 | ); 32 | inflector.singular(/(^analy)(sis|ses)$/i, "$1sis"); 33 | inflector.singular(/([^f])ves$/i, "$1fe"); 34 | inflector.singular(/(hive)s$/i, "$1"); 35 | inflector.singular(/(tive)s$/i, "$1"); 36 | inflector.singular(/([lr])ves$/i, "$1f"); 37 | inflector.singular(/([^aeiouy]|qu)ies$/i, "$1y"); 38 | inflector.singular(/(s)eries$/i, "$1eries"); 39 | inflector.singular(/(m)ovies$/i, "$1ovie"); 40 | inflector.singular(/(x|ch|ss|sh)es$/i, "$1"); 41 | inflector.singular(/^(m|l)ice$/i, "$1ouse"); 42 | inflector.singular(/(bus)(es)?$/i, "$1"); 43 | inflector.singular(/(o)es$/i, "$1"); 44 | inflector.singular(/(shoe)s$/i, "$1"); 45 | inflector.singular(/(cris|test)(is|es)$/i, "$1is"); 46 | inflector.singular(/^(a)x[ie]s$/i, "$1xis"); 47 | inflector.singular(/(octop|vir)(us|i)$/i, "$1us"); 48 | inflector.singular(/(alias|status)(es)?$/i, "$1"); 49 | inflector.singular(/^(ox)en/i, "$1"); 50 | inflector.singular(/(vert|ind)ices$/i, "$1ex"); 51 | inflector.singular(/(matr)ices$/i, "$1ix"); 52 | inflector.singular(/(quiz)zes$/i, "$1"); 53 | inflector.singular(/(database)s$/i, "$1"); 54 | 55 | inflector.irregular("person", "people"); 56 | inflector.irregular("man", "men"); 57 | inflector.irregular("child", "children"); 58 | inflector.irregular("sex", "sexes"); 59 | inflector.irregular("move", "moves"); 60 | inflector.irregular("zombie", "zombies"); 61 | 62 | inflector.uncountable( 63 | "equipment", 64 | "information", 65 | "rice", 66 | "money", 67 | "species", 68 | "series", 69 | "fish", 70 | "sheep", 71 | "jeans", 72 | "police" 73 | ); 74 | } 75 | 76 | export default { 77 | en 78 | }; 79 | -------------------------------------------------------------------------------- /src/Transliterator.js: -------------------------------------------------------------------------------- 1 | // prettier-ignore 2 | const DEFAULT_APPROXIMATIONS = { 3 | 'À': 'A', 'Á': 'A', 'Â': 'A', 'Ã': 'A', 'Ä': 'A', 'Å': 'A', 'Æ': 'AE', 4 | 'Ç': 'C', 'È': 'E', 'É': 'E', 'Ê': 'E', 'Ë': 'E', 'Ì': 'I', 'Í': 'I', 5 | 'Î': 'I', 'Ï': 'I', 'Ð': 'D', 'Ñ': 'N', 'Ò': 'O', 'Ó': 'O', 'Ô': 'O', 6 | 'Õ': 'O', 'Ö': 'O', '×': 'x', 'Ø': 'O', 'Ù': 'U', 'Ú': 'U', 'Û': 'U', 7 | 'Ü': 'U', 'Ý': 'Y', 'Þ': 'Th', 'ß': 'ss', 'à': 'a', 'á': 'a', 'â': 'a', 8 | 'ã': 'a', 'ä': 'a', 'å': 'a', 'æ': 'ae', 'ç': 'c', 'è': 'e', 'é': 'e', 9 | 'ê': 'e', 'ë': 'e', 'ì': 'i', 'í': 'i', 'î': 'i', 'ï': 'i', 'ð': 'd', 10 | 'ñ': 'n', 'ò': 'o', 'ó': 'o', 'ô': 'o', 'õ': 'o', 'ö': 'o', 'ø': 'o', 11 | 'ù': 'u', 'ú': 'u', 'û': 'u', 'ü': 'u', 'ý': 'y', 'þ': 'th', 'ÿ': 'y', 12 | 'Ā': 'A', 'ā': 'a', 'Ă': 'A', 'ă': 'a', 'Ą': 'A', 'ą': 'a', 'Ć': 'C', 13 | 'ć': 'c', 'Ĉ': 'C', 'ĉ': 'c', 'Ċ': 'C', 'ċ': 'c', 'Č': 'C', 'č': 'c', 14 | 'Ď': 'D', 'ď': 'd', 'Đ': 'D', 'đ': 'd', 'Ē': 'E', 'ē': 'e', 'Ĕ': 'E', 15 | 'ĕ': 'e', 'Ė': 'E', 'ė': 'e', 'Ę': 'E', 'ę': 'e', 'Ě': 'E', 'ě': 'e', 16 | 'Ĝ': 'G', 'ĝ': 'g', 'Ğ': 'G', 'ğ': 'g', 'Ġ': 'G', 'ġ': 'g', 'Ģ': 'G', 17 | 'ģ': 'g', 'Ĥ': 'H', 'ĥ': 'h', 'Ħ': 'H', 'ħ': 'h', 'Ĩ': 'I', 'ĩ': 'i', 18 | 'Ī': 'I', 'ī': 'i', 'Ĭ': 'I', 'ĭ': 'i', 'Į': 'I', 'į': 'i', 'İ': 'I', 19 | 'ı': 'i', 'IJ': 'IJ', 'ij': 'ij', 'Ĵ': 'J', 'ĵ': 'j', 'Ķ': 'K', 'ķ': 'k', 20 | 'ĸ': 'k', 'Ĺ': 'L', 'ĺ': 'l', 'Ļ': 'L', 'ļ': 'l', 'Ľ': 'L', 'ľ': 'l', 21 | 'Ŀ': 'L', 'ŀ': 'l', 'Ł': 'L', 'ł': 'l', 'Ń': 'N', 'ń': 'n', 'Ņ': 'N', 22 | 'ņ': 'n', 'Ň': 'N', 'ň': 'n', 'ʼn': '\'n', 'Ŋ': 'NG', 'ŋ': 'ng', 23 | 'Ō': 'O', 'ō': 'o', 'Ŏ': 'O', 'ŏ': 'o', 'Ő': 'O', 'ő': 'o', 'Œ': 'OE', 24 | 'œ': 'oe', 'Ŕ': 'R', 'ŕ': 'r', 'Ŗ': 'R', 'ŗ': 'r', 'Ř': 'R', 'ř': 'r', 25 | 'Ś': 'S', 'ś': 's', 'Ŝ': 'S', 'ŝ': 's', 'Ş': 'S', 'ş': 's', 'Š': 'S', 26 | 'š': 's', 'Ţ': 'T', 'ţ': 't', 'Ť': 'T', 'ť': 't', 'Ŧ': 'T', 'ŧ': 't', 27 | 'Ũ': 'U', 'ũ': 'u', 'Ū': 'U', 'ū': 'u', 'Ŭ': 'U', 'ŭ': 'u', 'Ů': 'U', 28 | 'ů': 'u', 'Ű': 'U', 'ű': 'u', 'Ų': 'U', 'ų': 'u', 'Ŵ': 'W', 'ŵ': 'w', 29 | 'Ŷ': 'Y', 'ŷ': 'y', 'Ÿ': 'Y', 'Ź': 'Z', 'ź': 'z', 'Ż': 'Z', 'ż': 'z', 30 | 'Ž': 'Z', 'ž': 'z', 31 | 'А': 'A', 'Б': 'B', 'В': 'V', 'Г': 'G', 'Д': 'D', 'Е': 'E', 'Ё': 'E', 32 | 'Ж': 'ZH', 'З': 'Z', 'И': 'I', 'Й': 'J', 'К': 'K', 'Л': 'L', 'М': 'M', 33 | 'Н': 'N', 'О': 'O', 'П': 'P', 'Р': 'R', 'С': 'S', 'Т': 'T', 'У': 'U', 34 | 'Ф': 'F', 'Х': 'KH', 'Ц': 'C', 'Ч': 'CH', 'Ш': 'SH', 'Щ': 'SHCH', 35 | 'Ъ': '', 'Ы': 'Y', 'Ь': '', 'Э': 'E', 'Ю': 'YU', 'Я': 'YA', 36 | 'а': 'a', 'б': 'b', 'в': 'v', 'г': 'g', 'д': 'd', 'е': 'e', 'ё': 'e', 37 | 'ж': 'zh', 'з': 'z', 'и': 'i', 'й': 'j', 'к': 'k', 'л': 'l', 'м': 'm', 38 | 'н': 'n', 'о': 'o', 'п': 'p', 'р': 'r', 'с': 's', 'т': 't', 'у': 'u', 39 | 'ф': 'f', 'х': 'kh', 'ц': 'c', 'ч': 'ch', 'ш': 'sh', 'щ': 'shch', 40 | 'ъ': '', 'ы': 'y', 'ь': '', 'э': 'e', 'ю': 'yu', 'я': 'ya' 41 | }; 42 | 43 | const DEFAULT_REPLACEMENT_CHAR = "?"; 44 | 45 | const instances = {}; 46 | 47 | export default class Transliterator { 48 | static getInstance(locale) { 49 | instances[locale] = instances[locale] || new Transliterator(); 50 | return instances[locale]; 51 | } 52 | 53 | constructor() { 54 | this.approximations = {}; 55 | 56 | for (const char in DEFAULT_APPROXIMATIONS) { 57 | this.approximate(char, DEFAULT_APPROXIMATIONS[char]); 58 | } 59 | } 60 | 61 | approximate(char, replacement) { 62 | this.approximations[char] = replacement; 63 | } 64 | 65 | transliterate(string, replacement) { 66 | return string.replace( 67 | /[^\u0000-\u007f]/g, 68 | c => this.approximations[c] || replacement || DEFAULT_REPLACEMENT_CHAR 69 | ); 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /src/Inflector.js: -------------------------------------------------------------------------------- 1 | function icPart(str) { 2 | return str 3 | .split("") 4 | .map(c => `(?:${c.toUpperCase()}|${c.toLowerCase()})`) 5 | .join(""); 6 | } 7 | 8 | function remove(arr, elem) { 9 | for (let i = arr.length - 1; i >= 0; i--) { 10 | if (arr[i] === elem) { 11 | Array.prototype.splice.call(arr, i, 1); 12 | } 13 | } 14 | } 15 | 16 | function hasProp(obj, key) { 17 | return Object.prototype.hasOwnProperty.call(obj, key); 18 | } 19 | 20 | const instances = {}; 21 | 22 | export default class Inflector { 23 | static getInstance(locale) { 24 | instances[locale] = instances[locale] || new Inflector(); 25 | return instances[locale]; 26 | } 27 | 28 | constructor() { 29 | this.plurals = []; 30 | this.singulars = []; 31 | this.uncountables = []; 32 | this.humans = []; 33 | this.acronyms = {}; 34 | this.acronymRegex = /(?=a)b/; 35 | } 36 | 37 | acronym(word) { 38 | this.acronyms[word.toLowerCase()] = word; 39 | 40 | const values = []; 41 | 42 | for (const key in this.acronyms) { 43 | if (hasProp(this.acronyms, key)) { 44 | values.push(this.acronyms[key]); 45 | } 46 | } 47 | 48 | this.acronymRegex = new RegExp(values.join("|")); 49 | } 50 | 51 | plural(rule, replacement) { 52 | if (typeof rule === "string") { 53 | remove(this.uncountables, rule); 54 | } 55 | 56 | remove(this.uncountables, replacement); 57 | this.plurals.unshift([rule, replacement]); 58 | } 59 | 60 | singular(rule, replacement) { 61 | if (typeof rule === "string") { 62 | remove(this.uncountables, rule); 63 | } 64 | 65 | remove(this.uncountables, replacement); 66 | this.singulars.unshift([rule, replacement]); 67 | } 68 | 69 | irregular(singular, plural) { 70 | remove(this.uncountables, singular); 71 | remove(this.uncountables, plural); 72 | 73 | const s0 = singular[0]; 74 | const sRest = singular.substr(1); 75 | 76 | const p0 = plural[0]; 77 | const pRest = plural.substr(1); 78 | 79 | if (s0.toUpperCase() === p0.toUpperCase()) { 80 | this.plural(new RegExp("(" + s0 + ")" + sRest + "$", "i"), "$1" + pRest); 81 | this.plural(new RegExp("(" + p0 + ")" + pRest + "$", "i"), "$1" + pRest); 82 | 83 | this.singular( 84 | new RegExp("(" + s0 + ")" + sRest + "$", "i"), 85 | "$1" + sRest 86 | ); 87 | this.singular( 88 | new RegExp("(" + p0 + ")" + pRest + "$", "i"), 89 | "$1" + sRest 90 | ); 91 | } else { 92 | const sRestIC = icPart(sRest); 93 | const pRestIC = icPart(pRest); 94 | 95 | this.plural( 96 | new RegExp(s0.toUpperCase() + sRestIC + "$"), 97 | p0.toUpperCase() + pRest 98 | ); 99 | this.plural( 100 | new RegExp(s0.toLowerCase() + sRestIC + "$"), 101 | p0.toLowerCase() + pRest 102 | ); 103 | this.plural( 104 | new RegExp(p0.toUpperCase() + pRestIC + "$"), 105 | p0.toUpperCase() + pRest 106 | ); 107 | this.plural( 108 | new RegExp(p0.toLowerCase() + pRestIC + "$"), 109 | p0.toLowerCase() + pRest 110 | ); 111 | 112 | this.singular( 113 | new RegExp(s0.toUpperCase() + sRestIC + "$"), 114 | s0.toUpperCase() + sRest 115 | ); 116 | this.singular( 117 | new RegExp(s0.toLowerCase() + sRestIC + "$"), 118 | s0.toLowerCase() + sRest 119 | ); 120 | this.singular( 121 | new RegExp(p0.toUpperCase() + pRestIC + "$"), 122 | s0.toUpperCase() + sRest 123 | ); 124 | this.singular( 125 | new RegExp(p0.toLowerCase() + pRestIC + "$"), 126 | s0.toLowerCase() + sRest 127 | ); 128 | } 129 | } 130 | 131 | uncountable(...words) { 132 | this.uncountables = this.uncountables.concat(words); 133 | } 134 | 135 | human(rule, replacement) { 136 | this.humans.unshift([rule, replacement]); 137 | } 138 | 139 | clear(scope = "all") { 140 | if (scope === "all") { 141 | this.plurals = []; 142 | this.singulars = []; 143 | this.uncountables = []; 144 | this.humans = []; 145 | } else { 146 | this[scope] = []; 147 | } 148 | } 149 | } 150 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "parser": "babel-eslint", 4 | "plugins": ["import"], 5 | 6 | "env": { 7 | "browser": true, 8 | "commonjs": true, 9 | "es6": true, 10 | "node": true 11 | }, 12 | 13 | "parserOptions": { 14 | "ecmaVersion": 6, 15 | "sourceType": "module", 16 | "ecmaFeatures": { 17 | "experimentalObjectRestSpread": true 18 | } 19 | }, 20 | 21 | "settings": { 22 | "import/ignore": ["node_modules"], 23 | "import/extensions": [".js"], 24 | "import/resolver": { 25 | "node": { 26 | "extensions": [".js", ".json"] 27 | } 28 | } 29 | }, 30 | 31 | "rules": { 32 | // http://eslint.org/docs/rules/ 33 | "array-callback-return": "warn", 34 | "default-case": ["warn", { "commentPattern": "^no default$" }], 35 | "dot-location": ["warn", "property"], 36 | "eqeqeq": ["warn", "allow-null"], 37 | "new-parens": "warn", 38 | "no-array-constructor": "warn", 39 | "no-caller": "warn", 40 | "no-cond-assign": ["warn", "always"], 41 | "no-const-assign": "warn", 42 | "no-control-regex": "warn", 43 | "no-delete-var": "warn", 44 | "no-dupe-args": "warn", 45 | "no-dupe-class-members": "warn", 46 | "no-dupe-keys": "warn", 47 | "no-duplicate-case": "warn", 48 | "no-empty-character-class": "warn", 49 | "no-empty-pattern": "warn", 50 | "no-eval": "warn", 51 | "no-ex-assign": "warn", 52 | "no-extend-native": "warn", 53 | "no-extra-bind": "warn", 54 | "no-extra-label": "warn", 55 | "no-fallthrough": "warn", 56 | "no-func-assign": "warn", 57 | "no-implied-eval": "warn", 58 | "no-invalid-regexp": "warn", 59 | "no-iterator": "warn", 60 | "no-label-var": "warn", 61 | "no-labels": ["warn", { "allowLoop": false, "allowSwitch": false }], 62 | "no-lone-blocks": "warn", 63 | "no-loop-func": "warn", 64 | "no-mixed-operators": [ 65 | "warn", 66 | { 67 | "groups": [ 68 | ["&", "|", "^", "~", "<<", ">>", ">>>"], 69 | ["==", "!=", "===", "!==", ">", ">=", "<", "<="], 70 | ["&&", "||"], 71 | ["in", "instanceof"] 72 | ], 73 | "allowSamePrecedence": false 74 | } 75 | ], 76 | "no-multi-str": "warn", 77 | "no-native-reassign": "warn", 78 | "no-negated-in-lhs": "warn", 79 | "no-new-func": "warn", 80 | "no-new-object": "warn", 81 | "no-new-symbol": "warn", 82 | "no-new-wrappers": "warn", 83 | "no-obj-calls": "warn", 84 | "no-octal": "warn", 85 | "no-octal-escape": "warn", 86 | "no-redeclare": "warn", 87 | "no-regex-spaces": "warn", 88 | "no-restricted-syntax": ["warn", "LabeledStatement", "WithStatement"], 89 | "no-script-url": "warn", 90 | "no-self-assign": "warn", 91 | "no-self-compare": "warn", 92 | "no-sequences": "warn", 93 | "no-shadow-restricted-names": "warn", 94 | "no-sparse-arrays": "warn", 95 | "no-template-curly-in-string": "warn", 96 | "no-this-before-super": "warn", 97 | "no-throw-literal": "warn", 98 | "no-undef": "error", 99 | "no-restricted-globals": ["error", "event"], 100 | "no-unexpected-multiline": "warn", 101 | "no-unreachable": "warn", 102 | "no-unused-expressions": [ 103 | "warn", 104 | { 105 | "allowShortCircuit": true, 106 | "allowTernary": true 107 | } 108 | ], 109 | "no-unused-labels": "warn", 110 | "no-unused-vars": [ 111 | "warn", 112 | { 113 | "vars": "local", 114 | "varsIgnorePattern": "^_", 115 | "args": "none", 116 | "ignoreRestSiblings": true 117 | } 118 | ], 119 | "no-use-before-define": ["warn", "nofunc"], 120 | "no-useless-computed-key": "warn", 121 | "no-useless-concat": "warn", 122 | "no-useless-constructor": "warn", 123 | "no-useless-escape": "warn", 124 | "no-useless-rename": [ 125 | "warn", 126 | { 127 | "ignoreDestructuring": false, 128 | "ignoreImport": false, 129 | "ignoreExport": false 130 | } 131 | ], 132 | "no-with": "warn", 133 | "no-whitespace-before-property": "warn", 134 | "operator-assignment": ["warn", "always"], 135 | "radix": "warn", 136 | "require-yield": "warn", 137 | "rest-spread-spacing": ["warn", "never"], 138 | "strict": ["warn", "never"], 139 | "unicode-bom": ["warn", "never"], 140 | "use-isnan": "warn", 141 | "valid-typeof": "warn", 142 | "no-restricted-properties": [ 143 | "error", 144 | { 145 | "object": "require", 146 | "property": "ensure", 147 | "message": "Please use import() instead. More info: https://webpack.js.org/guides/code-splitting-import/#dynamic-import" 148 | }, 149 | { 150 | "object": "System", 151 | "property": "import", 152 | "message": "Please use import() instead. More info: https://webpack.js.org/guides/code-splitting-import/#dynamic-import" 153 | } 154 | ], 155 | 156 | // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/ 157 | 158 | // TODO: import rules are temporarily disabled because they don"t play well 159 | // with how eslint-loader only checks the file you change. So if module A 160 | // imports module B, and B is missing a default export, the linter will 161 | // record this as an issue in module A. Now if you fix module B, the linter 162 | // will not be aware that it needs to re-lint A as well, so the error 163 | // will stay until the next restart, which is really confusing. 164 | 165 | // This is probably fixable with a patch to eslint-loader. 166 | // When file A is saved, we want to invalidate all files that import it 167 | // *and* that currently have lint errors. This should fix the problem. 168 | // (As an exception, import/no-webpack-loader-syntax can be enabled already 169 | // because it doesn"t depend on whether the file exists, so this issue 170 | // doesn"t apply to it.) 171 | 172 | // "import/default": "warn", 173 | // "import/export": "warn", 174 | // "import/named": "warn", 175 | // "import/namespace": "warn", 176 | // "import/no-amd": "warn", 177 | // "import/no-duplicates": "warn", 178 | // "import/no-extraneous-dependencies": "warn", 179 | // "import/no-named-as-default": "warn", 180 | // "import/no-named-as-default-member": "warn", 181 | // "import/no-unresolved": ["warn", { commonjs: true }], 182 | }, 183 | } 184 | -------------------------------------------------------------------------------- /test/cases.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | SingularToPlural: { 3 | 'search' : 'searches', 4 | 'switch' : 'switches', 5 | 'fix' : 'fixes', 6 | 'box' : 'boxes', 7 | 'process' : 'processes', 8 | 'address' : 'addresses', 9 | 'case' : 'cases', 10 | 'stack' : 'stacks', 11 | 'wish' : 'wishes', 12 | 'fish' : 'fish', 13 | 'jeans' : 'jeans', 14 | 'funky jeans' : 'funky jeans', 15 | 'my money' : 'my money', 16 | 17 | 'category' : 'categories', 18 | 'query' : 'queries', 19 | 'ability' : 'abilities', 20 | 'agency' : 'agencies', 21 | 'movie' : 'movies', 22 | 23 | 'archive' : 'archives', 24 | 25 | 'index' : 'indices', 26 | 27 | 'wife' : 'wives', 28 | 'safe' : 'saves', 29 | 'half' : 'halves', 30 | 31 | 'move' : 'moves', 32 | 33 | 'salesperson' : 'salespeople', 34 | 'person' : 'people', 35 | 36 | 'spokesman' : 'spokesmen', 37 | 'man' : 'men', 38 | 'woman' : 'women', 39 | 40 | 'basis' : 'bases', 41 | 'diagnosis' : 'diagnoses', 42 | 'diagnosis_a' : 'diagnosis_as', 43 | 44 | 'datum' : 'data', 45 | 'medium' : 'media', 46 | 'stadium' : 'stadia', 47 | 'analysis' : 'analyses', 48 | 'my_analysis' : 'my_analyses', 49 | 50 | 'node_child' : 'node_children', 51 | 'child' : 'children', 52 | 53 | 'experience' : 'experiences', 54 | 'day' : 'days', 55 | 56 | 'comment' : 'comments', 57 | 'foobar' : 'foobars', 58 | 'newsletter' : 'newsletters', 59 | 60 | 'old_news' : 'old_news', 61 | 'news' : 'news', 62 | 63 | 'series' : 'series', 64 | 'miniseries' : 'miniseries', 65 | 'species' : 'species', 66 | 67 | 'quiz' : 'quizzes', 68 | 69 | 'perspective' : 'perspectives', 70 | 71 | 'ox' : 'oxen', 72 | 'photo' : 'photos', 73 | 'buffalo' : 'buffaloes', 74 | 'tomato' : 'tomatoes', 75 | 'dwarf' : 'dwarves', 76 | 'elf' : 'elves', 77 | 'information' : 'information', 78 | 'equipment' : 'equipment', 79 | 'bus' : 'buses', 80 | 'status' : 'statuses', 81 | 'status_code' : 'status_codes', 82 | 'mouse' : 'mice', 83 | 84 | 'louse' : 'lice', 85 | 'house' : 'houses', 86 | 'octopus' : 'octopi', 87 | 'virus' : 'viri', 88 | 'alias' : 'aliases', 89 | 'portfolio' : 'portfolios', 90 | 91 | 'vertex' : 'vertices', 92 | 'matrix' : 'matrices', 93 | 'matrix_fu' : 'matrix_fus', 94 | 95 | 'axis' : 'axes', 96 | 'taxi' : 'taxis', // prevents regression 97 | 'testis' : 'testes', 98 | 'crisis' : 'crises', 99 | 100 | 'rice' : 'rice', 101 | 'shoe' : 'shoes', 102 | 103 | 'horse' : 'horses', 104 | 'prize' : 'prizes', 105 | 'edge' : 'edges', 106 | 107 | 'database' : 'databases', 108 | 109 | // regression tests against improper inflection regexes 110 | '|ice' : '|ices', 111 | '|ouse' : '|ouses', 112 | 'slice' : 'slices', 113 | 'police' : 'police' 114 | }, 115 | 116 | CamelToUnderscore: { 117 | 'Product' : 'product', 118 | 'SpecialGuest' : 'special_guest', 119 | 'ApplicationController' : 'application_controller', 120 | 'Area51Controller' : 'area51_controller' 121 | }, 122 | 123 | UnderscoreToLowerCamel: { 124 | 'product' : 'product', 125 | 'special_guest' : 'specialGuest', 126 | 'application_controller' : 'applicationController', 127 | 'area51_controller' : 'area51Controller' 128 | }, 129 | 130 | CamelToUnderscoreWithoutReverse: { 131 | 'HTMLTidy' : 'html_tidy', 132 | 'HTMLTidyGenerator' : 'html_tidy_generator', 133 | 'FreeBSD' : 'free_bsd', 134 | 'HTML' : 'html', 135 | }, 136 | 137 | ClassNameToForeignKeyWithUnderscore: { 138 | 'Person' : 'person_id', 139 | 'BillingAccount' : 'billing_account_id' 140 | }, 141 | 142 | ClassNameToForeignKeyWithoutUnderscore: { 143 | 'Person' : 'personid', 144 | 'BillingAccount' : 'billing_accountid' 145 | }, 146 | 147 | ClassNameToTableName: { 148 | 'PrimarySpokesman' : 'primary_spokesmen', 149 | 'NodeChild' : 'node_children' 150 | }, 151 | 152 | StringToParameterized: { 153 | 'Donald E. Knuth' : 'donald-e-knuth', 154 | 'Random text with *(bad)* characters' : 'random-text-with-bad-characters', 155 | 'Allow_Under_Scores' : 'allow_under_scores', 156 | 'Trailing bad characters!@#' : 'trailing-bad-characters', 157 | '!@#Leading bad characters' : 'leading-bad-characters', 158 | 'Squeeze separators' : 'squeeze-separators', 159 | 'Test with + sign' : 'test-with-sign', 160 | 'Test with malformed utf8 \251' : 'test-with-malformed-utf8' 161 | }, 162 | 163 | StringToParameterizeWithNoSeparator: { 164 | 'Donald E. Knuth' : 'donaldeknuth', 165 | 'With-some-dashes' : 'with-some-dashes', 166 | 'Random text with *(bad)* characters' : 'randomtextwithbadcharacters', 167 | 'Trailing bad characters!@#' : 'trailingbadcharacters', 168 | '!@#Leading bad characters' : 'leadingbadcharacters', 169 | 'Squeeze separators' : 'squeezeseparators', 170 | 'Test with + sign' : 'testwithsign', 171 | 'Test with malformed utf8 \251' : 'testwithmalformedutf8' 172 | }, 173 | 174 | StringToParameterizeWithPreserveCase: { 175 | 'Donald E. Knuth': 'Donald-E-Knuth', 176 | 'Random text with *(bad)* Characters': 'Random-text-with-bad-Characters', 177 | 'Allow_Under_Scores': 'Allow_Under_Scores', 178 | 'Trailing BAD characters!@#': 'Trailing-BAD-characters', 179 | '!@#leading bad Characters': 'leading-bad-Characters', 180 | 'squeeze Separators': 'squeeze-Separators', 181 | 'Test with + Sign': 'Test-with-Sign', 182 | 'Test with malformed UTF8 \251': 'Test-with-malformed-UTF8' 183 | }, 184 | 185 | StringToParameterizeWithUnderscore: { 186 | 'Donald E. Knuth' : 'donald_e_knuth', 187 | 'Random text with *(bad)* characters' : 'random_text_with_bad_characters', 188 | 'With-some-dashes' : 'with-some-dashes', 189 | 'Retain_underscore' : 'retain_underscore', 190 | 'Trailing bad characters!@#' : 'trailing_bad_characters', 191 | '!@#Leading bad characters' : 'leading_bad_characters', 192 | 'Squeeze separators' : 'squeeze_separators', 193 | 'Test with + sign' : 'test_with_sign', 194 | 'Test with malformed utf8 \251' : 'test_with_malformed_utf8' 195 | }, 196 | 197 | StringToParameterizedAndNormalized: { 198 | 'Malmö' : 'malmo', 199 | 'Garçons' : 'garcons', 200 | 'Ops\331' : 'opsu', 201 | 'Ærøskøbing' : 'aeroskobing', 202 | 'Aßlar' : 'asslar', 203 | 'Japanese: 日本語' : 'japanese' 204 | }, 205 | 206 | UnderscoreToHuman: { 207 | 'employee_salary' : 'Employee salary', 208 | 'employee_id' : 'Employee', 209 | 'underground' : 'Underground' 210 | }, 211 | 212 | UnderscoreToHumanWithoutCapitalize: { 213 | 'employee_salary' : 'employee salary', 214 | 'employee_id' : 'employee', 215 | 'underground' : 'underground' 216 | }, 217 | 218 | MixtureToTitleCase: { 219 | 'active_record' : 'Active Record', 220 | 'ActiveRecord' : 'Active Record', 221 | 'action web service' : 'Action Web Service', 222 | 'Action Web Service' : 'Action Web Service', 223 | 'Action web service' : 'Action Web Service', 224 | 'actionwebservice' : 'Actionwebservice', 225 | 'Actionwebservice' : 'Actionwebservice', 226 | 'david\'s code' : 'David\'s Code', 227 | 'David\'s code' : 'David\'s Code', 228 | 'david\'s Code' : 'David\'s Code', 229 | 'sgt. pepper\'s' : 'Sgt. Pepper\'s', 230 | 'i\'ve just seen a face': 'I\'ve Just Seen A Face', 231 | 'maybe you\'ll be there': 'Maybe You\'ll Be There', 232 | '¿por qué?' : '¿Por Qué?', 233 | 'Fred’s' : 'Fred’s', 234 | 'Fred`s' : 'Fred`s' 235 | }, 236 | 237 | OrdinalNumbers: { 238 | '-1' : '-1st', 239 | '-2' : '-2nd', 240 | '-3' : '-3rd', 241 | '-4' : '-4th', 242 | '-5' : '-5th', 243 | '-6' : '-6th', 244 | '-7' : '-7th', 245 | '-8' : '-8th', 246 | '-9' : '-9th', 247 | '-10' : '-10th', 248 | '-11' : '-11th', 249 | '-12' : '-12th', 250 | '-13' : '-13th', 251 | '-14' : '-14th', 252 | '-20' : '-20th', 253 | '-21' : '-21st', 254 | '-22' : '-22nd', 255 | '-23' : '-23rd', 256 | '-24' : '-24th', 257 | '-100' : '-100th', 258 | '-101' : '-101st', 259 | '-102' : '-102nd', 260 | '-103' : '-103rd', 261 | '-104' : '-104th', 262 | '-110' : '-110th', 263 | '-111' : '-111th', 264 | '-112' : '-112th', 265 | '-113' : '-113th', 266 | '-1000' : '-1000th', 267 | '-1001' : '-1001st', 268 | '0' : '0th', 269 | '1' : '1st', 270 | '2' : '2nd', 271 | '3' : '3rd', 272 | '4' : '4th', 273 | '5' : '5th', 274 | '6' : '6th', 275 | '7' : '7th', 276 | '8' : '8th', 277 | '9' : '9th', 278 | '10' : '10th', 279 | '11' : '11th', 280 | '12' : '12th', 281 | '13' : '13th', 282 | '14' : '14th', 283 | '20' : '20th', 284 | '21' : '21st', 285 | '22' : '22nd', 286 | '23' : '23rd', 287 | '24' : '24th', 288 | '100' : '100th', 289 | '101' : '101st', 290 | '102' : '102nd', 291 | '103' : '103rd', 292 | '104' : '104th', 293 | '110' : '110th', 294 | '111' : '111th', 295 | '112' : '112th', 296 | '113' : '113th', 297 | '1000' : '1000th', 298 | '1001' : '1001st' 299 | }, 300 | 301 | UnderscoresToDashes: { 302 | 'street' : 'street', 303 | 'street_address' : 'street-address', 304 | 'person_street_address' : 'person-street-address' 305 | }, 306 | 307 | Irregularities: { 308 | 'person' : 'people', 309 | 'man' : 'men', 310 | 'child' : 'children', 311 | 'sex' : 'sexes', 312 | 'move' : 'moves', 313 | 'cow' : 'kine', 314 | 'zombie' : 'zombies', 315 | 'genus' : 'genera' 316 | }, 317 | 318 | WordsToConstantCase: { 319 | 'Conciliation' : 'CONCILIATION', 320 | 'conciliation' : 'CONCILIATION', 321 | 'bankAccount' : 'BANK_ACCOUNT', 322 | 'BankAccount' : 'BANK_ACCOUNT', 323 | 'bank-account' : 'BANK_ACCOUNT', 324 | 'bank_account' : 'BANK_ACCOUNT', 325 | 'Bank Account' : 'BANK_ACCOUNT', 326 | 'Multiple Bank Account' : 'MULTIPLE_BANK_ACCOUNT' 327 | }, 328 | }; 329 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # inflected 2 | 3 | [![Travis build status](https://img.shields.io/travis/martinandert/inflected/master.svg)](https://travis-ci.org/martinandert/inflected) 4 | [![npm downloads](https://img.shields.io/npm/dm/inflected.svg)](https://npmjs.com/package/inflected) 5 | [![no dependencies](https://img.shields.io/badge/dependencies-none-brightgreen.svg)](https://npmjs.com/package/inflected) 6 | [![license](https://img.shields.io/github/license/martinandert/inflected.svg)](https://github.com/martinandert/inflected/blob/master/LICENSE.txt) 7 | 8 | A port of ActiveSupport's inflector to Node.js. Also usable in the browser. 9 | 10 | 11 | ## Installation 12 | 13 | Install via npm: 14 | 15 | ```bash 16 | % npm install inflected 17 | ``` 18 | 19 | Or via yarn: 20 | 21 | ```bash 22 | % yarn add inflected 23 | ``` 24 | 25 | The UMD build is also available on [unpkg](https://unpkg.com/), adding a `Inflector` object to the global scope. 26 | 27 | ```html 28 | 29 | ``` 30 | 31 | 32 | ## Usage 33 | 34 | The module exports an object with several utility functions. 35 | 36 | ```js 37 | var Inflector = require('inflected'); 38 | 39 | Inflector.pluralize('Category') // => 'Categories' 40 | ``` 41 | 42 | If using ES modules, you can cherry-pick only the functions you're interested in: 43 | 44 | ```js 45 | import { pluralize } from 'inflected'; 46 | 47 | pluralize('Category') // => 'Categories' 48 | ``` 49 | 50 | Here is the complete API reference: 51 | 52 | 53 | ### Inflector.pluralize 54 | 55 | ```js 56 | string pluralize(string word[, string locale]) 57 | ``` 58 | 59 | Returns the plural form of the word in the string. 60 | 61 | If passed an optional `locale` parameter, the word will be pluralized using rules defined for that language. By default, this parameter is set to "en". 62 | 63 | ```js 64 | Inflector.pluralize('post') // => 'posts' 65 | Inflector.pluralize('octopus') // => 'octopi' 66 | Inflector.pluralize('sheep') // => 'sheep' 67 | Inflector.pluralize('words') // => 'words' 68 | Inflector.pluralize('CamelOctopus') // => 'CamelOctopi' 69 | Inflector.pluralize('ley', 'es') // => 'leyes' 70 | ``` 71 | 72 | 73 | ### Inflector.singularize 74 | 75 | ```js 76 | string singularize(string word[, string locale]) 77 | ``` 78 | 79 | The reverse of `pluralize`, returns the singular form of a word in a string. 80 | 81 | If passed an optional `locale` parameter, the word will be singularized using rules defined for that language. By default, this parameter is set to "en". 82 | 83 | ```js 84 | Inflector.singularize('posts') // => 'post' 85 | Inflector.singularize('octopi') // => 'octopus' 86 | Inflector.singularize('sheep') // => 'sheep' 87 | Inflector.singularize('word') // => 'word' 88 | Inflector.singularize('CamelOctopi') // => 'CamelOctopus' 89 | Inflector.singularize('leyes', 'es') // => 'ley' 90 | ``` 91 | 92 | 93 | ### Inflector.camelize 94 | 95 | ```js 96 | string camelize(string term[, boolean uppercaseFirstLetter]) 97 | ``` 98 | 99 | By default, `camelize` converts strings to UpperCamelCase. If the second argument is set to `false` then `camelize` produces lowerCamelCase. 100 | 101 | ```js 102 | Inflector.camelize('foo_bar') // => 'FooBar' 103 | Inflector.camelize('foo_bar', false) // => 'fooBar' 104 | ``` 105 | 106 | As a rule of thumb you can think of `camelize` as the inverse of `underscore`, though there are cases where that does not hold: 107 | 108 | ```js 109 | Inflector.camelize(Inflector.underscore('SSLError')) // => 'SslError' 110 | ``` 111 | 112 | ### Inflector.underscore 113 | 114 | ```js 115 | string underscore(string camelCasedWord) 116 | ``` 117 | 118 | Makes an underscored, lowercase form from the expression in the string. 119 | 120 | ```js 121 | Inflector.underscore('FooBar') // => 'foo_bar' 122 | ``` 123 | 124 | As a rule of thumb you can think of `underscore` as the inverse of `camelize`, though there are cases where that does not hold: 125 | 126 | ```js 127 | Inflector.camelize(Inflector.underscore('SSLError')) // => 'SslError' 128 | ``` 129 | 130 | 131 | ### Inflector.humanize 132 | 133 | ```js 134 | string humanize(string lowerCaseAndUnderscoredWord[, object options]) 135 | ``` 136 | 137 | Capitalizes the first word, turns underscores into spaces, and strips a trailing "_id" if present. 138 | 139 | Like `titleize`, this is meant for creating pretty output. 140 | 141 | The capitalization of the first word can be turned off by setting the `capitalize` option key to `false`. By default, this option is `true`. 142 | 143 | ```js 144 | Inflector.humanize('employee_salary') // => 'Employee salary' 145 | Inflector.humanize('author_id') // => 'Author' 146 | Inflector.humanize('author_id', { capitalize: false }) // => 'author' 147 | ``` 148 | 149 | 150 | ### Inflector.titleize 151 | 152 | ```js 153 | string titleize(string sentence) 154 | ``` 155 | 156 | Capitalizes all the words and replaces some characters in the string to create a nicer looking title. `titleize` is meant for creating pretty output. 157 | 158 | ```js 159 | Inflector.titleize('man from the boondocks') // => 'Man From The Boondocks' 160 | Inflector.titleize('x-men: the last stand') // => 'X Men: The Last Stand' 161 | Inflector.titleize('TheManWithoutAPast') // => 'The Man Without A Past' 162 | Inflector.titleize('raiders_of_the_lost_ark') // => 'Raiders Of The Lost Ark' 163 | ``` 164 | 165 | 166 | ### Inflector.tableize 167 | 168 | ```js 169 | string tableize(string className) 170 | ``` 171 | 172 | Create the name of a table like Rails does for models to table names. This method uses the `pluralize` method on the last word in the string. 173 | 174 | ```js 175 | Inflector.tableize('RawScaledScorer') // => 'raw_scaled_scorers' 176 | Inflector.tableize('egg_and_ham') // => 'egg_and_hams' 177 | Inflector.tableize('fancyCategory') // => 'fancy_categories' 178 | ``` 179 | 180 | 181 | ### Inflector.classify 182 | 183 | ```js 184 | string classify(string tableName) 185 | ``` 186 | 187 | Create a class name from a plural table name like Rails does for table names to models. 188 | 189 | ```js 190 | Inflector.classify('egg_and_hams') // => 'EggAndHam' 191 | Inflector.classify('posts') // => 'Post' 192 | ``` 193 | 194 | Singular names are not handled correctly: 195 | 196 | ```js 197 | Inflector.classify('business') // => 'Busines' 198 | ``` 199 | 200 | 201 | ### Inflector.dasherize 202 | 203 | ```js 204 | string dasherize(string underscoredWord) 205 | ``` 206 | 207 | Replaces underscores with dashes in the string. 208 | 209 | ```js 210 | Inflector.dasherize('puni_puni') // => 'puni-puni' 211 | ``` 212 | 213 | 214 | ### Inflector.foreignKey 215 | 216 | ```js 217 | string foreignKey(string className[, boolean separateClassNameAndIdWithUnderscore]) 218 | ``` 219 | 220 | Creates a foreign key name from a class name. `separateClassNameAndIdWithUnderscore` sets whether the method should put "_" between the name and "id" (default: `true`). 221 | 222 | ```js 223 | Inflector.foreignKey('Message') // => 'message_id' 224 | Inflector.foreignKey('Message', false) // => 'messageid' 225 | ``` 226 | 227 | 228 | ### Inflector.ordinal 229 | 230 | ```js 231 | string ordinal(object number) 232 | ``` 233 | 234 | Returns the suffix that should be added to a number to denote the position in an ordered sequence such as 1st, 2nd, 3rd, 4th. 235 | 236 | ```js 237 | Inflector.ordinal(1) // => 'st' 238 | Inflector.ordinal(2) // => 'nd' 239 | Inflector.ordinal(1002) // => 'nd' 240 | Inflector.ordinal(1003) // => 'rd' 241 | Inflector.ordinal(-11) // => 'th' 242 | Inflector.ordinal(-1021) // => 'st' 243 | ``` 244 | 245 | 246 | ### Inflector.ordinalize 247 | 248 | ```js 249 | string ordinalize(object number) 250 | ``` 251 | 252 | Turns a number into an ordinal string used to denote the position in an ordered sequence such as 1st, 2nd, 3rd, 4th. 253 | 254 | ```js 255 | Inflector.ordinalize(1) // => '1st' 256 | Inflector.ordinalize(2) // => '2nd' 257 | Inflector.ordinalize(1002) // => '1002nd' 258 | Inflector.ordinalize(1003) // => '1003rd' 259 | Inflector.ordinalize(-11) // => '-11th' 260 | Inflector.ordinalize(-1021) // => '-1021st' 261 | ``` 262 | 263 | 264 | ### Inflector.inflections 265 | 266 | ```js 267 | Inflections inflections([string locale]) 268 | inflections([string locale], [function(Inflections) fn]) 269 | ``` 270 | 271 | A singleton instance of the internal Inflections class is yielded by this function, which can then be used to specify additional inflection rules. If passed an optional locale, rules for other languages can be specified. The default locale is "en". Only rules for English are provided by this library. 272 | 273 | ```js 274 | Inflector.inflections('en', function(inflect) { 275 | inflect.plural(/^(ox)$/i, '$1$2en'); 276 | inflect.singular /^(ox)en/i, '$1'); 277 | 278 | inflect.irregular('octopus', 'octopi'); 279 | 280 | inflect.uncountable('equipment', 'snow'); 281 | }); 282 | ``` 283 | 284 | New rules are added at the top. So in the example above, the irregular rule for octopus will now be the first of the pluralization and singularization rules that is run. This guarantees that your rules run before any of the rules that may already have been loaded. 285 | 286 | 287 | ### Inflector.transliterate 288 | 289 | ```js 290 | string transliterate(string sentence[, object options]) 291 | ``` 292 | 293 | Replaces non-ASCII characters with an ASCII approximation, or if none exists, a replacement character which defaults to "?". 294 | 295 | ```js 296 | Inflector.transliterate('Ærøskøbing') // => 'AEroskobing' 297 | ``` 298 | 299 | Default approximations are provided for Western/Latin characters, e.g, "ø", "ñ", "é", "ß", etc. 300 | 301 | This method is I18n-aware, so you can set up custom approximations for a locale. This can be useful, for example, to transliterate German's "ü" and "ö" to "ue" and "oe", or to add support for transliterating Russian to ASCII. 302 | 303 | In order to make your custom transliterations available, you must set them using the `approximate` helper function: 304 | 305 | ```js 306 | Inflector.transliterations('de', function(t) { 307 | t.approximate('ü', 'ue'); 308 | t.approximate('ö', 'oe'); 309 | }); 310 | ``` 311 | 312 | Now you can have different transliterations for each locale: 313 | 314 | ```js 315 | Inflector.transliterate('Jürgen') // => 'Jurgen' 316 | Inflector.transliterate('Jürgen', { locale: 'de' }) // => 'Juergen' 317 | ``` 318 | 319 | 320 | ### Inflector.parameterize 321 | 322 | ```js 323 | string parameterize(string sentence[, object options]) 324 | ``` 325 | 326 | Replaces special characters in a string so that it may be used as part of a 'pretty' URL. 327 | 328 | ```js 329 | Inflector.parameterize('Donald E. Knuth') // => 'donald-e-knuth' 330 | Inflector.parameterize('Donald E. Knuth', { separator: '+' }) // => 'donald+e+knuth' 331 | ``` 332 | 333 | As of v2.1, there's also a `preserveCase` option: 334 | 335 | ```js 336 | Inflector.parameterize('Donald E. Knuth', { preserveCase: true }) // => 'Donald-E-Knuth' 337 | ``` 338 | 339 | 340 | ### Inflector.constantify 341 | 342 | ```js 343 | string constantify(string words) 344 | ``` 345 | 346 | Converts words (camelCased, under_scored, or dasherized) to CONSTANT_CASE. 347 | 348 | ```js 349 | Inflector.constantify('bankAccount') // => 'BANK_ACCOUNT' 350 | Inflector.constantify('bank-account') // => 'BANK_ACCOUNT' 351 | Inflector.constantify('bank_account') // => 'BANK_ACCOUNT' 352 | Inflector.constantify('Bank Account') // => 'BANK_ACCOUNT' 353 | ``` 354 | 355 | 356 | 357 | ## Contributing 358 | 359 | Here's a quick guide: 360 | 361 | 1. Fork the repo and `make install`. 362 | 2. Run the tests. We only take pull requests with passing tests, and it's great to know that you have a clean slate: `make test`. 363 | 3. Add a test for your change. Only refactoring and documentation changes require no new tests. If you are adding functionality or are fixing a bug, we need a test! 364 | 4. Make the test pass. 365 | 5. Push to your fork and submit a pull request. 366 | 367 | 368 | ## Licence 369 | 370 | Released under The MIT License. 371 | -------------------------------------------------------------------------------- /test/index.js: -------------------------------------------------------------------------------- 1 | const assert = require('assert'); 2 | const extend = require('object-assign'); 3 | 4 | const Inflector = require('../dist/umd/inflected'); 5 | const inflect = Inflector.inflections(); 6 | 7 | const TestCases = require('./cases'); 8 | 9 | function objEach(obj, fn) { 10 | for (let key in obj) { 11 | if (Object.prototype.hasOwnProperty.call(obj, key)) { 12 | fn(key, obj[key]); 13 | } 14 | } 15 | } 16 | 17 | describe('Inflector', () => { 18 | it('properly pluralizes plurals', () => { 19 | assert.equal(Inflector.pluralize('plurals'), 'plurals'); 20 | assert.equal(Inflector.pluralize('Plurals'), 'Plurals'); 21 | }); 22 | 23 | it('properly pluralizes empty string', () => { 24 | assert.equal(Inflector.pluralize(''), ''); 25 | }); 26 | 27 | it('properly capitalizes strings', () => { 28 | assert.equal(Inflector.capitalize('foo'), 'Foo'); 29 | assert.equal(Inflector.capitalize('FOO'), 'FOO'); 30 | assert.equal(Inflector.capitalize('foo bar'), 'Foo bar'); 31 | assert.equal(Inflector.capitalize(123), '123'); 32 | assert.equal(Inflector.capitalize(''), ''); 33 | assert.equal(Inflector.capitalize(null), ''); 34 | assert.equal(Inflector.capitalize(undefined), ''); 35 | }); 36 | 37 | inflect.uncountables.forEach(function(word) { 38 | it('respects the uncountability of ' + word, () => { 39 | assert.equal(Inflector.singularize(word), word); 40 | assert.equal(Inflector.pluralize(word), word); 41 | assert.equal(Inflector.singularize(word), Inflector.pluralize(word)); 42 | }); 43 | }); 44 | 45 | it('checks uncountable word is not greedy', () => { 46 | const uncountableWord = 'ors'; 47 | const countableWord = 'sponsor'; 48 | 49 | inflect.uncountables.push(uncountableWord); 50 | 51 | assert.equal(Inflector.singularize(uncountableWord), uncountableWord); 52 | assert.equal(Inflector.pluralize(uncountableWord), uncountableWord); 53 | assert.equal(Inflector.singularize(uncountableWord), Inflector.pluralize(uncountableWord)); 54 | 55 | assert.equal(Inflector.singularize(countableWord), 'sponsor'); 56 | assert.equal(Inflector.pluralize(countableWord), 'sponsors'); 57 | assert.equal(Inflector.singularize(Inflector.pluralize(countableWord)), 'sponsor'); 58 | }); 59 | 60 | objEach(TestCases.SingularToPlural, function(singular, plural) { 61 | it('properly pluralizes ' + singular, () => { 62 | assert.equal(Inflector.pluralize(singular), plural); 63 | assert.equal(Inflector.pluralize(Inflector.capitalize(singular)), Inflector.capitalize(plural)); 64 | }); 65 | 66 | it('properly pluralizes ' + plural, () => { 67 | assert.equal(Inflector.pluralize(plural), plural); 68 | assert.equal(Inflector.pluralize(Inflector.capitalize(plural)), Inflector.capitalize(plural)); 69 | }); 70 | 71 | it('properly singularizes ' + plural, () => { 72 | assert.equal(Inflector.singularize(plural), singular); 73 | assert.equal(Inflector.singularize(Inflector.capitalize(plural)), Inflector.capitalize(singular)); 74 | }); 75 | 76 | it('properly singularizes ' + singular, () => { 77 | assert.equal(Inflector.singularize(singular), singular); 78 | assert.equal(Inflector.singularize(Inflector.capitalize(singular)), Inflector.capitalize(singular)); 79 | }); 80 | }); 81 | 82 | it('allows overwriting defined inflectors', () => { 83 | assert.equal(Inflector.singularize('series'), 'series'); 84 | inflect.singular('series', 'serie'); 85 | assert.equal(Inflector.singularize('series'), 'serie'); 86 | }); 87 | 88 | objEach(TestCases.MixtureToTitleCase, function(mixture, titleized) { 89 | it('properly titleizes ' + mixture, () => { 90 | assert.equal(Inflector.titleize(mixture), titleized); 91 | }); 92 | }); 93 | 94 | objEach(TestCases.CamelToUnderscore, function(camel, underscore) { 95 | it('properly camelizes ' + underscore, () => { 96 | assert.equal(Inflector.camelize(underscore), camel); 97 | }); 98 | }); 99 | 100 | it('properly camelizes with lower downcases the first letter', () => { 101 | assert.equal(Inflector.camelize('Capital', false), 'capital'); 102 | }); 103 | 104 | it('properly camelizes with underscores', () => { 105 | assert.equal(Inflector.camelize('Camel_Case'), 'CamelCase'); 106 | }); 107 | 108 | it('properly handles acronyms', () => { 109 | inflect.acronym('API') 110 | inflect.acronym('HTML') 111 | inflect.acronym('HTTP') 112 | inflect.acronym('RESTful') 113 | inflect.acronym('W3C') 114 | inflect.acronym('PhD') 115 | inflect.acronym('RoR') 116 | inflect.acronym('SSL') 117 | 118 | // camelize underscore humanize titleize 119 | const items = [ 120 | ['API', 'api', 'API', 'API'], 121 | ['APIController', 'api_controller', 'API controller', 'API Controller'], 122 | ['Nokogiri/HTML', 'nokogiri/html', 'Nokogiri/HTML', 'Nokogiri/HTML'], 123 | ['HTTPAPI', 'http_api', 'HTTP API', 'HTTP API'], 124 | ['HTTP/Get', 'http/get', 'HTTP/get', 'HTTP/Get'], 125 | ['SSLError', 'ssl_error', 'SSL error', 'SSL Error'], 126 | ['RESTful', 'restful', 'RESTful', 'RESTful'], 127 | ['RESTfulController', 'restful_controller', 'RESTful controller', 'RESTful Controller'], 128 | ['IHeartW3C', 'i_heart_w3c', 'I heart W3C', 'I Heart W3C'], 129 | ['PhDRequired', 'phd_required', 'PhD required', 'PhD Required'], 130 | ['IRoRU', 'i_ror_u', 'I RoR u', 'I RoR U'], 131 | ['RESTfulHTTPAPI', 'restful_http_api', 'RESTful HTTP API', 'RESTful HTTP API'], 132 | 133 | // misdirection 134 | ['Capistrano', 'capistrano', 'Capistrano', 'Capistrano'], 135 | ['CapiController', 'capi_controller', 'Capi controller', 'Capi Controller'], 136 | ['HttpsApis', 'https_apis', 'Https apis', 'Https Apis'], 137 | ['Html5', 'html5', 'Html5', 'Html5'], 138 | ['Restfully', 'restfully', 'Restfully', 'Restfully'], 139 | ['RoRails', 'ro_rails', 'Ro rails', 'Ro Rails'] 140 | ]; 141 | 142 | let camel, under, human, title; 143 | 144 | for (let i in items) { 145 | camel = items[i][0]; 146 | under = items[i][1]; 147 | human = items[i][2]; 148 | title = items[i][3]; 149 | 150 | assert.equal(Inflector.camelize(under), camel); 151 | assert.equal(Inflector.camelize(camel), camel); 152 | assert.equal(Inflector.underscore(under), under); 153 | assert.equal(Inflector.underscore(camel), under); 154 | assert.equal(Inflector.titleize(under), title); 155 | assert.equal(Inflector.titleize(camel), title); 156 | assert.equal(Inflector.humanize(under), human); 157 | } 158 | }); 159 | 160 | it('allows overwriting acronyms', () => { 161 | inflect.acronym('API'); 162 | inflect.acronym('LegacyApi'); 163 | 164 | assert.equal(Inflector.camelize('legacyapi'), 'LegacyApi'); 165 | assert.equal(Inflector.camelize('legacy_api'), 'LegacyAPI'); 166 | assert.equal(Inflector.camelize('some_legacyapi'), 'SomeLegacyApi'); 167 | assert.equal(Inflector.camelize('nonlegacyapi'), 'Nonlegacyapi'); 168 | }); 169 | 170 | it('properly handles lower camelized acronyms', () => { 171 | inflect.acronym('API'); 172 | inflect.acronym('HTML'); 173 | 174 | assert.equal(Inflector.camelize('html_api', false), 'htmlAPI'); 175 | assert.equal(Inflector.camelize('htmlAPI', false), 'htmlAPI'); 176 | assert.equal(Inflector.camelize('HTMLAPI', false), 'htmlAPI'); 177 | }); 178 | 179 | it('properly handles lower camelized acronyms', () => { 180 | inflect.acronym('API'); 181 | inflect.acronym('JSON'); 182 | inflect.acronym('HTML'); 183 | 184 | assert.equal(Inflector.underscore('JSONHTMLAPI'), 'json_html_api'); 185 | }); 186 | 187 | it('properly underscores', () => { 188 | objEach(TestCases.CamelToUnderscore, function(camel, underscore) { 189 | assert.equal(Inflector.underscore(camel), underscore); 190 | }); 191 | 192 | objEach(TestCases.CamelToUnderscoreWithoutReverse, function(camel, underscore) { 193 | assert.equal(Inflector.underscore(camel), underscore); 194 | }); 195 | }); 196 | 197 | it('properly adds a foreign key suffix', () => { 198 | objEach(TestCases.ClassNameToForeignKeyWithUnderscore, function(klass, foreignKey) { 199 | assert.equal(Inflector.foreignKey(klass), foreignKey); 200 | }); 201 | 202 | objEach(TestCases.ClassNameToForeignKeyWithoutUnderscore, function(klass, foreignKey) { 203 | assert.equal(Inflector.foreignKey(klass, false), foreignKey); 204 | }); 205 | }); 206 | 207 | it('properly tableizes class names', () => { 208 | objEach(TestCases.ClassNameToTableName, function(className, tableName) { 209 | assert.equal(Inflector.tableize(className), tableName); 210 | }); 211 | }); 212 | 213 | it('properly classifies table names', () => { 214 | objEach(TestCases.ClassNameToTableName, function(className, tableName) { 215 | assert.equal(Inflector.classify(tableName), className); 216 | assert.equal(Inflector.classify('table_prefix.' + tableName), className); 217 | }); 218 | }); 219 | 220 | it('properly classifies with leading schema name', () => { 221 | assert.equal(Inflector.classify('schema.foo_bar'), 'FooBar'); 222 | }); 223 | 224 | it('properly humanizes underscored strings', () => { 225 | objEach(TestCases.UnderscoreToHuman, function(underscore, human) { 226 | assert.equal(Inflector.humanize(underscore), human); 227 | }); 228 | }); 229 | 230 | it('properly humanizes underscored strings without capitalize', () => { 231 | objEach(TestCases.UnderscoreToHumanWithoutCapitalize, function(underscore, human) { 232 | assert.equal(Inflector.humanize(underscore, { capitalize: false }), human); 233 | }); 234 | }); 235 | 236 | it('properly humanizes by rule', () => { 237 | inflect.human(/_cnt$/i, '_count'); 238 | inflect.human(/^prefx_/i, ''); 239 | 240 | assert.equal(Inflector.humanize('jargon_cnt'), 'Jargon count'); 241 | assert.equal(Inflector.humanize('prefx_request'), 'Request'); 242 | }); 243 | 244 | it('properly humanizes by string', () => { 245 | inflect.human('col_rpted_bugs', 'Reported bugs'); 246 | 247 | assert.equal(Inflector.humanize('col_rpted_bugs'), 'Reported bugs'); 248 | assert.equal(Inflector.humanize('COL_rpted_bugs'), 'Col rpted bugs'); 249 | }); 250 | 251 | it('properly generates ordinal suffixes', () => { 252 | objEach(TestCases.OrdinalNumbers, function(number, ordinalized) { 253 | assert.equal(ordinalized, number + Inflector.ordinal(number)) 254 | }); 255 | }); 256 | 257 | it('properly ordinalizes numbers', () => { 258 | objEach(TestCases.OrdinalNumbers, function(number, ordinalized) { 259 | assert.equal(Inflector.ordinalize(number), ordinalized); 260 | }); 261 | }); 262 | 263 | it('properly dasherizes underscored strings', () => { 264 | objEach(TestCases.UnderscoresToDashes, function(underscored, dasherized) { 265 | assert.equal(Inflector.dasherize(underscored), dasherized); 266 | }); 267 | }); 268 | 269 | it('properly underscores as reverse of dasherize', () => { 270 | objEach(TestCases.UnderscoresToDashes, function(underscored) { 271 | assert.equal(Inflector.underscore(Inflector.dasherize(underscored)), underscored); 272 | }); 273 | }); 274 | 275 | it('properly underscores to lower camel', () => { 276 | objEach(TestCases.UnderscoreToLowerCamel, function(underscored, lowerCamel) { 277 | assert.equal(Inflector.camelize(underscored, false), lowerCamel); 278 | }); 279 | }); 280 | 281 | it('respects the inflector locale', () => { 282 | Inflector.inflections('es', function(inflect) { 283 | inflect.plural(/$/, 's'); 284 | inflect.plural(/z$/i, 'ces'); 285 | 286 | inflect.singular(/s$/, ''); 287 | inflect.singular(/es$/, ''); 288 | 289 | inflect.irregular('el', 'los'); 290 | }); 291 | 292 | assert.equal(Inflector.pluralize('hijo', 'es'), 'hijos'); 293 | assert.equal(Inflector.pluralize('luz', 'es'), 'luces'); 294 | assert.equal(Inflector.pluralize('luz'), 'luzs'); 295 | 296 | assert.equal(Inflector.singularize('sociedades', 'es'), 'sociedad'); 297 | assert.equal(Inflector.singularize('sociedades'), 'sociedade'); 298 | 299 | assert.equal(Inflector.pluralize('el', 'es'), 'los'); 300 | assert.equal(Inflector.pluralize('el'), 'els'); 301 | 302 | Inflector.inflections('es', function(inflect) { 303 | inflect.clear(); 304 | }); 305 | 306 | assert(Inflector.inflections('es').plurals.length === 0); 307 | assert(Inflector.inflections('es').singulars.length === 0); 308 | assert(Inflector.inflections().plurals.length !== 0); 309 | assert(Inflector.inflections().singulars.length !== 0); 310 | }); 311 | 312 | objEach(TestCases.Irregularities, function(singular, plural) { 313 | it('respects the irregularity between ' + singular + ' and ' + plural, () => { 314 | Inflector.inflections(function(inflect) { 315 | inflect.irregular(singular, plural) 316 | assert.equal(Inflector.singularize(plural), singular); 317 | assert.equal(Inflector.pluralize(singular), plural); 318 | }); 319 | }); 320 | }); 321 | 322 | objEach(TestCases.Irregularities, function(singular, plural) { 323 | it('makes sure that pluralize of irregularity ' + plural + ' is the same', () => { 324 | Inflector.inflections(function(inflect) { 325 | inflect.irregular(singular, plural) 326 | assert.equal(Inflector.pluralize(plural), plural); 327 | }); 328 | }); 329 | }); 330 | 331 | objEach(TestCases.Irregularities, function(singular, plural) { 332 | it('makes sure that singularize of irregularity ' + singular + ' is the same', () => { 333 | Inflector.inflections(function(inflect) { 334 | inflect.irregular(singular, plural) 335 | assert.equal(Inflector.singularize(singular), singular); 336 | }); 337 | }); 338 | }); 339 | 340 | ['plurals', 'singulars', 'uncountables', 'humans', 'acronyms'].forEach(function(scope) { 341 | it('properly clears ' + scope + ' inflection scope', () => { 342 | inflect.clear(scope); 343 | assert(inflect[scope].length === 0); 344 | }); 345 | }); 346 | 347 | it('properly clears all reflection scopes', () => { 348 | Inflector.inflections(function(inflect) { 349 | // ensure any data is present 350 | inflect.plural(/(quiz)$/i, '$1zes'); 351 | inflect.singular(/(database)s$/i, '$1'); 352 | inflect.uncountable('series'); 353 | inflect.human('col_rpted_bugs', 'Reported bugs'); 354 | 355 | inflect.clear('all'); 356 | 357 | assert(inflect.plurals.length === 0); 358 | assert(inflect.singulars.length === 0); 359 | assert(inflect.uncountables.length === 0); 360 | assert(inflect.humans.length === 0); 361 | }); 362 | }); 363 | 364 | it('properly clears with default', () => { 365 | Inflector.inflections(function(inflect) { 366 | // ensure any data is present 367 | inflect.plural(/(quiz)$/i, '$1zes'); 368 | inflect.singular(/(database)s$/i, '$1'); 369 | inflect.uncountable('series'); 370 | inflect.human('col_rpted_bugs', 'Reported bugs'); 371 | 372 | inflect.clear(); 373 | 374 | assert(inflect.plurals.length === 0); 375 | assert(inflect.singulars.length === 0); 376 | assert(inflect.uncountables.length === 0); 377 | assert(inflect.humans.length === 0); 378 | }); 379 | }); 380 | 381 | it('properly parameterizes', () => { 382 | objEach(TestCases.StringToParameterized, function(someString, parameterizedString) { 383 | assert.equal(Inflector.parameterize(someString), parameterizedString); 384 | }); 385 | }); 386 | 387 | it('properly parameterizes and normalizes', () => { 388 | objEach(TestCases.StringToParameterizedAndNormalized, function(someString, parameterizedString) { 389 | assert.equal(Inflector.parameterize(someString), parameterizedString); 390 | }); 391 | }); 392 | 393 | it('properly parameterizes with custom separator', () => { 394 | objEach(TestCases.StringToParameterizeWithUnderscore, function(someString, parameterizedString) { 395 | assert.equal(Inflector.parameterize(someString, { separator: '_' }), parameterizedString); 396 | }); 397 | }); 398 | 399 | it('properly parameterizes with no separator', () => { 400 | objEach(TestCases.StringToParameterizeWithNoSeparator, function(someString, parameterizedString) { 401 | assert.equal(Inflector.parameterize(someString, { separator: null }), parameterizedString); 402 | assert.equal(Inflector.parameterize(someString, { separator: '' }), parameterizedString); 403 | }); 404 | }); 405 | 406 | it('properly parameterizes with preserve-case option', () => { 407 | objEach(TestCases.StringToParameterizeWithPreserveCase, function(someString, parameterizedString) { 408 | assert.equal(Inflector.parameterize(someString, { preserveCase: true }), parameterizedString); 409 | }); 410 | }); 411 | 412 | it('properly parameterizes with multi character separator', () => { 413 | objEach(TestCases.StringToParameterized, function(someString, parameterizedString) { 414 | assert.equal(Inflector.parameterize(someString, { separator: '__sep__' }), parameterizedString.replace(/-/g, '__sep__')); 415 | }); 416 | }); 417 | 418 | it('allows overwriting transliterate approximations', () => { 419 | assert.equal(Inflector.parameterize('Jürgen'), 'jurgen'); 420 | 421 | Inflector.transliterations((transliterate) => { 422 | transliterate.approximate('ü', 'ue'); 423 | }); 424 | 425 | assert.equal(Inflector.parameterize('Jürgen'), 'juergen'); 426 | }); 427 | 428 | it('allows overwriting transliterate approximations for a specific locale', () => { 429 | assert.equal(Inflector.parameterize('Mädchen'), 'madchen'); 430 | assert.equal(Inflector.parameterize('Mädchen', { locale: 'de' }), 'madchen'); 431 | 432 | Inflector.transliterations('de', (transliterate) => { 433 | transliterate.approximate('ä', 'ae'); 434 | }); 435 | 436 | assert.equal(Inflector.parameterize('Mädchen'), 'madchen'); 437 | assert.equal(Inflector.parameterize('Mädchen', { locale: 'de' }), 'maedchen'); 438 | }); 439 | 440 | it('properly converts words to constant case', () => { 441 | objEach(TestCases.WordsToConstantCase, function(words, constantCase) { 442 | assert.equal(Inflector.constantify(words), constantCase); 443 | }); 444 | }); 445 | }); 446 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@^7.0.0": 6 | version "7.10.4" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" 8 | integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== 9 | dependencies: 10 | "@babel/highlight" "^7.10.4" 11 | 12 | "@babel/helper-validator-identifier@^7.10.4": 13 | version "7.10.4" 14 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" 15 | integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== 16 | 17 | "@babel/highlight@^7.10.4": 18 | version "7.10.4" 19 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" 20 | integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== 21 | dependencies: 22 | "@babel/helper-validator-identifier" "^7.10.4" 23 | chalk "^2.0.0" 24 | js-tokens "^4.0.0" 25 | 26 | "@types/color-name@^1.1.1": 27 | version "1.1.1" 28 | resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" 29 | integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== 30 | 31 | "@types/normalize-package-data@^2.4.0": 32 | version "2.4.0" 33 | resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" 34 | integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== 35 | 36 | acorn-jsx@^3.0.0: 37 | version "3.0.1" 38 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" 39 | dependencies: 40 | acorn "^3.0.4" 41 | 42 | acorn@^3.0.4: 43 | version "3.3.0" 44 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" 45 | 46 | acorn@^5.5.0: 47 | version "5.7.4" 48 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" 49 | 50 | ajv-keywords@^2.1.0: 51 | version "2.1.1" 52 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" 53 | 54 | ajv@^5.2.3, ajv@^5.3.0: 55 | version "5.5.2" 56 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" 57 | dependencies: 58 | co "^4.6.0" 59 | fast-deep-equal "^1.0.0" 60 | fast-json-stable-stringify "^2.0.0" 61 | json-schema-traverse "^0.3.0" 62 | 63 | align-text@^0.1.1, align-text@^0.1.3: 64 | version "0.1.4" 65 | resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" 66 | dependencies: 67 | kind-of "^3.0.2" 68 | longest "^1.0.1" 69 | repeat-string "^1.5.2" 70 | 71 | ansi-escapes@^1.0.0: 72 | version "1.4.0" 73 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" 74 | 75 | ansi-escapes@^3.0.0: 76 | version "3.2.0" 77 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" 78 | 79 | ansi-regex@^2.0.0: 80 | version "2.1.1" 81 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 82 | 83 | ansi-regex@^3.0.0: 84 | version "3.0.0" 85 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 86 | 87 | ansi-styles@^2.2.1: 88 | version "2.2.1" 89 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 90 | 91 | ansi-styles@^3.0.0: 92 | version "3.0.0" 93 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.0.0.tgz#5404e93a544c4fec7f048262977bebfe3155e0c1" 94 | dependencies: 95 | color-convert "^1.0.0" 96 | 97 | ansi-styles@^3.2.1: 98 | version "3.2.1" 99 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 100 | dependencies: 101 | color-convert "^1.9.0" 102 | 103 | ansi-styles@^4.1.0: 104 | version "4.2.1" 105 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" 106 | integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== 107 | dependencies: 108 | "@types/color-name" "^1.1.1" 109 | color-convert "^2.0.1" 110 | 111 | app-root-path@^2.0.0: 112 | version "2.0.1" 113 | resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.0.1.tgz#cd62dcf8e4fd5a417efc664d2e5b10653c651b46" 114 | 115 | argparse@^1.0.7: 116 | version "1.0.9" 117 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" 118 | dependencies: 119 | sprintf-js "~1.0.2" 120 | 121 | array-union@^1.0.1: 122 | version "1.0.2" 123 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" 124 | dependencies: 125 | array-uniq "^1.0.1" 126 | 127 | array-uniq@^1.0.1: 128 | version "1.0.3" 129 | resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" 130 | 131 | arrify@^1.0.0: 132 | version "1.0.1" 133 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" 134 | 135 | ast-types@0.9.8: 136 | version "0.9.8" 137 | resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.8.tgz#6cb6a40beba31f49f20928e28439fc14a3dab078" 138 | 139 | axios@^0.19.0: 140 | version "0.19.2" 141 | resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" 142 | integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== 143 | dependencies: 144 | follow-redirects "1.5.10" 145 | 146 | babel-code-frame@6.22.0, babel-code-frame@^6.22.0: 147 | version "6.22.0" 148 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" 149 | dependencies: 150 | chalk "^1.1.0" 151 | esutils "^2.0.2" 152 | js-tokens "^3.0.0" 153 | 154 | babel-core@6, babel-core@^6.24.1: 155 | version "6.24.1" 156 | resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.24.1.tgz#8c428564dce1e1f41fb337ec34f4c3b022b5ad83" 157 | dependencies: 158 | babel-code-frame "^6.22.0" 159 | babel-generator "^6.24.1" 160 | babel-helpers "^6.24.1" 161 | babel-messages "^6.23.0" 162 | babel-register "^6.24.1" 163 | babel-runtime "^6.22.0" 164 | babel-template "^6.24.1" 165 | babel-traverse "^6.24.1" 166 | babel-types "^6.24.1" 167 | babylon "^6.11.0" 168 | convert-source-map "^1.1.0" 169 | debug "^2.1.1" 170 | json5 "^0.5.0" 171 | lodash "^4.2.0" 172 | minimatch "^3.0.2" 173 | path-is-absolute "^1.0.0" 174 | private "^0.1.6" 175 | slash "^1.0.0" 176 | source-map "^0.5.0" 177 | 178 | babel-eslint@^7.2.2: 179 | version "7.2.2" 180 | resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.2.2.tgz#0da2cbe6554fd0fb069f19674f2db2f9c59270ff" 181 | dependencies: 182 | babel-code-frame "^6.22.0" 183 | babel-traverse "^6.23.1" 184 | babel-types "^6.23.0" 185 | babylon "^6.16.1" 186 | 187 | babel-generator@^6.24.1: 188 | version "6.24.1" 189 | resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.24.1.tgz#e715f486c58ded25649d888944d52aa07c5d9497" 190 | dependencies: 191 | babel-messages "^6.23.0" 192 | babel-runtime "^6.22.0" 193 | babel-types "^6.24.1" 194 | detect-indent "^4.0.0" 195 | jsesc "^1.3.0" 196 | lodash "^4.2.0" 197 | source-map "^0.5.0" 198 | trim-right "^1.0.1" 199 | 200 | babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: 201 | version "6.24.1" 202 | resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" 203 | dependencies: 204 | babel-helper-explode-assignable-expression "^6.24.1" 205 | babel-runtime "^6.22.0" 206 | babel-types "^6.24.1" 207 | 208 | babel-helper-call-delegate@^6.24.1: 209 | version "6.24.1" 210 | resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" 211 | dependencies: 212 | babel-helper-hoist-variables "^6.24.1" 213 | babel-runtime "^6.22.0" 214 | babel-traverse "^6.24.1" 215 | babel-types "^6.24.1" 216 | 217 | babel-helper-define-map@^6.24.1: 218 | version "6.24.1" 219 | resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.24.1.tgz#7a9747f258d8947d32d515f6aa1c7bd02204a080" 220 | dependencies: 221 | babel-helper-function-name "^6.24.1" 222 | babel-runtime "^6.22.0" 223 | babel-types "^6.24.1" 224 | lodash "^4.2.0" 225 | 226 | babel-helper-explode-assignable-expression@^6.24.1: 227 | version "6.24.1" 228 | resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" 229 | dependencies: 230 | babel-runtime "^6.22.0" 231 | babel-traverse "^6.24.1" 232 | babel-types "^6.24.1" 233 | 234 | babel-helper-function-name@^6.24.1: 235 | version "6.24.1" 236 | resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" 237 | dependencies: 238 | babel-helper-get-function-arity "^6.24.1" 239 | babel-runtime "^6.22.0" 240 | babel-template "^6.24.1" 241 | babel-traverse "^6.24.1" 242 | babel-types "^6.24.1" 243 | 244 | babel-helper-get-function-arity@^6.24.1: 245 | version "6.24.1" 246 | resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" 247 | dependencies: 248 | babel-runtime "^6.22.0" 249 | babel-types "^6.24.1" 250 | 251 | babel-helper-hoist-variables@^6.24.1: 252 | version "6.24.1" 253 | resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" 254 | dependencies: 255 | babel-runtime "^6.22.0" 256 | babel-types "^6.24.1" 257 | 258 | babel-helper-optimise-call-expression@^6.24.1: 259 | version "6.24.1" 260 | resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" 261 | dependencies: 262 | babel-runtime "^6.22.0" 263 | babel-types "^6.24.1" 264 | 265 | babel-helper-regex@^6.24.1: 266 | version "6.24.1" 267 | resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.24.1.tgz#d36e22fab1008d79d88648e32116868128456ce8" 268 | dependencies: 269 | babel-runtime "^6.22.0" 270 | babel-types "^6.24.1" 271 | lodash "^4.2.0" 272 | 273 | babel-helper-remap-async-to-generator@^6.24.1: 274 | version "6.24.1" 275 | resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" 276 | dependencies: 277 | babel-helper-function-name "^6.24.1" 278 | babel-runtime "^6.22.0" 279 | babel-template "^6.24.1" 280 | babel-traverse "^6.24.1" 281 | babel-types "^6.24.1" 282 | 283 | babel-helper-replace-supers@^6.24.1: 284 | version "6.24.1" 285 | resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" 286 | dependencies: 287 | babel-helper-optimise-call-expression "^6.24.1" 288 | babel-messages "^6.23.0" 289 | babel-runtime "^6.22.0" 290 | babel-template "^6.24.1" 291 | babel-traverse "^6.24.1" 292 | babel-types "^6.24.1" 293 | 294 | babel-helpers@^6.24.1: 295 | version "6.24.1" 296 | resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" 297 | dependencies: 298 | babel-runtime "^6.22.0" 299 | babel-template "^6.24.1" 300 | 301 | babel-messages@^6.23.0: 302 | version "6.23.0" 303 | resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" 304 | dependencies: 305 | babel-runtime "^6.22.0" 306 | 307 | babel-plugin-check-es2015-constants@^6.22.0: 308 | version "6.22.0" 309 | resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" 310 | dependencies: 311 | babel-runtime "^6.22.0" 312 | 313 | babel-plugin-external-helpers@^6.22.0: 314 | version "6.22.0" 315 | resolved "https://registry.yarnpkg.com/babel-plugin-external-helpers/-/babel-plugin-external-helpers-6.22.0.tgz#2285f48b02bd5dede85175caf8c62e86adccefa1" 316 | dependencies: 317 | babel-runtime "^6.22.0" 318 | 319 | babel-plugin-syntax-async-functions@^6.8.0: 320 | version "6.13.0" 321 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" 322 | 323 | babel-plugin-syntax-class-properties@^6.8.0: 324 | version "6.13.0" 325 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" 326 | 327 | babel-plugin-syntax-exponentiation-operator@^6.8.0: 328 | version "6.13.0" 329 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" 330 | 331 | babel-plugin-syntax-trailing-function-commas@^6.22.0: 332 | version "6.22.0" 333 | resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" 334 | 335 | babel-plugin-transform-async-to-generator@^6.24.1: 336 | version "6.24.1" 337 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" 338 | dependencies: 339 | babel-helper-remap-async-to-generator "^6.24.1" 340 | babel-plugin-syntax-async-functions "^6.8.0" 341 | babel-runtime "^6.22.0" 342 | 343 | babel-plugin-transform-class-properties@^6.24.1: 344 | version "6.24.1" 345 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" 346 | dependencies: 347 | babel-helper-function-name "^6.24.1" 348 | babel-plugin-syntax-class-properties "^6.8.0" 349 | babel-runtime "^6.22.0" 350 | babel-template "^6.24.1" 351 | 352 | babel-plugin-transform-es2015-arrow-functions@^6.22.0: 353 | version "6.22.0" 354 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" 355 | dependencies: 356 | babel-runtime "^6.22.0" 357 | 358 | babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: 359 | version "6.22.0" 360 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" 361 | dependencies: 362 | babel-runtime "^6.22.0" 363 | 364 | babel-plugin-transform-es2015-block-scoping@^6.24.1: 365 | version "6.24.1" 366 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.24.1.tgz#76c295dc3a4741b1665adfd3167215dcff32a576" 367 | dependencies: 368 | babel-runtime "^6.22.0" 369 | babel-template "^6.24.1" 370 | babel-traverse "^6.24.1" 371 | babel-types "^6.24.1" 372 | lodash "^4.2.0" 373 | 374 | babel-plugin-transform-es2015-classes@^6.24.1, babel-plugin-transform-es2015-classes@^6.9.0: 375 | version "6.24.1" 376 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" 377 | dependencies: 378 | babel-helper-define-map "^6.24.1" 379 | babel-helper-function-name "^6.24.1" 380 | babel-helper-optimise-call-expression "^6.24.1" 381 | babel-helper-replace-supers "^6.24.1" 382 | babel-messages "^6.23.0" 383 | babel-runtime "^6.22.0" 384 | babel-template "^6.24.1" 385 | babel-traverse "^6.24.1" 386 | babel-types "^6.24.1" 387 | 388 | babel-plugin-transform-es2015-computed-properties@^6.24.1: 389 | version "6.24.1" 390 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" 391 | dependencies: 392 | babel-runtime "^6.22.0" 393 | babel-template "^6.24.1" 394 | 395 | babel-plugin-transform-es2015-destructuring@^6.22.0: 396 | version "6.23.0" 397 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" 398 | dependencies: 399 | babel-runtime "^6.22.0" 400 | 401 | babel-plugin-transform-es2015-duplicate-keys@^6.24.1: 402 | version "6.24.1" 403 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" 404 | dependencies: 405 | babel-runtime "^6.22.0" 406 | babel-types "^6.24.1" 407 | 408 | babel-plugin-transform-es2015-for-of@^6.22.0: 409 | version "6.23.0" 410 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" 411 | dependencies: 412 | babel-runtime "^6.22.0" 413 | 414 | babel-plugin-transform-es2015-function-name@^6.24.1: 415 | version "6.24.1" 416 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" 417 | dependencies: 418 | babel-helper-function-name "^6.24.1" 419 | babel-runtime "^6.22.0" 420 | babel-types "^6.24.1" 421 | 422 | babel-plugin-transform-es2015-literals@^6.22.0: 423 | version "6.22.0" 424 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" 425 | dependencies: 426 | babel-runtime "^6.22.0" 427 | 428 | babel-plugin-transform-es2015-modules-amd@^6.24.1: 429 | version "6.24.1" 430 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" 431 | dependencies: 432 | babel-plugin-transform-es2015-modules-commonjs "^6.24.1" 433 | babel-runtime "^6.22.0" 434 | babel-template "^6.24.1" 435 | 436 | babel-plugin-transform-es2015-modules-commonjs@^6.24.1: 437 | version "6.24.1" 438 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.24.1.tgz#d3e310b40ef664a36622200097c6d440298f2bfe" 439 | dependencies: 440 | babel-plugin-transform-strict-mode "^6.24.1" 441 | babel-runtime "^6.22.0" 442 | babel-template "^6.24.1" 443 | babel-types "^6.24.1" 444 | 445 | babel-plugin-transform-es2015-modules-systemjs@^6.24.1: 446 | version "6.24.1" 447 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" 448 | dependencies: 449 | babel-helper-hoist-variables "^6.24.1" 450 | babel-runtime "^6.22.0" 451 | babel-template "^6.24.1" 452 | 453 | babel-plugin-transform-es2015-modules-umd@^6.24.1: 454 | version "6.24.1" 455 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" 456 | dependencies: 457 | babel-plugin-transform-es2015-modules-amd "^6.24.1" 458 | babel-runtime "^6.22.0" 459 | babel-template "^6.24.1" 460 | 461 | babel-plugin-transform-es2015-object-super@^6.24.1: 462 | version "6.24.1" 463 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" 464 | dependencies: 465 | babel-helper-replace-supers "^6.24.1" 466 | babel-runtime "^6.22.0" 467 | 468 | babel-plugin-transform-es2015-parameters@^6.24.1: 469 | version "6.24.1" 470 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" 471 | dependencies: 472 | babel-helper-call-delegate "^6.24.1" 473 | babel-helper-get-function-arity "^6.24.1" 474 | babel-runtime "^6.22.0" 475 | babel-template "^6.24.1" 476 | babel-traverse "^6.24.1" 477 | babel-types "^6.24.1" 478 | 479 | babel-plugin-transform-es2015-shorthand-properties@^6.24.1: 480 | version "6.24.1" 481 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" 482 | dependencies: 483 | babel-runtime "^6.22.0" 484 | babel-types "^6.24.1" 485 | 486 | babel-plugin-transform-es2015-spread@^6.22.0: 487 | version "6.22.0" 488 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" 489 | dependencies: 490 | babel-runtime "^6.22.0" 491 | 492 | babel-plugin-transform-es2015-sticky-regex@^6.24.1: 493 | version "6.24.1" 494 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" 495 | dependencies: 496 | babel-helper-regex "^6.24.1" 497 | babel-runtime "^6.22.0" 498 | babel-types "^6.24.1" 499 | 500 | babel-plugin-transform-es2015-template-literals@^6.22.0: 501 | version "6.22.0" 502 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" 503 | dependencies: 504 | babel-runtime "^6.22.0" 505 | 506 | babel-plugin-transform-es2015-typeof-symbol@^6.22.0: 507 | version "6.23.0" 508 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" 509 | dependencies: 510 | babel-runtime "^6.22.0" 511 | 512 | babel-plugin-transform-es2015-unicode-regex@^6.24.1: 513 | version "6.24.1" 514 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" 515 | dependencies: 516 | babel-helper-regex "^6.24.1" 517 | babel-runtime "^6.22.0" 518 | regexpu-core "^2.0.0" 519 | 520 | babel-plugin-transform-exponentiation-operator@^6.24.1: 521 | version "6.24.1" 522 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" 523 | dependencies: 524 | babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" 525 | babel-plugin-syntax-exponentiation-operator "^6.8.0" 526 | babel-runtime "^6.22.0" 527 | 528 | babel-plugin-transform-regenerator@^6.24.1: 529 | version "6.24.1" 530 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.24.1.tgz#b8da305ad43c3c99b4848e4fe4037b770d23c418" 531 | dependencies: 532 | regenerator-transform "0.9.11" 533 | 534 | babel-plugin-transform-strict-mode@^6.24.1: 535 | version "6.24.1" 536 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" 537 | dependencies: 538 | babel-runtime "^6.22.0" 539 | babel-types "^6.24.1" 540 | 541 | babel-preset-es2015@^6.24.1: 542 | version "6.24.1" 543 | resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" 544 | dependencies: 545 | babel-plugin-check-es2015-constants "^6.22.0" 546 | babel-plugin-transform-es2015-arrow-functions "^6.22.0" 547 | babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" 548 | babel-plugin-transform-es2015-block-scoping "^6.24.1" 549 | babel-plugin-transform-es2015-classes "^6.24.1" 550 | babel-plugin-transform-es2015-computed-properties "^6.24.1" 551 | babel-plugin-transform-es2015-destructuring "^6.22.0" 552 | babel-plugin-transform-es2015-duplicate-keys "^6.24.1" 553 | babel-plugin-transform-es2015-for-of "^6.22.0" 554 | babel-plugin-transform-es2015-function-name "^6.24.1" 555 | babel-plugin-transform-es2015-literals "^6.22.0" 556 | babel-plugin-transform-es2015-modules-amd "^6.24.1" 557 | babel-plugin-transform-es2015-modules-commonjs "^6.24.1" 558 | babel-plugin-transform-es2015-modules-systemjs "^6.24.1" 559 | babel-plugin-transform-es2015-modules-umd "^6.24.1" 560 | babel-plugin-transform-es2015-object-super "^6.24.1" 561 | babel-plugin-transform-es2015-parameters "^6.24.1" 562 | babel-plugin-transform-es2015-shorthand-properties "^6.24.1" 563 | babel-plugin-transform-es2015-spread "^6.22.0" 564 | babel-plugin-transform-es2015-sticky-regex "^6.24.1" 565 | babel-plugin-transform-es2015-template-literals "^6.22.0" 566 | babel-plugin-transform-es2015-typeof-symbol "^6.22.0" 567 | babel-plugin-transform-es2015-unicode-regex "^6.24.1" 568 | babel-plugin-transform-regenerator "^6.24.1" 569 | 570 | babel-preset-es2016@^6.24.1: 571 | version "6.24.1" 572 | resolved "https://registry.yarnpkg.com/babel-preset-es2016/-/babel-preset-es2016-6.24.1.tgz#f900bf93e2ebc0d276df9b8ab59724ebfd959f8b" 573 | dependencies: 574 | babel-plugin-transform-exponentiation-operator "^6.24.1" 575 | 576 | babel-preset-es2017@^6.24.1: 577 | version "6.24.1" 578 | resolved "https://registry.yarnpkg.com/babel-preset-es2017/-/babel-preset-es2017-6.24.1.tgz#597beadfb9f7f208bcfd8a12e9b2b29b8b2f14d1" 579 | dependencies: 580 | babel-plugin-syntax-trailing-function-commas "^6.22.0" 581 | babel-plugin-transform-async-to-generator "^6.24.1" 582 | 583 | babel-preset-latest@^6.24.1: 584 | version "6.24.1" 585 | resolved "https://registry.yarnpkg.com/babel-preset-latest/-/babel-preset-latest-6.24.1.tgz#677de069154a7485c2d25c577c02f624b85b85e8" 586 | dependencies: 587 | babel-preset-es2015 "^6.24.1" 588 | babel-preset-es2016 "^6.24.1" 589 | babel-preset-es2017 "^6.24.1" 590 | 591 | babel-register@^6.24.1: 592 | version "6.24.1" 593 | resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.24.1.tgz#7e10e13a2f71065bdfad5a1787ba45bca6ded75f" 594 | dependencies: 595 | babel-core "^6.24.1" 596 | babel-runtime "^6.22.0" 597 | core-js "^2.4.0" 598 | home-or-tmp "^2.0.0" 599 | lodash "^4.2.0" 600 | mkdirp "^0.5.1" 601 | source-map-support "^0.4.2" 602 | 603 | babel-runtime@^6.18.0, babel-runtime@^6.22.0: 604 | version "6.23.0" 605 | resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" 606 | dependencies: 607 | core-js "^2.4.0" 608 | regenerator-runtime "^0.10.0" 609 | 610 | babel-template@^6.24.1: 611 | version "6.24.1" 612 | resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.24.1.tgz#04ae514f1f93b3a2537f2a0f60a5a45fb8308333" 613 | dependencies: 614 | babel-runtime "^6.22.0" 615 | babel-traverse "^6.24.1" 616 | babel-types "^6.24.1" 617 | babylon "^6.11.0" 618 | lodash "^4.2.0" 619 | 620 | babel-traverse@^6.23.1, babel-traverse@^6.24.1: 621 | version "6.24.1" 622 | resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.24.1.tgz#ab36673fd356f9a0948659e7b338d5feadb31695" 623 | dependencies: 624 | babel-code-frame "^6.22.0" 625 | babel-messages "^6.23.0" 626 | babel-runtime "^6.22.0" 627 | babel-types "^6.24.1" 628 | babylon "^6.15.0" 629 | debug "^2.2.0" 630 | globals "^9.0.0" 631 | invariant "^2.2.0" 632 | lodash "^4.2.0" 633 | 634 | babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24.1: 635 | version "6.24.1" 636 | resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.24.1.tgz#a136879dc15b3606bda0d90c1fc74304c2ff0975" 637 | dependencies: 638 | babel-runtime "^6.22.0" 639 | esutils "^2.0.2" 640 | lodash "^4.2.0" 641 | to-fast-properties "^1.0.1" 642 | 643 | babylon@7.0.0-beta.8: 644 | version "7.0.0-beta.8" 645 | resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.8.tgz#2bdc5ae366041442c27e068cce6f0d7c06ea9949" 646 | 647 | babylon@^6.11.0, babylon@^6.15.0, babylon@^6.16.1: 648 | version "6.16.1" 649 | resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.16.1.tgz#30c5a22f481978a9e7f8cdfdf496b11d94b404d3" 650 | 651 | balanced-match@^1.0.0: 652 | version "1.0.0" 653 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 654 | 655 | brace-expansion@^1.1.7: 656 | version "1.1.11" 657 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 658 | dependencies: 659 | balanced-match "^1.0.0" 660 | concat-map "0.0.1" 661 | 662 | browser-resolve@^1.11.0: 663 | version "1.11.2" 664 | resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" 665 | dependencies: 666 | resolve "1.1.7" 667 | 668 | browser-stdout@1.3.0: 669 | version "1.3.0" 670 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" 671 | 672 | buffer-from@^1.0.0: 673 | version "1.1.1" 674 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 675 | 676 | buffer-shims@~1.0.0: 677 | version "1.0.0" 678 | resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" 679 | 680 | builtin-modules@^1.1.0, builtin-modules@^1.1.1: 681 | version "1.1.1" 682 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" 683 | 684 | bundlewatch@^0.3.0: 685 | version "0.3.0" 686 | resolved "https://registry.yarnpkg.com/bundlewatch/-/bundlewatch-0.3.0.tgz#9097674349c8d9d4c7c76da4bda16668d19b3d6d" 687 | integrity sha512-+WtpJk6zVXSP91nRDsBz3pMHR3N8s0TMtPH9vHhcFwI+NfeozGpDJYOXsScHYTLiodfzuZhHfJobN+uDg3Fn1Q== 688 | dependencies: 689 | axios "^0.19.0" 690 | bytes "^3.0.0" 691 | chalk "^4.0.0" 692 | ci-env "^1.14.0" 693 | commander "^5.0.0" 694 | glob "^7.1.2" 695 | gzip-size "^5.1.1" 696 | jsonpack "^1.1.5" 697 | lodash.merge "^4.6.1" 698 | read-pkg-up "^7.0.1" 699 | 700 | bytes@^3.0.0: 701 | version "3.1.0" 702 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" 703 | integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== 704 | 705 | caller-path@^0.1.0: 706 | version "0.1.0" 707 | resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" 708 | dependencies: 709 | callsites "^0.2.0" 710 | 711 | callsites@^0.2.0: 712 | version "0.2.0" 713 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" 714 | 715 | camelcase@^1.0.2: 716 | version "1.2.1" 717 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" 718 | 719 | center-align@^0.1.1: 720 | version "0.1.3" 721 | resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" 722 | dependencies: 723 | align-text "^0.1.3" 724 | lazy-cache "^1.0.3" 725 | 726 | chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: 727 | version "1.1.3" 728 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 729 | dependencies: 730 | ansi-styles "^2.2.1" 731 | escape-string-regexp "^1.0.2" 732 | has-ansi "^2.0.0" 733 | strip-ansi "^3.0.0" 734 | supports-color "^2.0.0" 735 | 736 | chalk@^2.0.0, chalk@^2.1.0: 737 | version "2.4.2" 738 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 739 | dependencies: 740 | ansi-styles "^3.2.1" 741 | escape-string-regexp "^1.0.5" 742 | supports-color "^5.3.0" 743 | 744 | chalk@^4.0.0: 745 | version "4.1.0" 746 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" 747 | integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== 748 | dependencies: 749 | ansi-styles "^4.1.0" 750 | supports-color "^7.1.0" 751 | 752 | chardet@^0.4.0: 753 | version "0.4.2" 754 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" 755 | 756 | ci-env@^1.14.0: 757 | version "1.16.0" 758 | resolved "https://registry.yarnpkg.com/ci-env/-/ci-env-1.16.0.tgz#e97f3b5001a8daf7da6e46f418bc6892a238704d" 759 | integrity sha512-ucF9caQEX5wQlY449KZBIJPx91+kRg9tJ3tWSc4+KzrvC5KNiPm/3g1noP8VhdI3046+Vw3jLmKAD0fjCRJTmw== 760 | 761 | ci-info@^1.0.0: 762 | version "1.0.0" 763 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" 764 | 765 | circular-json@^0.3.1: 766 | version "0.3.1" 767 | resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" 768 | 769 | cli-cursor@^1.0.2: 770 | version "1.0.2" 771 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" 772 | dependencies: 773 | restore-cursor "^1.0.1" 774 | 775 | cli-cursor@^2.1.0: 776 | version "2.1.0" 777 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" 778 | dependencies: 779 | restore-cursor "^2.0.0" 780 | 781 | cli-spinners@^0.1.2: 782 | version "0.1.2" 783 | resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" 784 | 785 | cli-truncate@^0.2.1: 786 | version "0.2.1" 787 | resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" 788 | dependencies: 789 | slice-ansi "0.0.4" 790 | string-width "^1.0.1" 791 | 792 | cli-width@^2.0.0: 793 | version "2.1.0" 794 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" 795 | 796 | cliui@^2.1.0: 797 | version "2.1.0" 798 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" 799 | dependencies: 800 | center-align "^0.1.1" 801 | right-align "^0.1.1" 802 | wordwrap "0.0.2" 803 | 804 | co@^4.6.0: 805 | version "4.6.0" 806 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 807 | 808 | code-point-at@^1.0.0: 809 | version "1.1.0" 810 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 811 | 812 | color-convert@^1.0.0: 813 | version "1.9.0" 814 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" 815 | dependencies: 816 | color-name "^1.1.1" 817 | 818 | color-convert@^1.9.0: 819 | version "1.9.3" 820 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 821 | dependencies: 822 | color-name "1.1.3" 823 | 824 | color-convert@^2.0.1: 825 | version "2.0.1" 826 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 827 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 828 | dependencies: 829 | color-name "~1.1.4" 830 | 831 | color-name@1.1.3: 832 | version "1.1.3" 833 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 834 | 835 | color-name@^1.1.1: 836 | version "1.1.2" 837 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.2.tgz#5c8ab72b64bd2215d617ae9559ebb148475cf98d" 838 | 839 | color-name@~1.1.4: 840 | version "1.1.4" 841 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 842 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 843 | 844 | commander@2.9.0, commander@^2.9.0: 845 | version "2.9.0" 846 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" 847 | dependencies: 848 | graceful-readlink ">= 1.0.0" 849 | 850 | commander@^5.0.0: 851 | version "5.1.0" 852 | resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" 853 | integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== 854 | 855 | concat-map@0.0.1: 856 | version "0.0.1" 857 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 858 | 859 | concat-stream@^1.6.0: 860 | version "1.6.2" 861 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" 862 | dependencies: 863 | buffer-from "^1.0.0" 864 | inherits "^2.0.3" 865 | readable-stream "^2.2.2" 866 | typedarray "^0.0.6" 867 | 868 | contains-path@^0.1.0: 869 | version "0.1.0" 870 | resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" 871 | 872 | convert-source-map@^1.1.0: 873 | version "1.5.0" 874 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" 875 | 876 | core-js@^2.4.0: 877 | version "2.4.1" 878 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" 879 | 880 | core-util-is@~1.0.0: 881 | version "1.0.2" 882 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 883 | 884 | cosmiconfig@^1.1.0: 885 | version "1.1.0" 886 | resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-1.1.0.tgz#0dea0f9804efdfb929fbb1b188e25553ea053d37" 887 | dependencies: 888 | graceful-fs "^4.1.2" 889 | js-yaml "^3.4.3" 890 | minimist "^1.2.0" 891 | object-assign "^4.0.1" 892 | os-homedir "^1.0.1" 893 | parse-json "^2.2.0" 894 | pinkie-promise "^2.0.0" 895 | require-from-string "^1.1.0" 896 | 897 | cross-spawn@^5.0.1, cross-spawn@^5.1.0: 898 | version "5.1.0" 899 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" 900 | dependencies: 901 | lru-cache "^4.0.1" 902 | shebang-command "^1.2.0" 903 | which "^1.2.9" 904 | 905 | date-fns@^1.27.2: 906 | version "1.28.3" 907 | resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.28.3.tgz#145d87adc3f5a82c6bda668de97eee1132c97ea1" 908 | 909 | debug@2.2.0: 910 | version "2.2.0" 911 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" 912 | dependencies: 913 | ms "0.7.1" 914 | 915 | debug@=3.1.0: 916 | version "3.1.0" 917 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" 918 | integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== 919 | dependencies: 920 | ms "2.0.0" 921 | 922 | debug@^2.1.1, debug@^2.2.0: 923 | version "2.6.3" 924 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.3.tgz#0f7eb8c30965ec08c72accfa0130c8b79984141d" 925 | dependencies: 926 | ms "0.7.2" 927 | 928 | debug@^3.1.0: 929 | version "3.2.6" 930 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" 931 | dependencies: 932 | ms "^2.1.1" 933 | 934 | decamelize@^1.0.0: 935 | version "1.2.0" 936 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 937 | 938 | deep-is@~0.1.3: 939 | version "0.1.3" 940 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 941 | 942 | del@^2.0.2: 943 | version "2.2.2" 944 | resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" 945 | dependencies: 946 | globby "^5.0.0" 947 | is-path-cwd "^1.0.0" 948 | is-path-in-cwd "^1.0.0" 949 | object-assign "^4.0.1" 950 | pify "^2.0.0" 951 | pinkie-promise "^2.0.0" 952 | rimraf "^2.2.8" 953 | 954 | detect-indent@^4.0.0: 955 | version "4.0.0" 956 | resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" 957 | dependencies: 958 | repeating "^2.0.0" 959 | 960 | diff@1.4.0: 961 | version "1.4.0" 962 | resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" 963 | 964 | doctrine@1.5.0: 965 | version "1.5.0" 966 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" 967 | dependencies: 968 | esutils "^2.0.2" 969 | isarray "^1.0.0" 970 | 971 | doctrine@^2.1.0: 972 | version "2.1.0" 973 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" 974 | dependencies: 975 | esutils "^2.0.2" 976 | 977 | duplexer@^0.1.1: 978 | version "0.1.2" 979 | resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" 980 | integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== 981 | 982 | elegant-spinner@^1.0.1: 983 | version "1.0.1" 984 | resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" 985 | 986 | error-ex@^1.2.0: 987 | version "1.3.1" 988 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" 989 | dependencies: 990 | is-arrayish "^0.2.1" 991 | 992 | error-ex@^1.3.1: 993 | version "1.3.2" 994 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 995 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 996 | dependencies: 997 | is-arrayish "^0.2.1" 998 | 999 | escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: 1000 | version "1.0.5" 1001 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 1002 | 1003 | eslint-import-resolver-node@^0.2.0: 1004 | version "0.2.3" 1005 | resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz#5add8106e8c928db2cba232bcd9efa846e3da16c" 1006 | dependencies: 1007 | debug "^2.2.0" 1008 | object-assign "^4.0.1" 1009 | resolve "^1.1.6" 1010 | 1011 | eslint-module-utils@^2.0.0: 1012 | version "2.0.0" 1013 | resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.0.0.tgz#a6f8c21d901358759cdc35dbac1982ae1ee58bce" 1014 | dependencies: 1015 | debug "2.2.0" 1016 | pkg-dir "^1.0.0" 1017 | 1018 | eslint-plugin-import@^2.2.0: 1019 | version "2.2.0" 1020 | resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.2.0.tgz#72ba306fad305d67c4816348a4699a4229ac8b4e" 1021 | dependencies: 1022 | builtin-modules "^1.1.1" 1023 | contains-path "^0.1.0" 1024 | debug "^2.2.0" 1025 | doctrine "1.5.0" 1026 | eslint-import-resolver-node "^0.2.0" 1027 | eslint-module-utils "^2.0.0" 1028 | has "^1.0.1" 1029 | lodash.cond "^4.3.0" 1030 | minimatch "^3.0.3" 1031 | pkg-up "^1.0.0" 1032 | 1033 | eslint-scope@^3.7.1: 1034 | version "3.7.3" 1035 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535" 1036 | dependencies: 1037 | esrecurse "^4.1.0" 1038 | estraverse "^4.1.1" 1039 | 1040 | eslint-visitor-keys@^1.0.0: 1041 | version "1.3.0" 1042 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" 1043 | 1044 | eslint@^4.18.2: 1045 | version "4.18.2" 1046 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.18.2.tgz#0f81267ad1012e7d2051e186a9004cc2267b8d45" 1047 | dependencies: 1048 | ajv "^5.3.0" 1049 | babel-code-frame "^6.22.0" 1050 | chalk "^2.1.0" 1051 | concat-stream "^1.6.0" 1052 | cross-spawn "^5.1.0" 1053 | debug "^3.1.0" 1054 | doctrine "^2.1.0" 1055 | eslint-scope "^3.7.1" 1056 | eslint-visitor-keys "^1.0.0" 1057 | espree "^3.5.2" 1058 | esquery "^1.0.0" 1059 | esutils "^2.0.2" 1060 | file-entry-cache "^2.0.0" 1061 | functional-red-black-tree "^1.0.1" 1062 | glob "^7.1.2" 1063 | globals "^11.0.1" 1064 | ignore "^3.3.3" 1065 | imurmurhash "^0.1.4" 1066 | inquirer "^3.0.6" 1067 | is-resolvable "^1.0.0" 1068 | js-yaml "^3.9.1" 1069 | json-stable-stringify-without-jsonify "^1.0.1" 1070 | levn "^0.3.0" 1071 | lodash "^4.17.4" 1072 | minimatch "^3.0.2" 1073 | mkdirp "^0.5.1" 1074 | natural-compare "^1.4.0" 1075 | optionator "^0.8.2" 1076 | path-is-inside "^1.0.2" 1077 | pluralize "^7.0.0" 1078 | progress "^2.0.0" 1079 | require-uncached "^1.0.3" 1080 | semver "^5.3.0" 1081 | strip-ansi "^4.0.0" 1082 | strip-json-comments "~2.0.1" 1083 | table "4.0.2" 1084 | text-table "~0.2.0" 1085 | 1086 | espree@^3.5.2: 1087 | version "3.5.4" 1088 | resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" 1089 | dependencies: 1090 | acorn "^5.5.0" 1091 | acorn-jsx "^3.0.0" 1092 | 1093 | esprima@^4.0.0: 1094 | version "4.0.1" 1095 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 1096 | 1097 | esquery@^1.0.0: 1098 | version "1.0.0" 1099 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" 1100 | dependencies: 1101 | estraverse "^4.0.0" 1102 | 1103 | esrecurse@^4.1.0: 1104 | version "4.1.0" 1105 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220" 1106 | dependencies: 1107 | estraverse "~4.1.0" 1108 | object-assign "^4.0.1" 1109 | 1110 | estraverse@^4.0.0, estraverse@^4.1.1: 1111 | version "4.2.0" 1112 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" 1113 | 1114 | estraverse@~4.1.0: 1115 | version "4.1.1" 1116 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.1.1.tgz#f6caca728933a850ef90661d0e17982ba47111a2" 1117 | 1118 | estree-walker@^0.2.1: 1119 | version "0.2.1" 1120 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.2.1.tgz#bdafe8095383d8414d5dc2ecf4c9173b6db9412e" 1121 | 1122 | esutils@2.0.2, esutils@^2.0.2: 1123 | version "2.0.2" 1124 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 1125 | 1126 | execa@^0.6.0: 1127 | version "0.6.3" 1128 | resolved "https://registry.yarnpkg.com/execa/-/execa-0.6.3.tgz#57b69a594f081759c69e5370f0d17b9cb11658fe" 1129 | dependencies: 1130 | cross-spawn "^5.0.1" 1131 | get-stream "^3.0.0" 1132 | is-stream "^1.1.0" 1133 | npm-run-path "^2.0.0" 1134 | p-finally "^1.0.0" 1135 | signal-exit "^3.0.0" 1136 | strip-eof "^1.0.0" 1137 | 1138 | exit-hook@^1.0.0: 1139 | version "1.1.1" 1140 | resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" 1141 | 1142 | external-editor@^2.0.4: 1143 | version "2.2.0" 1144 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" 1145 | dependencies: 1146 | chardet "^0.4.0" 1147 | iconv-lite "^0.4.17" 1148 | tmp "^0.0.33" 1149 | 1150 | fast-deep-equal@^1.0.0: 1151 | version "1.1.0" 1152 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" 1153 | 1154 | fast-json-stable-stringify@^2.0.0: 1155 | version "2.1.0" 1156 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 1157 | 1158 | fast-levenshtein@~2.0.4: 1159 | version "2.0.6" 1160 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 1161 | 1162 | figures@^1.7.0: 1163 | version "1.7.0" 1164 | resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" 1165 | dependencies: 1166 | escape-string-regexp "^1.0.5" 1167 | object-assign "^4.1.0" 1168 | 1169 | figures@^2.0.0: 1170 | version "2.0.0" 1171 | resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" 1172 | dependencies: 1173 | escape-string-regexp "^1.0.5" 1174 | 1175 | file-entry-cache@^2.0.0: 1176 | version "2.0.0" 1177 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" 1178 | dependencies: 1179 | flat-cache "^1.2.1" 1180 | object-assign "^4.0.1" 1181 | 1182 | find-parent-dir@^0.3.0: 1183 | version "0.3.0" 1184 | resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" 1185 | 1186 | find-up@^1.0.0: 1187 | version "1.1.2" 1188 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" 1189 | dependencies: 1190 | path-exists "^2.0.0" 1191 | pinkie-promise "^2.0.0" 1192 | 1193 | find-up@^4.1.0: 1194 | version "4.1.0" 1195 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" 1196 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== 1197 | dependencies: 1198 | locate-path "^5.0.0" 1199 | path-exists "^4.0.0" 1200 | 1201 | flat-cache@^1.2.1: 1202 | version "1.2.2" 1203 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96" 1204 | dependencies: 1205 | circular-json "^0.3.1" 1206 | del "^2.0.2" 1207 | graceful-fs "^4.1.2" 1208 | write "^0.2.1" 1209 | 1210 | flow-parser@0.43.0: 1211 | version "0.43.0" 1212 | resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.43.0.tgz#e2b8eb1ac83dd53f7b6b04a7c35b6a52c33479b7" 1213 | 1214 | follow-redirects@1.5.10: 1215 | version "1.5.10" 1216 | resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" 1217 | integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== 1218 | dependencies: 1219 | debug "=3.1.0" 1220 | 1221 | fs.realpath@^1.0.0: 1222 | version "1.0.0" 1223 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1224 | 1225 | function-bind@^1.0.2: 1226 | version "1.1.0" 1227 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" 1228 | 1229 | functional-red-black-tree@^1.0.1: 1230 | version "1.0.1" 1231 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 1232 | 1233 | get-stdin@5.0.1: 1234 | version "5.0.1" 1235 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" 1236 | 1237 | get-stream@^3.0.0: 1238 | version "3.0.0" 1239 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" 1240 | 1241 | glob@7.0.5: 1242 | version "7.0.5" 1243 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.5.tgz#b4202a69099bbb4d292a7c1b95b6682b67ebdc95" 1244 | dependencies: 1245 | fs.realpath "^1.0.0" 1246 | inflight "^1.0.4" 1247 | inherits "2" 1248 | minimatch "^3.0.2" 1249 | once "^1.3.0" 1250 | path-is-absolute "^1.0.0" 1251 | 1252 | glob@7.1.1: 1253 | version "7.1.1" 1254 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" 1255 | dependencies: 1256 | fs.realpath "^1.0.0" 1257 | inflight "^1.0.4" 1258 | inherits "2" 1259 | minimatch "^3.0.2" 1260 | once "^1.3.0" 1261 | path-is-absolute "^1.0.0" 1262 | 1263 | glob@^7.0.3, glob@^7.0.5, glob@^7.1.2: 1264 | version "7.1.6" 1265 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 1266 | dependencies: 1267 | fs.realpath "^1.0.0" 1268 | inflight "^1.0.4" 1269 | inherits "2" 1270 | minimatch "^3.0.4" 1271 | once "^1.3.0" 1272 | path-is-absolute "^1.0.0" 1273 | 1274 | globals@^11.0.1: 1275 | version "11.12.0" 1276 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 1277 | 1278 | globals@^9.0.0: 1279 | version "9.17.0" 1280 | resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286" 1281 | 1282 | globby@^5.0.0: 1283 | version "5.0.0" 1284 | resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" 1285 | dependencies: 1286 | array-union "^1.0.1" 1287 | arrify "^1.0.0" 1288 | glob "^7.0.3" 1289 | object-assign "^4.0.1" 1290 | pify "^2.0.0" 1291 | pinkie-promise "^2.0.0" 1292 | 1293 | graceful-fs@^4.1.2: 1294 | version "4.1.11" 1295 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 1296 | 1297 | "graceful-readlink@>= 1.0.0": 1298 | version "1.0.1" 1299 | resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" 1300 | 1301 | growl@1.9.2: 1302 | version "1.9.2" 1303 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" 1304 | 1305 | gzip-size@^5.1.1: 1306 | version "5.1.1" 1307 | resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" 1308 | integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== 1309 | dependencies: 1310 | duplexer "^0.1.1" 1311 | pify "^4.0.1" 1312 | 1313 | has-ansi@^2.0.0: 1314 | version "2.0.0" 1315 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 1316 | dependencies: 1317 | ansi-regex "^2.0.0" 1318 | 1319 | has-flag@^1.0.0: 1320 | version "1.0.0" 1321 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" 1322 | 1323 | has-flag@^3.0.0: 1324 | version "3.0.0" 1325 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1326 | 1327 | has-flag@^4.0.0: 1328 | version "4.0.0" 1329 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1330 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1331 | 1332 | has@^1.0.1: 1333 | version "1.0.1" 1334 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" 1335 | dependencies: 1336 | function-bind "^1.0.2" 1337 | 1338 | home-or-tmp@^2.0.0: 1339 | version "2.0.0" 1340 | resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" 1341 | dependencies: 1342 | os-homedir "^1.0.0" 1343 | os-tmpdir "^1.0.1" 1344 | 1345 | hosted-git-info@^2.1.4: 1346 | version "2.8.8" 1347 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" 1348 | integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== 1349 | 1350 | husky@^0.13.3: 1351 | version "0.13.3" 1352 | resolved "https://registry.yarnpkg.com/husky/-/husky-0.13.3.tgz#bc2066080badc8b8fe3516e881f5bc68a57052ff" 1353 | dependencies: 1354 | chalk "^1.1.3" 1355 | find-parent-dir "^0.3.0" 1356 | is-ci "^1.0.9" 1357 | normalize-path "^1.0.0" 1358 | 1359 | iconv-lite@^0.4.17: 1360 | version "0.4.24" 1361 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 1362 | dependencies: 1363 | safer-buffer ">= 2.1.2 < 3" 1364 | 1365 | ignore@^3.3.3: 1366 | version "3.3.10" 1367 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" 1368 | 1369 | imurmurhash@^0.1.4: 1370 | version "0.1.4" 1371 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1372 | 1373 | indent-string@^2.1.0: 1374 | version "2.1.0" 1375 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" 1376 | dependencies: 1377 | repeating "^2.0.0" 1378 | 1379 | indent-string@^3.0.0: 1380 | version "3.1.0" 1381 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.1.0.tgz#08ff4334603388399b329e6b9538dc7a3cf5de7d" 1382 | 1383 | inflight@^1.0.4: 1384 | version "1.0.6" 1385 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1386 | dependencies: 1387 | once "^1.3.0" 1388 | wrappy "1" 1389 | 1390 | inherits@2, inherits@^2.0.3, inherits@~2.0.1: 1391 | version "2.0.3" 1392 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 1393 | 1394 | inquirer@^3.0.6: 1395 | version "3.3.0" 1396 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" 1397 | dependencies: 1398 | ansi-escapes "^3.0.0" 1399 | chalk "^2.0.0" 1400 | cli-cursor "^2.1.0" 1401 | cli-width "^2.0.0" 1402 | external-editor "^2.0.4" 1403 | figures "^2.0.0" 1404 | lodash "^4.3.0" 1405 | mute-stream "0.0.7" 1406 | run-async "^2.2.0" 1407 | rx-lite "^4.0.8" 1408 | rx-lite-aggregates "^4.0.8" 1409 | string-width "^2.1.0" 1410 | strip-ansi "^4.0.0" 1411 | through "^2.3.6" 1412 | 1413 | invariant@^2.2.0: 1414 | version "2.2.2" 1415 | resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" 1416 | dependencies: 1417 | loose-envify "^1.0.0" 1418 | 1419 | is-arrayish@^0.2.1: 1420 | version "0.2.1" 1421 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 1422 | 1423 | is-buffer@^1.0.2: 1424 | version "1.1.5" 1425 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" 1426 | 1427 | is-ci@^1.0.9: 1428 | version "1.0.10" 1429 | resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" 1430 | dependencies: 1431 | ci-info "^1.0.0" 1432 | 1433 | is-finite@^1.0.0: 1434 | version "1.0.2" 1435 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" 1436 | dependencies: 1437 | number-is-nan "^1.0.0" 1438 | 1439 | is-fullwidth-code-point@^1.0.0: 1440 | version "1.0.0" 1441 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 1442 | dependencies: 1443 | number-is-nan "^1.0.0" 1444 | 1445 | is-fullwidth-code-point@^2.0.0: 1446 | version "2.0.0" 1447 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 1448 | 1449 | is-module@^1.0.0: 1450 | version "1.0.0" 1451 | resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" 1452 | 1453 | is-path-cwd@^1.0.0: 1454 | version "1.0.0" 1455 | resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" 1456 | 1457 | is-path-in-cwd@^1.0.0: 1458 | version "1.0.0" 1459 | resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" 1460 | dependencies: 1461 | is-path-inside "^1.0.0" 1462 | 1463 | is-path-inside@^1.0.0: 1464 | version "1.0.0" 1465 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" 1466 | dependencies: 1467 | path-is-inside "^1.0.1" 1468 | 1469 | is-promise@^2.1.0: 1470 | version "2.1.0" 1471 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" 1472 | 1473 | is-resolvable@^1.0.0: 1474 | version "1.0.0" 1475 | resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" 1476 | dependencies: 1477 | tryit "^1.0.1" 1478 | 1479 | is-stream@^1.1.0: 1480 | version "1.1.0" 1481 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 1482 | 1483 | isarray@^1.0.0, isarray@~1.0.0: 1484 | version "1.0.0" 1485 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1486 | 1487 | isexe@^2.0.0: 1488 | version "2.0.0" 1489 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1490 | 1491 | jest-matcher-utils@^19.0.0: 1492 | version "19.0.0" 1493 | resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-19.0.0.tgz#5ecd9b63565d2b001f61fbf7ec4c7f537964564d" 1494 | dependencies: 1495 | chalk "^1.1.3" 1496 | pretty-format "^19.0.0" 1497 | 1498 | jest-validate@19.0.0: 1499 | version "19.0.0" 1500 | resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-19.0.0.tgz#8c6318a20ecfeaba0ba5378bfbb8277abded4173" 1501 | dependencies: 1502 | chalk "^1.1.1" 1503 | jest-matcher-utils "^19.0.0" 1504 | leven "^2.0.0" 1505 | pretty-format "^19.0.0" 1506 | 1507 | js-tokens@^3.0.0: 1508 | version "3.0.1" 1509 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" 1510 | 1511 | js-tokens@^4.0.0: 1512 | version "4.0.0" 1513 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1514 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1515 | 1516 | js-yaml@^3.4.3, js-yaml@^3.9.1: 1517 | version "3.14.0" 1518 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" 1519 | dependencies: 1520 | argparse "^1.0.7" 1521 | esprima "^4.0.0" 1522 | 1523 | jsesc@^1.3.0: 1524 | version "1.3.0" 1525 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" 1526 | 1527 | jsesc@~0.5.0: 1528 | version "0.5.0" 1529 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" 1530 | 1531 | json-parse-even-better-errors@^2.3.0: 1532 | version "2.3.1" 1533 | resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" 1534 | integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== 1535 | 1536 | json-schema-traverse@^0.3.0: 1537 | version "0.3.1" 1538 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" 1539 | 1540 | json-stable-stringify-without-jsonify@^1.0.1: 1541 | version "1.0.1" 1542 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 1543 | 1544 | json3@3.3.2: 1545 | version "3.3.2" 1546 | resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" 1547 | 1548 | json5@^0.5.0: 1549 | version "0.5.1" 1550 | resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" 1551 | 1552 | jsonpack@^1.1.5: 1553 | version "1.1.5" 1554 | resolved "https://registry.yarnpkg.com/jsonpack/-/jsonpack-1.1.5.tgz#d42b0dcfd91ac58ef3110f96d2c599404c3dc27c" 1555 | integrity sha1-1CsNz9kaxY7zEQ+W0sWZQEw9wnw= 1556 | 1557 | kind-of@^3.0.2: 1558 | version "3.1.0" 1559 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47" 1560 | dependencies: 1561 | is-buffer "^1.0.2" 1562 | 1563 | lazy-cache@^1.0.3: 1564 | version "1.0.4" 1565 | resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" 1566 | 1567 | leven@^2.0.0: 1568 | version "2.1.0" 1569 | resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" 1570 | 1571 | levn@^0.3.0, levn@~0.3.0: 1572 | version "0.3.0" 1573 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 1574 | dependencies: 1575 | prelude-ls "~1.1.2" 1576 | type-check "~0.3.2" 1577 | 1578 | lines-and-columns@^1.1.6: 1579 | version "1.1.6" 1580 | resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" 1581 | integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= 1582 | 1583 | lint-staged@^3.4.0: 1584 | version "3.4.0" 1585 | resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-3.4.0.tgz#52fa85dfc92bb1c6fe8ad0d0d98ca13924e03e4b" 1586 | dependencies: 1587 | app-root-path "^2.0.0" 1588 | cosmiconfig "^1.1.0" 1589 | execa "^0.6.0" 1590 | listr "^0.11.0" 1591 | minimatch "^3.0.0" 1592 | npm-which "^3.0.1" 1593 | staged-git-files "0.0.4" 1594 | 1595 | listr-silent-renderer@^1.1.1: 1596 | version "1.1.1" 1597 | resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" 1598 | 1599 | listr-update-renderer@^0.2.0: 1600 | version "0.2.0" 1601 | resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.2.0.tgz#ca80e1779b4e70266807e8eed1ad6abe398550f9" 1602 | dependencies: 1603 | chalk "^1.1.3" 1604 | cli-truncate "^0.2.1" 1605 | elegant-spinner "^1.0.1" 1606 | figures "^1.7.0" 1607 | indent-string "^3.0.0" 1608 | log-symbols "^1.0.2" 1609 | log-update "^1.0.2" 1610 | strip-ansi "^3.0.1" 1611 | 1612 | listr-verbose-renderer@^0.4.0: 1613 | version "0.4.0" 1614 | resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.4.0.tgz#44dc01bb0c34a03c572154d4d08cde9b1dc5620f" 1615 | dependencies: 1616 | chalk "^1.1.3" 1617 | cli-cursor "^1.0.2" 1618 | date-fns "^1.27.2" 1619 | figures "^1.7.0" 1620 | 1621 | listr@^0.11.0: 1622 | version "0.11.0" 1623 | resolved "https://registry.yarnpkg.com/listr/-/listr-0.11.0.tgz#5e778bc23806ac3ab984ed75564458151f39b03e" 1624 | dependencies: 1625 | chalk "^1.1.3" 1626 | cli-truncate "^0.2.1" 1627 | figures "^1.7.0" 1628 | indent-string "^2.1.0" 1629 | is-promise "^2.1.0" 1630 | is-stream "^1.1.0" 1631 | listr-silent-renderer "^1.1.1" 1632 | listr-update-renderer "^0.2.0" 1633 | listr-verbose-renderer "^0.4.0" 1634 | log-symbols "^1.0.2" 1635 | log-update "^1.0.2" 1636 | ora "^0.2.3" 1637 | rxjs "^5.0.0-beta.11" 1638 | stream-to-observable "^0.1.0" 1639 | strip-ansi "^3.0.1" 1640 | 1641 | locate-path@^5.0.0: 1642 | version "5.0.0" 1643 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" 1644 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== 1645 | dependencies: 1646 | p-locate "^4.1.0" 1647 | 1648 | lodash._baseassign@^3.0.0: 1649 | version "3.2.0" 1650 | resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" 1651 | dependencies: 1652 | lodash._basecopy "^3.0.0" 1653 | lodash.keys "^3.0.0" 1654 | 1655 | lodash._basecopy@^3.0.0: 1656 | version "3.0.1" 1657 | resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" 1658 | 1659 | lodash._basecreate@^3.0.0: 1660 | version "3.0.3" 1661 | resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" 1662 | 1663 | lodash._getnative@^3.0.0: 1664 | version "3.9.1" 1665 | resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" 1666 | 1667 | lodash._isiterateecall@^3.0.0: 1668 | version "3.0.9" 1669 | resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" 1670 | 1671 | lodash.cond@^4.3.0: 1672 | version "4.5.2" 1673 | resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5" 1674 | 1675 | lodash.create@3.1.1: 1676 | version "3.1.1" 1677 | resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" 1678 | dependencies: 1679 | lodash._baseassign "^3.0.0" 1680 | lodash._basecreate "^3.0.0" 1681 | lodash._isiterateecall "^3.0.0" 1682 | 1683 | lodash.isarguments@^3.0.0: 1684 | version "3.1.0" 1685 | resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" 1686 | 1687 | lodash.isarray@^3.0.0: 1688 | version "3.0.4" 1689 | resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" 1690 | 1691 | lodash.keys@^3.0.0: 1692 | version "3.1.2" 1693 | resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" 1694 | dependencies: 1695 | lodash._getnative "^3.0.0" 1696 | lodash.isarguments "^3.0.0" 1697 | lodash.isarray "^3.0.0" 1698 | 1699 | lodash.merge@^4.6.1: 1700 | version "4.6.2" 1701 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 1702 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 1703 | 1704 | lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0: 1705 | version "4.17.19" 1706 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" 1707 | 1708 | log-symbols@^1.0.2: 1709 | version "1.0.2" 1710 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" 1711 | dependencies: 1712 | chalk "^1.0.0" 1713 | 1714 | log-update@^1.0.2: 1715 | version "1.0.2" 1716 | resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1" 1717 | dependencies: 1718 | ansi-escapes "^1.0.0" 1719 | cli-cursor "^1.0.2" 1720 | 1721 | longest@^1.0.1: 1722 | version "1.0.1" 1723 | resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" 1724 | 1725 | loose-envify@^1.0.0: 1726 | version "1.3.1" 1727 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" 1728 | dependencies: 1729 | js-tokens "^3.0.0" 1730 | 1731 | lru-cache@^4.0.1: 1732 | version "4.0.2" 1733 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" 1734 | dependencies: 1735 | pseudomap "^1.0.1" 1736 | yallist "^2.0.0" 1737 | 1738 | mimic-fn@^1.0.0: 1739 | version "1.2.0" 1740 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" 1741 | 1742 | minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: 1743 | version "3.0.4" 1744 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1745 | dependencies: 1746 | brace-expansion "^1.1.7" 1747 | 1748 | minimist@0.0.8: 1749 | version "0.0.8" 1750 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 1751 | 1752 | minimist@1.2.0, minimist@^1.2.0: 1753 | version "1.2.0" 1754 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 1755 | 1756 | mkdirp@0.5.1, mkdirp@^0.5.1: 1757 | version "0.5.1" 1758 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 1759 | dependencies: 1760 | minimist "0.0.8" 1761 | 1762 | mocha@^3.2.0: 1763 | version "3.2.0" 1764 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.2.0.tgz#7dc4f45e5088075171a68896814e6ae9eb7a85e3" 1765 | dependencies: 1766 | browser-stdout "1.3.0" 1767 | commander "2.9.0" 1768 | debug "2.2.0" 1769 | diff "1.4.0" 1770 | escape-string-regexp "1.0.5" 1771 | glob "7.0.5" 1772 | growl "1.9.2" 1773 | json3 "3.3.2" 1774 | lodash.create "3.1.1" 1775 | mkdirp "0.5.1" 1776 | supports-color "3.1.2" 1777 | 1778 | ms@0.7.1: 1779 | version "0.7.1" 1780 | resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" 1781 | 1782 | ms@0.7.2: 1783 | version "0.7.2" 1784 | resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" 1785 | 1786 | ms@2.0.0: 1787 | version "2.0.0" 1788 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1789 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 1790 | 1791 | ms@^2.1.1: 1792 | version "2.1.2" 1793 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1794 | 1795 | mute-stream@0.0.7: 1796 | version "0.0.7" 1797 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" 1798 | 1799 | natural-compare@^1.4.0: 1800 | version "1.4.0" 1801 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1802 | 1803 | normalize-package-data@^2.5.0: 1804 | version "2.5.0" 1805 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" 1806 | integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== 1807 | dependencies: 1808 | hosted-git-info "^2.1.4" 1809 | resolve "^1.10.0" 1810 | semver "2 || 3 || 4 || 5" 1811 | validate-npm-package-license "^3.0.1" 1812 | 1813 | normalize-path@^1.0.0: 1814 | version "1.0.0" 1815 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" 1816 | 1817 | npm-path@^2.0.2: 1818 | version "2.0.3" 1819 | resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.3.tgz#15cff4e1c89a38da77f56f6055b24f975dfb2bbe" 1820 | dependencies: 1821 | which "^1.2.10" 1822 | 1823 | npm-run-path@^2.0.0: 1824 | version "2.0.2" 1825 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" 1826 | dependencies: 1827 | path-key "^2.0.0" 1828 | 1829 | npm-which@^3.0.1: 1830 | version "3.0.1" 1831 | resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" 1832 | dependencies: 1833 | commander "^2.9.0" 1834 | npm-path "^2.0.2" 1835 | which "^1.2.10" 1836 | 1837 | number-is-nan@^1.0.0: 1838 | version "1.0.1" 1839 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 1840 | 1841 | object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: 1842 | version "4.1.1" 1843 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1844 | 1845 | once@^1.3.0: 1846 | version "1.4.0" 1847 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1848 | dependencies: 1849 | wrappy "1" 1850 | 1851 | onetime@^1.0.0: 1852 | version "1.1.0" 1853 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" 1854 | 1855 | onetime@^2.0.0: 1856 | version "2.0.1" 1857 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" 1858 | dependencies: 1859 | mimic-fn "^1.0.0" 1860 | 1861 | optionator@^0.8.2: 1862 | version "0.8.2" 1863 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" 1864 | dependencies: 1865 | deep-is "~0.1.3" 1866 | fast-levenshtein "~2.0.4" 1867 | levn "~0.3.0" 1868 | prelude-ls "~1.1.2" 1869 | type-check "~0.3.2" 1870 | wordwrap "~1.0.0" 1871 | 1872 | ora@^0.2.3: 1873 | version "0.2.3" 1874 | resolved "https://registry.yarnpkg.com/ora/-/ora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4" 1875 | dependencies: 1876 | chalk "^1.1.1" 1877 | cli-cursor "^1.0.2" 1878 | cli-spinners "^0.1.2" 1879 | object-assign "^4.0.1" 1880 | 1881 | os-homedir@^1.0.0, os-homedir@^1.0.1: 1882 | version "1.0.2" 1883 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 1884 | 1885 | os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: 1886 | version "1.0.2" 1887 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 1888 | 1889 | p-finally@^1.0.0: 1890 | version "1.0.0" 1891 | resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" 1892 | 1893 | p-limit@^2.2.0: 1894 | version "2.3.0" 1895 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 1896 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 1897 | dependencies: 1898 | p-try "^2.0.0" 1899 | 1900 | p-locate@^4.1.0: 1901 | version "4.1.0" 1902 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" 1903 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== 1904 | dependencies: 1905 | p-limit "^2.2.0" 1906 | 1907 | p-try@^2.0.0: 1908 | version "2.2.0" 1909 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 1910 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 1911 | 1912 | parse-json@^2.2.0: 1913 | version "2.2.0" 1914 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" 1915 | dependencies: 1916 | error-ex "^1.2.0" 1917 | 1918 | parse-json@^5.0.0: 1919 | version "5.1.0" 1920 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.1.0.tgz#f96088cdf24a8faa9aea9a009f2d9d942c999646" 1921 | integrity sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ== 1922 | dependencies: 1923 | "@babel/code-frame" "^7.0.0" 1924 | error-ex "^1.3.1" 1925 | json-parse-even-better-errors "^2.3.0" 1926 | lines-and-columns "^1.1.6" 1927 | 1928 | path-exists@^2.0.0: 1929 | version "2.1.0" 1930 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" 1931 | dependencies: 1932 | pinkie-promise "^2.0.0" 1933 | 1934 | path-exists@^4.0.0: 1935 | version "4.0.0" 1936 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 1937 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1938 | 1939 | path-is-absolute@^1.0.0: 1940 | version "1.0.1" 1941 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1942 | 1943 | path-is-inside@^1.0.1, path-is-inside@^1.0.2: 1944 | version "1.0.2" 1945 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" 1946 | 1947 | path-key@^2.0.0: 1948 | version "2.0.1" 1949 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 1950 | 1951 | path-parse@^1.0.5: 1952 | version "1.0.5" 1953 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" 1954 | 1955 | path-parse@^1.0.6: 1956 | version "1.0.6" 1957 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" 1958 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== 1959 | 1960 | pify@^2.0.0: 1961 | version "2.3.0" 1962 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 1963 | 1964 | pify@^4.0.1: 1965 | version "4.0.1" 1966 | resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" 1967 | integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== 1968 | 1969 | pinkie-promise@^2.0.0: 1970 | version "2.0.1" 1971 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 1972 | dependencies: 1973 | pinkie "^2.0.0" 1974 | 1975 | pinkie@^2.0.0: 1976 | version "2.0.4" 1977 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 1978 | 1979 | pkg-dir@^1.0.0: 1980 | version "1.0.0" 1981 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" 1982 | dependencies: 1983 | find-up "^1.0.0" 1984 | 1985 | pkg-up@^1.0.0: 1986 | version "1.0.0" 1987 | resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-1.0.0.tgz#3e08fb461525c4421624a33b9f7e6d0af5b05a26" 1988 | dependencies: 1989 | find-up "^1.0.0" 1990 | 1991 | pluralize@^7.0.0: 1992 | version "7.0.0" 1993 | resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" 1994 | 1995 | prelude-ls@~1.1.2: 1996 | version "1.1.2" 1997 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 1998 | 1999 | prettier@^1.1.0: 2000 | version "1.1.0" 2001 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.1.0.tgz#9d6ad005703efefa66b6999b8916bfc6afeaf9f8" 2002 | dependencies: 2003 | ast-types "0.9.8" 2004 | babel-code-frame "6.22.0" 2005 | babylon "7.0.0-beta.8" 2006 | chalk "1.1.3" 2007 | esutils "2.0.2" 2008 | flow-parser "0.43.0" 2009 | get-stdin "5.0.1" 2010 | glob "7.1.1" 2011 | jest-validate "19.0.0" 2012 | minimist "1.2.0" 2013 | 2014 | pretty-format@^19.0.0: 2015 | version "19.0.0" 2016 | resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-19.0.0.tgz#56530d32acb98a3fa4851c4e2b9d37b420684c84" 2017 | dependencies: 2018 | ansi-styles "^3.0.0" 2019 | 2020 | private@^0.1.6: 2021 | version "0.1.7" 2022 | resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" 2023 | 2024 | process-nextick-args@~1.0.6: 2025 | version "1.0.7" 2026 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" 2027 | 2028 | progress@^2.0.0: 2029 | version "2.0.3" 2030 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 2031 | 2032 | pseudomap@^1.0.1: 2033 | version "1.0.2" 2034 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" 2035 | 2036 | read-pkg-up@^7.0.1: 2037 | version "7.0.1" 2038 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" 2039 | integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== 2040 | dependencies: 2041 | find-up "^4.1.0" 2042 | read-pkg "^5.2.0" 2043 | type-fest "^0.8.1" 2044 | 2045 | read-pkg@^5.2.0: 2046 | version "5.2.0" 2047 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" 2048 | integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== 2049 | dependencies: 2050 | "@types/normalize-package-data" "^2.4.0" 2051 | normalize-package-data "^2.5.0" 2052 | parse-json "^5.0.0" 2053 | type-fest "^0.6.0" 2054 | 2055 | readable-stream@^2.2.2: 2056 | version "2.2.9" 2057 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8" 2058 | dependencies: 2059 | buffer-shims "~1.0.0" 2060 | core-util-is "~1.0.0" 2061 | inherits "~2.0.1" 2062 | isarray "~1.0.0" 2063 | process-nextick-args "~1.0.6" 2064 | string_decoder "~1.0.0" 2065 | util-deprecate "~1.0.1" 2066 | 2067 | regenerate@^1.2.1: 2068 | version "1.3.2" 2069 | resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" 2070 | 2071 | regenerator-runtime@^0.10.0: 2072 | version "0.10.3" 2073 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.3.tgz#8c4367a904b51ea62a908ac310bf99ff90a82a3e" 2074 | 2075 | regenerator-transform@0.9.11: 2076 | version "0.9.11" 2077 | resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.9.11.tgz#3a7d067520cb7b7176769eb5ff868691befe1283" 2078 | dependencies: 2079 | babel-runtime "^6.18.0" 2080 | babel-types "^6.19.0" 2081 | private "^0.1.6" 2082 | 2083 | regexpu-core@^2.0.0: 2084 | version "2.0.0" 2085 | resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" 2086 | dependencies: 2087 | regenerate "^1.2.1" 2088 | regjsgen "^0.2.0" 2089 | regjsparser "^0.1.4" 2090 | 2091 | regjsgen@^0.2.0: 2092 | version "0.2.0" 2093 | resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" 2094 | 2095 | regjsparser@^0.1.4: 2096 | version "0.1.5" 2097 | resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" 2098 | dependencies: 2099 | jsesc "~0.5.0" 2100 | 2101 | repeat-string@^1.5.2: 2102 | version "1.6.1" 2103 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 2104 | 2105 | repeating@^2.0.0: 2106 | version "2.0.1" 2107 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" 2108 | dependencies: 2109 | is-finite "^1.0.0" 2110 | 2111 | require-from-string@^1.1.0: 2112 | version "1.2.1" 2113 | resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" 2114 | 2115 | require-uncached@^1.0.3: 2116 | version "1.0.3" 2117 | resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" 2118 | dependencies: 2119 | caller-path "^0.1.0" 2120 | resolve-from "^1.0.0" 2121 | 2122 | resolve-from@^1.0.0: 2123 | version "1.0.1" 2124 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" 2125 | 2126 | resolve@1.1.7: 2127 | version "1.1.7" 2128 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" 2129 | 2130 | resolve@^1.1.6: 2131 | version "1.3.2" 2132 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.2.tgz#1f0442c9e0cbb8136e87b9305f932f46c7f28235" 2133 | dependencies: 2134 | path-parse "^1.0.5" 2135 | 2136 | resolve@^1.10.0: 2137 | version "1.17.0" 2138 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" 2139 | integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== 2140 | dependencies: 2141 | path-parse "^1.0.6" 2142 | 2143 | restore-cursor@^1.0.1: 2144 | version "1.0.1" 2145 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" 2146 | dependencies: 2147 | exit-hook "^1.0.0" 2148 | onetime "^1.0.0" 2149 | 2150 | restore-cursor@^2.0.0: 2151 | version "2.0.0" 2152 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" 2153 | dependencies: 2154 | onetime "^2.0.0" 2155 | signal-exit "^3.0.2" 2156 | 2157 | right-align@^0.1.1: 2158 | version "0.1.3" 2159 | resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" 2160 | dependencies: 2161 | align-text "^0.1.1" 2162 | 2163 | rimraf@^2.2.8: 2164 | version "2.6.1" 2165 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" 2166 | dependencies: 2167 | glob "^7.0.5" 2168 | 2169 | rollup-plugin-babel@^2.7.1: 2170 | version "2.7.1" 2171 | resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-2.7.1.tgz#16528197b0f938a1536f44683c7a93d573182f57" 2172 | dependencies: 2173 | babel-core "6" 2174 | babel-plugin-transform-es2015-classes "^6.9.0" 2175 | object-assign "^4.1.0" 2176 | rollup-pluginutils "^1.5.0" 2177 | 2178 | rollup-plugin-node-resolve@^3.0.0: 2179 | version "3.0.0" 2180 | resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.0.0.tgz#8b897c4c3030d5001277b0514b25d2ca09683ee0" 2181 | dependencies: 2182 | browser-resolve "^1.11.0" 2183 | builtin-modules "^1.1.0" 2184 | is-module "^1.0.0" 2185 | resolve "^1.1.6" 2186 | 2187 | rollup-pluginutils@^1.5.0: 2188 | version "1.5.2" 2189 | resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz#1e156e778f94b7255bfa1b3d0178be8f5c552408" 2190 | dependencies: 2191 | estree-walker "^0.2.1" 2192 | minimatch "^3.0.2" 2193 | 2194 | rollup@^0.41.6: 2195 | version "0.41.6" 2196 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.41.6.tgz#e0d05497877a398c104d816d2733a718a7a94e2a" 2197 | dependencies: 2198 | source-map-support "^0.4.0" 2199 | 2200 | run-async@^2.2.0: 2201 | version "2.4.1" 2202 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" 2203 | 2204 | rx-lite-aggregates@^4.0.8: 2205 | version "4.0.8" 2206 | resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" 2207 | dependencies: 2208 | rx-lite "*" 2209 | 2210 | rx-lite@*, rx-lite@^4.0.8: 2211 | version "4.0.8" 2212 | resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" 2213 | 2214 | rxjs@^5.0.0-beta.11: 2215 | version "5.3.0" 2216 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.3.0.tgz#d88ccbdd46af290cbdb97d5d8055e52453fabe2d" 2217 | dependencies: 2218 | symbol-observable "^1.0.1" 2219 | 2220 | "safer-buffer@>= 2.1.2 < 3": 2221 | version "2.1.2" 2222 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 2223 | 2224 | "semver@2 || 3 || 4 || 5", semver@^5.3.0: 2225 | version "5.7.1" 2226 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 2227 | 2228 | shebang-command@^1.2.0: 2229 | version "1.2.0" 2230 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 2231 | dependencies: 2232 | shebang-regex "^1.0.0" 2233 | 2234 | shebang-regex@^1.0.0: 2235 | version "1.0.0" 2236 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 2237 | 2238 | signal-exit@^3.0.0: 2239 | version "3.0.2" 2240 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 2241 | 2242 | signal-exit@^3.0.2: 2243 | version "3.0.3" 2244 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" 2245 | 2246 | slash@^1.0.0: 2247 | version "1.0.0" 2248 | resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" 2249 | 2250 | slice-ansi@0.0.4: 2251 | version "0.0.4" 2252 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" 2253 | 2254 | slice-ansi@1.0.0: 2255 | version "1.0.0" 2256 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" 2257 | dependencies: 2258 | is-fullwidth-code-point "^2.0.0" 2259 | 2260 | source-map-support@^0.4.0, source-map-support@^0.4.2: 2261 | version "0.4.14" 2262 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.14.tgz#9d4463772598b86271b4f523f6c1f4e02a7d6aef" 2263 | dependencies: 2264 | source-map "^0.5.6" 2265 | 2266 | source-map@^0.5.0, source-map@^0.5.6, source-map@~0.5.1: 2267 | version "0.5.6" 2268 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" 2269 | 2270 | spdx-correct@^3.0.0: 2271 | version "3.1.1" 2272 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" 2273 | integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== 2274 | dependencies: 2275 | spdx-expression-parse "^3.0.0" 2276 | spdx-license-ids "^3.0.0" 2277 | 2278 | spdx-exceptions@^2.1.0: 2279 | version "2.3.0" 2280 | resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" 2281 | integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== 2282 | 2283 | spdx-expression-parse@^3.0.0: 2284 | version "3.0.1" 2285 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" 2286 | integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== 2287 | dependencies: 2288 | spdx-exceptions "^2.1.0" 2289 | spdx-license-ids "^3.0.0" 2290 | 2291 | spdx-license-ids@^3.0.0: 2292 | version "3.0.5" 2293 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" 2294 | integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== 2295 | 2296 | sprintf-js@~1.0.2: 2297 | version "1.0.3" 2298 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 2299 | 2300 | staged-git-files@0.0.4: 2301 | version "0.0.4" 2302 | resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-0.0.4.tgz#d797e1b551ca7a639dec0237dc6eb4bb9be17d35" 2303 | 2304 | stream-to-observable@^0.1.0: 2305 | version "0.1.0" 2306 | resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.1.0.tgz#45bf1d9f2d7dc09bed81f1c307c430e68b84cffe" 2307 | 2308 | string-width@^1.0.1: 2309 | version "1.0.2" 2310 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 2311 | dependencies: 2312 | code-point-at "^1.0.0" 2313 | is-fullwidth-code-point "^1.0.0" 2314 | strip-ansi "^3.0.0" 2315 | 2316 | string-width@^2.1.0, string-width@^2.1.1: 2317 | version "2.1.1" 2318 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 2319 | dependencies: 2320 | is-fullwidth-code-point "^2.0.0" 2321 | strip-ansi "^4.0.0" 2322 | 2323 | string_decoder@~1.0.0: 2324 | version "1.0.0" 2325 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.0.tgz#f06f41157b664d86069f84bdbdc9b0d8ab281667" 2326 | dependencies: 2327 | buffer-shims "~1.0.0" 2328 | 2329 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 2330 | version "3.0.1" 2331 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 2332 | dependencies: 2333 | ansi-regex "^2.0.0" 2334 | 2335 | strip-ansi@^4.0.0: 2336 | version "4.0.0" 2337 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 2338 | dependencies: 2339 | ansi-regex "^3.0.0" 2340 | 2341 | strip-eof@^1.0.0: 2342 | version "1.0.0" 2343 | resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" 2344 | 2345 | strip-json-comments@~2.0.1: 2346 | version "2.0.1" 2347 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 2348 | 2349 | supports-color@3.1.2: 2350 | version "3.1.2" 2351 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" 2352 | dependencies: 2353 | has-flag "^1.0.0" 2354 | 2355 | supports-color@^2.0.0: 2356 | version "2.0.0" 2357 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 2358 | 2359 | supports-color@^5.3.0: 2360 | version "5.5.0" 2361 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 2362 | dependencies: 2363 | has-flag "^3.0.0" 2364 | 2365 | supports-color@^7.1.0: 2366 | version "7.2.0" 2367 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 2368 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 2369 | dependencies: 2370 | has-flag "^4.0.0" 2371 | 2372 | symbol-observable@^1.0.1: 2373 | version "1.0.4" 2374 | resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" 2375 | 2376 | table@4.0.2: 2377 | version "4.0.2" 2378 | resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" 2379 | dependencies: 2380 | ajv "^5.2.3" 2381 | ajv-keywords "^2.1.0" 2382 | chalk "^2.1.0" 2383 | lodash "^4.17.4" 2384 | slice-ansi "1.0.0" 2385 | string-width "^2.1.1" 2386 | 2387 | text-table@~0.2.0: 2388 | version "0.2.0" 2389 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 2390 | 2391 | through@^2.3.6: 2392 | version "2.3.8" 2393 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 2394 | 2395 | tmp@^0.0.33: 2396 | version "0.0.33" 2397 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" 2398 | dependencies: 2399 | os-tmpdir "~1.0.2" 2400 | 2401 | to-fast-properties@^1.0.1: 2402 | version "1.0.2" 2403 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320" 2404 | 2405 | trim-right@^1.0.1: 2406 | version "1.0.1" 2407 | resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" 2408 | 2409 | tryit@^1.0.1: 2410 | version "1.0.3" 2411 | resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" 2412 | 2413 | type-check@~0.3.2: 2414 | version "0.3.2" 2415 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 2416 | dependencies: 2417 | prelude-ls "~1.1.2" 2418 | 2419 | type-fest@^0.6.0: 2420 | version "0.6.0" 2421 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" 2422 | integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== 2423 | 2424 | type-fest@^0.8.1: 2425 | version "0.8.1" 2426 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" 2427 | integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== 2428 | 2429 | typedarray@^0.0.6: 2430 | version "0.0.6" 2431 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" 2432 | 2433 | uglify-js@^2.8.22: 2434 | version "2.8.22" 2435 | resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.22.tgz#d54934778a8da14903fa29a326fb24c0ab51a1a0" 2436 | dependencies: 2437 | source-map "~0.5.1" 2438 | yargs "~3.10.0" 2439 | optionalDependencies: 2440 | uglify-to-browserify "~1.0.0" 2441 | 2442 | uglify-to-browserify@~1.0.0: 2443 | version "1.0.2" 2444 | resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" 2445 | 2446 | util-deprecate@~1.0.1: 2447 | version "1.0.2" 2448 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 2449 | 2450 | validate-npm-package-license@^3.0.1: 2451 | version "3.0.4" 2452 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" 2453 | integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== 2454 | dependencies: 2455 | spdx-correct "^3.0.0" 2456 | spdx-expression-parse "^3.0.0" 2457 | 2458 | which@^1.2.10, which@^1.2.9: 2459 | version "1.2.14" 2460 | resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" 2461 | dependencies: 2462 | isexe "^2.0.0" 2463 | 2464 | window-size@0.1.0: 2465 | version "0.1.0" 2466 | resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" 2467 | 2468 | wordwrap@0.0.2: 2469 | version "0.0.2" 2470 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" 2471 | 2472 | wordwrap@~1.0.0: 2473 | version "1.0.0" 2474 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" 2475 | 2476 | wrappy@1: 2477 | version "1.0.2" 2478 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2479 | 2480 | write@^0.2.1: 2481 | version "0.2.1" 2482 | resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" 2483 | dependencies: 2484 | mkdirp "^0.5.1" 2485 | 2486 | yallist@^2.0.0: 2487 | version "2.1.2" 2488 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" 2489 | 2490 | yargs@~3.10.0: 2491 | version "3.10.0" 2492 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" 2493 | dependencies: 2494 | camelcase "^1.0.2" 2495 | cliui "^2.1.0" 2496 | decamelize "^1.0.0" 2497 | window-size "0.1.0" 2498 | --------------------------------------------------------------------------------