├── .gitignore ├── .npmignore ├── LICENSE ├── README.md ├── index.js ├── package.json ├── prettier.config.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | ############# 2 | # IDE trash # 3 | ############# 4 | 5 | # IntelliJ IDEA 6 | 7 | .idea/ 8 | 9 | *.iml 10 | 11 | # Visual Studio Code 12 | 13 | .vscode/ 14 | 15 | # Cloud9 16 | 17 | .c9/ 18 | 19 | ################### 20 | # Ecosystem trash # 21 | ################### 22 | 23 | # NodeJS 24 | 25 | node_modules/ 26 | 27 | # Various 28 | 29 | *.log 30 | 31 | ################# 32 | # Project trash # 33 | ################# 34 | 35 | build/ 36 | cache/ 37 | coverage/ 38 | dist/ 39 | temp/ 40 | var/ 41 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | ############# 2 | # IDE trash # 3 | ############# 4 | 5 | # IntelliJ IDEA 6 | 7 | .idea/ 8 | 9 | *.iml 10 | 11 | # Visual Studio Code 12 | 13 | .vscode/ 14 | 15 | # Cloud9 16 | 17 | .c9/ 18 | 19 | ################### 20 | # Ecosystem trash # 21 | ################### 22 | 23 | # Git 24 | 25 | .gitignore 26 | 27 | # Prettier 28 | 29 | prettier.config.js 30 | 31 | # Various 32 | 33 | *.log 34 | 35 | ################# 36 | # Project trash # 37 | ################# 38 | 39 | build/ 40 | cache/ 41 | coverage/ 42 | src/ 43 | temp/ 44 | typings/ 45 | var/ 46 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2018 Marina Miyaoka 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | SOFTWARE. 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # less-plugin-custom-properties 2 | 3 | > LESS plugin to transform LESS variables to CSS custom properties 4 | 5 | ## Install 6 | 7 | ```bash 8 | $ yarn add -D less-plugin-custom-properties 9 | ``` 10 | 11 | ## Example 12 | 13 | ```less 14 | @plugin 'custom-properties'; 15 | 16 | @bg: #000; // Declare 17 | @fg: #fff; 18 | @font: external(--font); // Use external (see below) 19 | 20 | @media (print) { 21 | @bg: #fff; // Override 22 | @fg: #000; 23 | } 24 | 25 | .page { 26 | background-color: @bg; // Use 27 | color: @fg; 28 | width: 100% - 100px; // Bonus 29 | } 30 | 31 | // ↓↓↓↓ 32 | 33 | :root { 34 | --bg: #000; 35 | --fg: #fff; 36 | --font: Roboto, sans-serif; 37 | } 38 | 39 | @media (print) { 40 | :root { 41 | --bg: #fff; 42 | --fg: #000; 43 | } 44 | } 45 | 46 | .page { 47 | background-color: var(--bg); 48 | color: var(--fg); 49 | width: calc(100% - 100px); 50 | } 51 | ``` 52 | 53 | ## Configuration 54 | 55 | ### `less-plugin-custom-properties.config.js` 56 | 57 | ```javascript 58 | module.exports = { 59 | // Define external variables: 60 | variables: { 61 | font: 'Roboto, sans-serif', 62 | }, 63 | }; 64 | ``` 65 | 66 | ## Limitations 67 | 68 | Avoid of using variables in non-declaration contexts (e.g. in media). 69 | Currently variables in such contexts may be transformed to invalid CSS. 70 | 71 | _Instead you can use `postcss-custom-media` and/or `postcss-managed-media`._ 72 | 73 | ## License 74 | 75 | MIT 76 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const cosmiconfig = require('cosmiconfig'); 2 | 3 | const explorer = cosmiconfig('less-plugin-custom-properties'); 4 | 5 | const { config = { variables: {} } } = explorer.searchSync() || {}; 6 | 7 | module.exports = class CustomProperties { 8 | install( 9 | { 10 | tree: { Call, Anonymous, Expression, Ruleset, Declaration, Selector, Element, Combinator }, 11 | visitors, 12 | }, 13 | manager, 14 | functions, 15 | ) { 16 | const call = (name, ...args) => new Call(name, [new Expression(args)]); 17 | 18 | class Visitor { 19 | constructor() { 20 | this.native = new visitors.Visitor(this); 21 | this.isPreEvalVisitor = true; 22 | this.isReplacing = true; 23 | } 24 | 25 | run(root) { 26 | return this.native.visit(root); 27 | } 28 | 29 | visitOperation(node) { 30 | return call('calc', node.operands[0], new Anonymous(node.op), node.operands[1]); 31 | } 32 | 33 | visitDeclaration(node) { 34 | if (!(typeof node.name === 'string') || !node.name.match(/^@/)) { 35 | return node; 36 | } 37 | 38 | const declaration = new Declaration(node.name.replace(/^@/, '--'), node.value); 39 | 40 | if (node.parent.root || (node.parent.parent && node.parent.parent.type === 'Media' && node.parent.parent.parent.root)) { 41 | return new Ruleset([new Selector([new Element(new Combinator(' '), ':root')], [])], [declaration]); 42 | } 43 | 44 | return declaration; 45 | } 46 | 47 | visitNegative(node) { 48 | return call('calc', new Anonymous('-1'), new Anonymous('*'), node.value); 49 | } 50 | 51 | visitVariable(node) { 52 | return call('var', new Anonymous(node.name.replace(/^@/, '--'))); 53 | } 54 | } 55 | 56 | manager.addVisitor(new Visitor()); 57 | 58 | functions.add('external', variable => { 59 | if (variable.type !== 'Keyword') { 60 | return call('var', variable); 61 | } 62 | 63 | const name = variable.value.replace(/^--/, ''); 64 | 65 | if (!(name in config.variables)) { 66 | return call('var', variable); 67 | } 68 | 69 | return new Anonymous(String(config.variables[name])); 70 | }); 71 | } 72 | }; 73 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "less-plugin-custom-properties", 3 | "version": "0.0.1", 4 | "description": "LESS plugin to transform LESS variables to CSS custom properties", 5 | "main": "index.js", 6 | "repository": "https://github.com/miyamarisubs/less-plugin-custom-properties", 7 | "author": "Marina Miyaoka (https://t.me/miyaokamarina)", 8 | "license": "MIT", 9 | "dependencies": { 10 | "cosmiconfig": "^5.0.2" 11 | }, 12 | "devDependencies": { 13 | "less": "^3.0.4", 14 | "prettier": "^1.12.1" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /prettier.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | bracketSpacing: true, 3 | jsxBracketSameLine: false, 4 | printWidth: 160, 5 | semi: true, 6 | singleQuote: true, 7 | tabWidth: 4, 8 | trailingComma: 'all', 9 | useTabs: false, 10 | }; 11 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | ajv@^5.1.0: 6 | version "5.5.2" 7 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" 8 | dependencies: 9 | co "^4.6.0" 10 | fast-deep-equal "^1.0.0" 11 | fast-json-stable-stringify "^2.0.0" 12 | json-schema-traverse "^0.3.0" 13 | 14 | argparse@^1.0.7: 15 | version "1.0.10" 16 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 17 | dependencies: 18 | sprintf-js "~1.0.2" 19 | 20 | asap@~2.0.3: 21 | version "2.0.6" 22 | resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" 23 | 24 | asn1@~0.2.3: 25 | version "0.2.3" 26 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" 27 | 28 | assert-plus@1.0.0, assert-plus@^1.0.0: 29 | version "1.0.0" 30 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 31 | 32 | asynckit@^0.4.0: 33 | version "0.4.0" 34 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 35 | 36 | aws-sign2@~0.7.0: 37 | version "0.7.0" 38 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" 39 | 40 | aws4@^1.6.0: 41 | version "1.7.0" 42 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.7.0.tgz#d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289" 43 | 44 | bcrypt-pbkdf@^1.0.0: 45 | version "1.0.1" 46 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" 47 | dependencies: 48 | tweetnacl "^0.14.3" 49 | 50 | boom@4.x.x: 51 | version "4.3.1" 52 | resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" 53 | dependencies: 54 | hoek "4.x.x" 55 | 56 | boom@5.x.x: 57 | version "5.2.0" 58 | resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" 59 | dependencies: 60 | hoek "4.x.x" 61 | 62 | caseless@~0.12.0: 63 | version "0.12.0" 64 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 65 | 66 | co@^4.6.0: 67 | version "4.6.0" 68 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 69 | 70 | combined-stream@1.0.6, combined-stream@~1.0.5: 71 | version "1.0.6" 72 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" 73 | dependencies: 74 | delayed-stream "~1.0.0" 75 | 76 | core-util-is@1.0.2: 77 | version "1.0.2" 78 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 79 | 80 | cosmiconfig@^5.0.2: 81 | version "5.0.2" 82 | resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.2.tgz#03f8965ae4675317a0015b4a5a48a470d9baeada" 83 | dependencies: 84 | is-directory "^0.3.1" 85 | js-yaml "^3.9.0" 86 | parse-json "^4.0.0" 87 | 88 | cryptiles@3.x.x: 89 | version "3.1.2" 90 | resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" 91 | dependencies: 92 | boom "5.x.x" 93 | 94 | dashdash@^1.12.0: 95 | version "1.14.1" 96 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 97 | dependencies: 98 | assert-plus "^1.0.0" 99 | 100 | delayed-stream@~1.0.0: 101 | version "1.0.0" 102 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 103 | 104 | ecc-jsbn@~0.1.1: 105 | version "0.1.1" 106 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" 107 | dependencies: 108 | jsbn "~0.1.0" 109 | 110 | errno@^0.1.1: 111 | version "0.1.7" 112 | resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" 113 | dependencies: 114 | prr "~1.0.1" 115 | 116 | error-ex@^1.3.1: 117 | version "1.3.1" 118 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" 119 | dependencies: 120 | is-arrayish "^0.2.1" 121 | 122 | esprima@^4.0.0: 123 | version "4.0.0" 124 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" 125 | 126 | extend@~3.0.1: 127 | version "3.0.1" 128 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" 129 | 130 | extsprintf@1.3.0: 131 | version "1.3.0" 132 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" 133 | 134 | extsprintf@^1.2.0: 135 | version "1.4.0" 136 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" 137 | 138 | fast-deep-equal@^1.0.0: 139 | version "1.1.0" 140 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" 141 | 142 | fast-json-stable-stringify@^2.0.0: 143 | version "2.0.0" 144 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" 145 | 146 | forever-agent@~0.6.1: 147 | version "0.6.1" 148 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 149 | 150 | form-data@~2.3.1: 151 | version "2.3.2" 152 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" 153 | dependencies: 154 | asynckit "^0.4.0" 155 | combined-stream "1.0.6" 156 | mime-types "^2.1.12" 157 | 158 | getpass@^0.1.1: 159 | version "0.1.7" 160 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 161 | dependencies: 162 | assert-plus "^1.0.0" 163 | 164 | graceful-fs@^4.1.2: 165 | version "4.1.11" 166 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 167 | 168 | har-schema@^2.0.0: 169 | version "2.0.0" 170 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" 171 | 172 | har-validator@~5.0.3: 173 | version "5.0.3" 174 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" 175 | dependencies: 176 | ajv "^5.1.0" 177 | har-schema "^2.0.0" 178 | 179 | hawk@~6.0.2: 180 | version "6.0.2" 181 | resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" 182 | dependencies: 183 | boom "4.x.x" 184 | cryptiles "3.x.x" 185 | hoek "4.x.x" 186 | sntp "2.x.x" 187 | 188 | hoek@4.x.x: 189 | version "4.2.1" 190 | resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" 191 | 192 | http-signature@~1.2.0: 193 | version "1.2.0" 194 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" 195 | dependencies: 196 | assert-plus "^1.0.0" 197 | jsprim "^1.2.2" 198 | sshpk "^1.7.0" 199 | 200 | image-size@~0.5.0: 201 | version "0.5.5" 202 | resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" 203 | 204 | is-arrayish@^0.2.1: 205 | version "0.2.1" 206 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 207 | 208 | is-directory@^0.3.1: 209 | version "0.3.1" 210 | resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" 211 | 212 | is-typedarray@~1.0.0: 213 | version "1.0.0" 214 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 215 | 216 | isstream@~0.1.2: 217 | version "0.1.2" 218 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 219 | 220 | js-yaml@^3.9.0: 221 | version "3.11.0" 222 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" 223 | dependencies: 224 | argparse "^1.0.7" 225 | esprima "^4.0.0" 226 | 227 | jsbn@~0.1.0: 228 | version "0.1.1" 229 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 230 | 231 | json-parse-better-errors@^1.0.1: 232 | version "1.0.2" 233 | resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" 234 | 235 | json-schema-traverse@^0.3.0: 236 | version "0.3.1" 237 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" 238 | 239 | json-schema@0.2.3: 240 | version "0.2.3" 241 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 242 | 243 | json-stringify-safe@~5.0.1: 244 | version "5.0.1" 245 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 246 | 247 | jsprim@^1.2.2: 248 | version "1.4.1" 249 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" 250 | dependencies: 251 | assert-plus "1.0.0" 252 | extsprintf "1.3.0" 253 | json-schema "0.2.3" 254 | verror "1.10.0" 255 | 256 | less@^3.0.4: 257 | version "3.0.4" 258 | resolved "https://registry.yarnpkg.com/less/-/less-3.0.4.tgz#d27dcedbac96031c9e7b76f1da1e4b7d83760814" 259 | optionalDependencies: 260 | errno "^0.1.1" 261 | graceful-fs "^4.1.2" 262 | image-size "~0.5.0" 263 | mime "^1.4.1" 264 | mkdirp "^0.5.0" 265 | promise "^7.1.1" 266 | request "^2.83.0" 267 | source-map "~0.6.0" 268 | 269 | mime-db@~1.33.0: 270 | version "1.33.0" 271 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" 272 | 273 | mime-types@^2.1.12, mime-types@~2.1.17: 274 | version "2.1.18" 275 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" 276 | dependencies: 277 | mime-db "~1.33.0" 278 | 279 | mime@^1.4.1: 280 | version "1.6.0" 281 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" 282 | 283 | minimist@0.0.8: 284 | version "0.0.8" 285 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 286 | 287 | mkdirp@^0.5.0: 288 | version "0.5.1" 289 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 290 | dependencies: 291 | minimist "0.0.8" 292 | 293 | oauth-sign@~0.8.2: 294 | version "0.8.2" 295 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" 296 | 297 | parse-json@^4.0.0: 298 | version "4.0.0" 299 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" 300 | dependencies: 301 | error-ex "^1.3.1" 302 | json-parse-better-errors "^1.0.1" 303 | 304 | performance-now@^2.1.0: 305 | version "2.1.0" 306 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" 307 | 308 | prettier@^1.12.1: 309 | version "1.12.1" 310 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.12.1.tgz#c1ad20e803e7749faf905a409d2367e06bbe7325" 311 | 312 | promise@^7.1.1: 313 | version "7.3.1" 314 | resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" 315 | dependencies: 316 | asap "~2.0.3" 317 | 318 | prr@~1.0.1: 319 | version "1.0.1" 320 | resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" 321 | 322 | punycode@^1.4.1: 323 | version "1.4.1" 324 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 325 | 326 | qs@~6.5.1: 327 | version "6.5.2" 328 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" 329 | 330 | request@^2.83.0: 331 | version "2.85.0" 332 | resolved "https://registry.yarnpkg.com/request/-/request-2.85.0.tgz#5a03615a47c61420b3eb99b7dba204f83603e1fa" 333 | dependencies: 334 | aws-sign2 "~0.7.0" 335 | aws4 "^1.6.0" 336 | caseless "~0.12.0" 337 | combined-stream "~1.0.5" 338 | extend "~3.0.1" 339 | forever-agent "~0.6.1" 340 | form-data "~2.3.1" 341 | har-validator "~5.0.3" 342 | hawk "~6.0.2" 343 | http-signature "~1.2.0" 344 | is-typedarray "~1.0.0" 345 | isstream "~0.1.2" 346 | json-stringify-safe "~5.0.1" 347 | mime-types "~2.1.17" 348 | oauth-sign "~0.8.2" 349 | performance-now "^2.1.0" 350 | qs "~6.5.1" 351 | safe-buffer "^5.1.1" 352 | stringstream "~0.0.5" 353 | tough-cookie "~2.3.3" 354 | tunnel-agent "^0.6.0" 355 | uuid "^3.1.0" 356 | 357 | safe-buffer@^5.0.1, safe-buffer@^5.1.1: 358 | version "5.1.2" 359 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 360 | 361 | sntp@2.x.x: 362 | version "2.1.0" 363 | resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" 364 | dependencies: 365 | hoek "4.x.x" 366 | 367 | source-map@~0.6.0: 368 | version "0.6.1" 369 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 370 | 371 | sprintf-js@~1.0.2: 372 | version "1.0.3" 373 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 374 | 375 | sshpk@^1.7.0: 376 | version "1.14.1" 377 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.1.tgz#130f5975eddad963f1d56f92b9ac6c51fa9f83eb" 378 | dependencies: 379 | asn1 "~0.2.3" 380 | assert-plus "^1.0.0" 381 | dashdash "^1.12.0" 382 | getpass "^0.1.1" 383 | optionalDependencies: 384 | bcrypt-pbkdf "^1.0.0" 385 | ecc-jsbn "~0.1.1" 386 | jsbn "~0.1.0" 387 | tweetnacl "~0.14.0" 388 | 389 | stringstream@~0.0.5: 390 | version "0.0.5" 391 | resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" 392 | 393 | tough-cookie@~2.3.3: 394 | version "2.3.4" 395 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" 396 | dependencies: 397 | punycode "^1.4.1" 398 | 399 | tunnel-agent@^0.6.0: 400 | version "0.6.0" 401 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 402 | dependencies: 403 | safe-buffer "^5.0.1" 404 | 405 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 406 | version "0.14.5" 407 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 408 | 409 | uuid@^3.1.0: 410 | version "3.2.1" 411 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" 412 | 413 | verror@1.10.0: 414 | version "1.10.0" 415 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" 416 | dependencies: 417 | assert-plus "^1.0.0" 418 | core-util-is "1.0.2" 419 | extsprintf "^1.2.0" 420 | --------------------------------------------------------------------------------