├── .flowconfig ├── .gitignore ├── .travis.yml ├── LICENSE ├── README.md ├── index.js ├── package.json ├── test.js └── yarn.lock /.flowconfig: -------------------------------------------------------------------------------- 1 | [ignore] 2 | .*/node_modules/polished/.* 3 | 4 | [include] 5 | 6 | [libs] 7 | 8 | [options] 9 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | *.log 3 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "0.12" 4 | - "iojs" 5 | - v4 6 | - v5 7 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | COPYRIGHT (c) 2017-present James Kyle 2 | 3 | MIT License 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining 6 | a copy of this software and associated documentation files (the 7 | "Software"), to deal in the Software without restriction, including 8 | without limitation the rights to use, copy, modify, merge, publish, 9 | distribute, sublicense, and/or sell copies of the Software, and to 10 | permit persons to whom the Software is furnished to do so, subject to 11 | the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 20 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 21 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 22 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # babel-plugin-polished 2 | 3 | Compile away [polished](https://polished.js.org/) helpers. 4 | 5 | ## Example 6 | 7 | **In** 8 | 9 | ```js 10 | import * as polished from 'polished'; 11 | 12 | let value = polished.clearFix(); 13 | ``` 14 | 15 | **Out** 16 | 17 | ```js 18 | let value = { 19 | '&::after': { 20 | clear: 'both', 21 | content: '', 22 | display: 'table' 23 | } 24 | }; 25 | ``` 26 | 27 | ## Installation 28 | 29 | ```sh 30 | $ npm install babel-plugin-polished 31 | ``` 32 | 33 | ## Usage 34 | 35 | ### Via `.babelrc` (Recommended) 36 | 37 | **.babelrc** 38 | 39 | ```json 40 | { 41 | "plugins": ["polished"] 42 | } 43 | ``` 44 | 45 | ### Via CLI 46 | 47 | ```sh 48 | $ babel --plugins polished script.js 49 | ``` 50 | 51 | ### Via Node API 52 | 53 | ```javascript 54 | require("babel-core").transform("code", { 55 | plugins: ["polished"] 56 | }); 57 | ``` 58 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | // @flow 2 | 'use strict'; 3 | 4 | const unsafeRequire = require; 5 | 6 | /*:: 7 | type Types = { 8 | valueToNode(mixed): Node, 9 | }; 10 | 11 | type Node = { 12 | type: string, 13 | [key: string]: any, 14 | }; 15 | 16 | type Path = { 17 | type: string, 18 | node: Node, 19 | [key: string]: any, 20 | }; 21 | */ 22 | 23 | module.exports = ({ types: t } /*: { types: Types } */) => { 24 | return { 25 | name: 'polished', 26 | visitor: { 27 | ImportDeclaration(path /*: Path */) { 28 | let source = path.get('source'); 29 | let sourceValue = source.node.value; 30 | let specifiers = path.get('specifiers'); 31 | 32 | if (sourceValue.indexOf('polished') !== 0) return; 33 | 34 | let safeSourceValue = sourceValue.replace(/^polished\/src/, 'polished/lib') 35 | let importedModule = unsafeRequire(safeSourceValue); 36 | 37 | let invalidatedSpecifiers = specifiers.filter(specifier => { 38 | let importedValue = importedModule; 39 | 40 | if (specifier.node.imported) { 41 | let imported = specifier.get('imported'); 42 | let importedName = imported.node.name; 43 | let value = importedValue[importedName]; 44 | 45 | if (!value) { 46 | throw imported.buildCodeFrameError('Method does not exist: ' + importedName); 47 | } 48 | 49 | importedValue = value; 50 | } 51 | 52 | let local = specifier.get('local'); 53 | let binding = local.scope.getBinding(local.node.name); 54 | let refs = binding.referencePaths; 55 | 56 | let invalidatedRefs = refs.filter(ref => { 57 | let matchedMethod = importedValue; 58 | 59 | let callExpression = ref.findParent(parent => { 60 | if (parent.isCallExpression()) { 61 | return true; 62 | } else if (parent.isMemberExpression()) { 63 | let property = parent.get('property'); 64 | let methodName = property.node.name; 65 | let method = matchedMethod[methodName]; 66 | 67 | if (!method) { 68 | throw property.buildCodeFrameError('Method does not exist: ' + methodName); 69 | } 70 | 71 | matchedMethod = method; 72 | return false; 73 | } else { 74 | throw parent.buildCodeFrameError("Unexpected node type: " + parent.type); 75 | } 76 | }); 77 | 78 | let args = callExpression.get('arguments'); 79 | let foundNonLiteral = args.find(arg => !arg.isLiteral()); 80 | if (foundNonLiteral) return true; 81 | 82 | let serializedArgs = args.map(arg => { 83 | if (arg.isNullLiteral()) { 84 | return null; 85 | } else { 86 | return arg.node.value 87 | } 88 | }); 89 | 90 | let result = matchedMethod(...serializedArgs); 91 | let resultAst = t.valueToNode(result); 92 | 93 | callExpression.replaceWith(resultAst); 94 | return false; 95 | }); 96 | 97 | if (!invalidatedRefs.length) { 98 | specifier.remove(); 99 | return false; 100 | } else { 101 | return true; 102 | } 103 | }); 104 | 105 | if (!invalidatedSpecifiers.length) { 106 | path.remove(); 107 | } 108 | } 109 | } 110 | }; 111 | } 112 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "babel-plugin-polished", 3 | "version": "1.1.0", 4 | "description": "Compile away polished helpers", 5 | "repository": "styled-components/babel-plugin-polished", 6 | "license": "MIT", 7 | "author": "James Kyle ", 8 | "main": "index.js", 9 | "files": [], 10 | "keywords": [ 11 | "polished", 12 | "styled", 13 | "components", 14 | "babel-plugin" 15 | ], 16 | "scripts": { 17 | "test": "jest" 18 | }, 19 | "dependencies": { 20 | "polished": "^1.0.0" 21 | }, 22 | "devDependencies": { 23 | "babel-plugin-tester": "^3.0.0", 24 | "flow-bin": "^0.47.0" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /test.js: -------------------------------------------------------------------------------- 1 | // @flow 2 | 'use strict'; 3 | 4 | const pluginTester = require('babel-plugin-tester'); 5 | const plugin = require('./'); 6 | 7 | pluginTester({ 8 | plugin, 9 | tests: [ 10 | { 11 | title: 'namespace', 12 | code: ` 13 | import * as polished from 'polished'; 14 | 15 | let a = polished.clearFix(); 16 | let b = polished.clearFix('parent'); 17 | let c = polished.ellipsis(); 18 | let d = polished.ellipsis('250px'); 19 | `, 20 | output: ` 21 | let a = { 22 | '&::after': { 23 | clear: 'both', 24 | content: '', 25 | display: 'table' 26 | } 27 | }; 28 | let b = { 29 | 'parent::after': { 30 | clear: 'both', 31 | content: '', 32 | display: 'table' 33 | } 34 | }; 35 | let c = { 36 | display: 'inline-block', 37 | 'max-width': '100%', 38 | overflow: 'hidden', 39 | 'text-overflow': 'ellipsis', 40 | 'white-space': 'nowrap', 41 | 'word-wrap': 'normal' 42 | }; 43 | let d = { 44 | display: 'inline-block', 45 | 'max-width': '250px', 46 | overflow: 'hidden', 47 | 'text-overflow': 'ellipsis', 48 | 'white-space': 'nowrap', 49 | 'word-wrap': 'normal' 50 | }; 51 | `, 52 | }, 53 | { 54 | title: 'nested paths', 55 | code: ` 56 | import clearFix from 'polished/src/mixins/clearFix'; 57 | import ellipsis from 'polished/src/mixins/ellipsis'; 58 | 59 | let a = clearFix(); 60 | let b = clearFix('parent'); 61 | let c = ellipsis(); 62 | let d = ellipsis('250px'); 63 | `, 64 | output: ` 65 | let a = { 66 | '&::after': { 67 | clear: 'both', 68 | content: '', 69 | display: 'table' 70 | } 71 | }; 72 | let b = { 73 | 'parent::after': { 74 | clear: 'both', 75 | content: '', 76 | display: 'table' 77 | } 78 | }; 79 | let c = { 80 | display: 'inline-block', 81 | 'max-width': '100%', 82 | overflow: 'hidden', 83 | 'text-overflow': 'ellipsis', 84 | 'white-space': 'nowrap', 85 | 'word-wrap': 'normal' 86 | }; 87 | let d = { 88 | display: 'inline-block', 89 | 'max-width': '250px', 90 | overflow: 'hidden', 91 | 'text-overflow': 'ellipsis', 92 | 'white-space': 'nowrap', 93 | 'word-wrap': 'normal' 94 | }; 95 | `, 96 | }, 97 | { 98 | title: 'specifiers', 99 | code: ` 100 | import {clearFix, ellipsis} from 'polished'; 101 | 102 | let a = clearFix(); 103 | let b = clearFix('parent'); 104 | let c = ellipsis(); 105 | let d = ellipsis('250px'); 106 | `, 107 | output: ` 108 | let a = { 109 | '&::after': { 110 | clear: 'both', 111 | content: '', 112 | display: 'table' 113 | } 114 | }; 115 | let b = { 116 | 'parent::after': { 117 | clear: 'both', 118 | content: '', 119 | display: 'table' 120 | } 121 | }; 122 | let c = { 123 | display: 'inline-block', 124 | 'max-width': '100%', 125 | overflow: 'hidden', 126 | 'text-overflow': 'ellipsis', 127 | 'white-space': 'nowrap', 128 | 'word-wrap': 'normal' 129 | }; 130 | let d = { 131 | display: 'inline-block', 132 | 'max-width': '250px', 133 | overflow: 'hidden', 134 | 'text-overflow': 'ellipsis', 135 | 'white-space': 'nowrap', 136 | 'word-wrap': 'normal' 137 | }; 138 | `, 139 | }, 140 | { 141 | title: 'non-literal arg', 142 | code: ` 143 | import * as polished from 'polished'; 144 | 145 | let parent = 'parent'; 146 | 147 | let a = polished.clearFix(parent); 148 | let b = polished.clearFix('parent'); 149 | `, 150 | output: ` 151 | import * as polished from 'polished'; 152 | 153 | let parent = 'parent'; 154 | 155 | let a = polished.clearFix(parent); 156 | let b = { 157 | 'parent::after': { 158 | clear: 'both', 159 | content: '', 160 | display: 'table' 161 | } 162 | }; 163 | `, 164 | }, 165 | { 166 | title: 'null args', 167 | code: ` 168 | import {position} from 'polished'; 169 | 170 | let a = position('absolute', '20px', '20px', null, null) 171 | `, 172 | output: ` 173 | let a = { 174 | position: 'absolute', 175 | top: '20px', 176 | right: '20px' 177 | }; 178 | `, 179 | }, 180 | ], 181 | }); 182 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | ansi-regex@^2.0.0: 6 | version "2.1.1" 7 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 8 | 9 | ansi-styles@^2.2.1: 10 | version "2.2.1" 11 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 12 | 13 | babel-code-frame@^6.22.0: 14 | version "6.22.0" 15 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" 16 | dependencies: 17 | chalk "^1.1.0" 18 | esutils "^2.0.2" 19 | js-tokens "^3.0.0" 20 | 21 | babel-core@^6.24.1: 22 | version "6.24.1" 23 | resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.24.1.tgz#8c428564dce1e1f41fb337ec34f4c3b022b5ad83" 24 | dependencies: 25 | babel-code-frame "^6.22.0" 26 | babel-generator "^6.24.1" 27 | babel-helpers "^6.24.1" 28 | babel-messages "^6.23.0" 29 | babel-register "^6.24.1" 30 | babel-runtime "^6.22.0" 31 | babel-template "^6.24.1" 32 | babel-traverse "^6.24.1" 33 | babel-types "^6.24.1" 34 | babylon "^6.11.0" 35 | convert-source-map "^1.1.0" 36 | debug "^2.1.1" 37 | json5 "^0.5.0" 38 | lodash "^4.2.0" 39 | minimatch "^3.0.2" 40 | path-is-absolute "^1.0.0" 41 | private "^0.1.6" 42 | slash "^1.0.0" 43 | source-map "^0.5.0" 44 | 45 | babel-generator@^6.24.1: 46 | version "6.24.1" 47 | resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.24.1.tgz#e715f486c58ded25649d888944d52aa07c5d9497" 48 | dependencies: 49 | babel-messages "^6.23.0" 50 | babel-runtime "^6.22.0" 51 | babel-types "^6.24.1" 52 | detect-indent "^4.0.0" 53 | jsesc "^1.3.0" 54 | lodash "^4.2.0" 55 | source-map "^0.5.0" 56 | trim-right "^1.0.1" 57 | 58 | babel-helpers@^6.24.1: 59 | version "6.24.1" 60 | resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" 61 | dependencies: 62 | babel-runtime "^6.22.0" 63 | babel-template "^6.24.1" 64 | 65 | babel-messages@^6.23.0: 66 | version "6.23.0" 67 | resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" 68 | dependencies: 69 | babel-runtime "^6.22.0" 70 | 71 | babel-plugin-tester@^3.0.0: 72 | version "3.0.0" 73 | resolved "https://registry.yarnpkg.com/babel-plugin-tester/-/babel-plugin-tester-3.0.0.tgz#402910cc5b7c9e5c2d88a6c40dbbac20f42d2258" 74 | dependencies: 75 | babel-core "^6.24.1" 76 | common-tags "^1.4.0" 77 | invariant "^2.2.2" 78 | lodash.merge "^4.6.0" 79 | path-exists "^3.0.0" 80 | strip-indent "^2.0.0" 81 | 82 | babel-register@^6.24.1: 83 | version "6.24.1" 84 | resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.24.1.tgz#7e10e13a2f71065bdfad5a1787ba45bca6ded75f" 85 | dependencies: 86 | babel-core "^6.24.1" 87 | babel-runtime "^6.22.0" 88 | core-js "^2.4.0" 89 | home-or-tmp "^2.0.0" 90 | lodash "^4.2.0" 91 | mkdirp "^0.5.1" 92 | source-map-support "^0.4.2" 93 | 94 | babel-runtime@^6.18.0, babel-runtime@^6.22.0: 95 | version "6.23.0" 96 | resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" 97 | dependencies: 98 | core-js "^2.4.0" 99 | regenerator-runtime "^0.10.0" 100 | 101 | babel-template@^6.24.1: 102 | version "6.24.1" 103 | resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.24.1.tgz#04ae514f1f93b3a2537f2a0f60a5a45fb8308333" 104 | dependencies: 105 | babel-runtime "^6.22.0" 106 | babel-traverse "^6.24.1" 107 | babel-types "^6.24.1" 108 | babylon "^6.11.0" 109 | lodash "^4.2.0" 110 | 111 | babel-traverse@^6.24.1: 112 | version "6.24.1" 113 | resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.24.1.tgz#ab36673fd356f9a0948659e7b338d5feadb31695" 114 | dependencies: 115 | babel-code-frame "^6.22.0" 116 | babel-messages "^6.23.0" 117 | babel-runtime "^6.22.0" 118 | babel-types "^6.24.1" 119 | babylon "^6.15.0" 120 | debug "^2.2.0" 121 | globals "^9.0.0" 122 | invariant "^2.2.0" 123 | lodash "^4.2.0" 124 | 125 | babel-types@^6.24.1: 126 | version "6.24.1" 127 | resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.24.1.tgz#a136879dc15b3606bda0d90c1fc74304c2ff0975" 128 | dependencies: 129 | babel-runtime "^6.22.0" 130 | esutils "^2.0.2" 131 | lodash "^4.2.0" 132 | to-fast-properties "^1.0.1" 133 | 134 | babylon@^6.11.0, babylon@^6.15.0: 135 | version "6.16.1" 136 | resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.16.1.tgz#30c5a22f481978a9e7f8cdfdf496b11d94b404d3" 137 | 138 | balanced-match@^0.4.1: 139 | version "0.4.2" 140 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" 141 | 142 | brace-expansion@^1.0.0: 143 | version "1.1.6" 144 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" 145 | dependencies: 146 | balanced-match "^0.4.1" 147 | concat-map "0.0.1" 148 | 149 | chalk@^1.1.0: 150 | version "1.1.3" 151 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 152 | dependencies: 153 | ansi-styles "^2.2.1" 154 | escape-string-regexp "^1.0.2" 155 | has-ansi "^2.0.0" 156 | strip-ansi "^3.0.0" 157 | supports-color "^2.0.0" 158 | 159 | common-tags@^1.4.0: 160 | version "1.4.0" 161 | resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.4.0.tgz#1187be4f3d4cf0c0427d43f74eef1f73501614c0" 162 | dependencies: 163 | babel-runtime "^6.18.0" 164 | 165 | concat-map@0.0.1: 166 | version "0.0.1" 167 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 168 | 169 | convert-source-map@^1.1.0: 170 | version "1.5.0" 171 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" 172 | 173 | core-js@^2.4.0: 174 | version "2.4.1" 175 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" 176 | 177 | debug@^2.1.1, debug@^2.2.0: 178 | version "2.2.0" 179 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" 180 | dependencies: 181 | ms "0.7.1" 182 | 183 | detect-indent@^4.0.0: 184 | version "4.0.0" 185 | resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" 186 | dependencies: 187 | repeating "^2.0.0" 188 | 189 | escape-string-regexp@^1.0.2: 190 | version "1.0.2" 191 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz#4dbc2fe674e71949caf3fb2695ce7f2dc1d9a8d1" 192 | 193 | esutils@^2.0.2: 194 | version "2.0.2" 195 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 196 | 197 | flow-bin@^0.47.0: 198 | version "0.47.0" 199 | resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.47.0.tgz#a2a08ab3e0d1f1cb57d17e27b30b118b62fda367" 200 | 201 | globals@^9.0.0: 202 | version "9.17.0" 203 | resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286" 204 | 205 | has-ansi@^2.0.0: 206 | version "2.0.0" 207 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 208 | dependencies: 209 | ansi-regex "^2.0.0" 210 | 211 | home-or-tmp@^2.0.0: 212 | version "2.0.0" 213 | resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" 214 | dependencies: 215 | os-homedir "^1.0.0" 216 | os-tmpdir "^1.0.1" 217 | 218 | invariant@^2.2.0, invariant@^2.2.2: 219 | version "2.2.2" 220 | resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" 221 | dependencies: 222 | loose-envify "^1.0.0" 223 | 224 | is-finite@^1.0.0: 225 | version "1.0.2" 226 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" 227 | dependencies: 228 | number-is-nan "^1.0.0" 229 | 230 | js-tokens@^3.0.0: 231 | version "3.0.1" 232 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" 233 | 234 | jsesc@^1.3.0: 235 | version "1.3.0" 236 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" 237 | 238 | json5@^0.5.0: 239 | version "0.5.1" 240 | resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" 241 | 242 | lodash.merge@^4.6.0: 243 | version "4.6.0" 244 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.0.tgz#69884ba144ac33fe699737a6086deffadd0f89c5" 245 | 246 | lodash@^4.2.0: 247 | version "4.17.4" 248 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" 249 | 250 | loose-envify@^1.0.0: 251 | version "1.3.1" 252 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" 253 | dependencies: 254 | js-tokens "^3.0.0" 255 | 256 | minimatch@^3.0.2: 257 | version "3.0.3" 258 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" 259 | dependencies: 260 | brace-expansion "^1.0.0" 261 | 262 | minimist@0.0.8: 263 | version "0.0.8" 264 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 265 | 266 | mkdirp@^0.5.1: 267 | version "0.5.1" 268 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 269 | dependencies: 270 | minimist "0.0.8" 271 | 272 | ms@0.7.1: 273 | version "0.7.1" 274 | resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" 275 | 276 | number-is-nan@^1.0.0: 277 | version "1.0.1" 278 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 279 | 280 | os-homedir@^1.0.0: 281 | version "1.0.2" 282 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 283 | 284 | os-tmpdir@^1.0.1: 285 | version "1.0.2" 286 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 287 | 288 | path-exists@^3.0.0: 289 | version "3.0.0" 290 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 291 | 292 | path-is-absolute@^1.0.0: 293 | version "1.0.1" 294 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 295 | 296 | polished@^1.0.0: 297 | version "1.0.0" 298 | resolved "https://registry.yarnpkg.com/polished/-/polished-1.0.0.tgz#0a350447c974cf1211fa08356d9e3d31e5275010" 299 | 300 | private@^0.1.6: 301 | version "0.1.7" 302 | resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" 303 | 304 | regenerator-runtime@^0.10.0: 305 | version "0.10.3" 306 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.3.tgz#8c4367a904b51ea62a908ac310bf99ff90a82a3e" 307 | 308 | repeating@^2.0.0: 309 | version "2.0.1" 310 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" 311 | dependencies: 312 | is-finite "^1.0.0" 313 | 314 | slash@^1.0.0: 315 | version "1.0.0" 316 | resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" 317 | 318 | source-map-support@^0.4.2: 319 | version "0.4.14" 320 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.14.tgz#9d4463772598b86271b4f523f6c1f4e02a7d6aef" 321 | dependencies: 322 | source-map "^0.5.6" 323 | 324 | source-map@^0.5.0, source-map@^0.5.6: 325 | version "0.5.6" 326 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" 327 | 328 | strip-ansi@^3.0.0: 329 | version "3.0.1" 330 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 331 | dependencies: 332 | ansi-regex "^2.0.0" 333 | 334 | strip-indent@^2.0.0: 335 | version "2.0.0" 336 | resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" 337 | 338 | supports-color@^2.0.0: 339 | version "2.0.0" 340 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 341 | 342 | to-fast-properties@^1.0.1: 343 | version "1.0.2" 344 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320" 345 | 346 | trim-right@^1.0.1: 347 | version "1.0.1" 348 | resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" 349 | --------------------------------------------------------------------------------