├── .babelrc ├── .eslintignore ├── .eslintrc ├── .flowconfig ├── .gitignore ├── .jestrc.json ├── .npmignore ├── .stylelintrc ├── .travis.yml ├── README.md ├── bin └── index.js ├── e2e ├── .gitignore ├── .jestrc.json ├── .stylelintrc.js ├── package.json ├── src │ ├── index.actual.js │ ├── index.expected.js │ └── index.test.js └── yarn.lock ├── flow-typed └── npm │ ├── babel-traverse_vx.x.x.js │ ├── babylon_vx.x.x.js │ ├── chalk_v1.x.x.js │ ├── deasync_vx.x.x.js │ ├── diff_vx.x.x.js │ ├── escape-string-regexp_v1.x.x.js │ ├── fs-extra_vx.x.x.js │ ├── globby_vx.x.x.js │ ├── indent-string_v3.x.x.js │ ├── jest_v19.x.x.js │ ├── minimist_v1.x.x.js │ ├── postcss_vx.x.x.js │ ├── stylefmt_vx.x.x.js │ ├── stylelint-processor-styled-components_vx.x.x.js │ └── tempy_vx.x.x.js ├── package.json ├── src ├── __tests__ │ ├── __snapshots__ │ │ └── bin.js.snap │ ├── bin.js │ ├── fixtures │ │ ├── hard │ │ │ ├── indentation.actual.js │ │ │ ├── indentation.expected.js │ │ │ ├── invalid-indentation.actual.js │ │ │ ├── invalid-indentation.expected.js │ │ │ ├── source-maps.actual.js │ │ │ └── source-maps.expected.js │ │ ├── interpolations │ │ │ ├── complex.actual.js │ │ │ ├── complex.expected.js │ │ │ ├── invalid.actual.js │ │ │ ├── invalid.expected.js │ │ │ ├── valid.actual.js │ │ │ └── valid.expected.js │ │ ├── real-world │ │ │ ├── Circle.actual.js │ │ │ └── Circle.expected.js │ │ └── simple │ │ │ ├── global.actual.js │ │ │ ├── global.expected.js │ │ │ ├── helpers.actual.js │ │ │ ├── helpers.expected.js │ │ │ ├── imports.actual.js │ │ │ ├── imports.expected.js │ │ │ ├── invalid.actual.js │ │ │ ├── invalid.expected.js │ │ │ ├── nesting.actual.js │ │ │ ├── nesting.expected.js │ │ │ ├── valid.actual.js │ │ │ └── valid.expected.js │ └── index.js ├── bin.js └── index.js └── yarn.lock /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | "flow", 4 | ["env", { "targets": { "node": 4 } }] 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | *.actual.js 2 | *.expected.js 3 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "node": true, 4 | "jest": true 5 | }, 6 | "extends": [ 7 | "airbnb-base" 8 | ], 9 | "parser": "babel-eslint", 10 | "rules": { 11 | "max-len": [ 12 | "error", 13 | { 14 | "code": 120, 15 | "ignoreComments": true 16 | } 17 | ], 18 | "semi": ["error", "never"], 19 | "spaced-comment": "warn" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /.flowconfig: -------------------------------------------------------------------------------- 1 | [ignore] 2 | /bin 3 | /lib 4 | /node_modules/stylelint 5 | /e2e 6 | 7 | [libs] 8 | /flow-typed 9 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /coverage 2 | /lib 3 | /node_modules 4 | /package 5 | 6 | *.log 7 | *.tgz 8 | -------------------------------------------------------------------------------- /.jestrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "coverageReporters": ["lcov"], 3 | "rootDir": "src", 4 | "testEnvironment": "node", 5 | "testPathIgnorePatterns": ["/node_modules/", "/fixtures/"] 6 | } 7 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | /e2e 2 | /flow-typed 3 | /src 4 | -------------------------------------------------------------------------------- /.stylelintrc: -------------------------------------------------------------------------------- 1 | { 2 | "processors": ["stylelint-processor-styled-components"], 3 | "rules": { 4 | "rule-empty-line-before": null 5 | }, 6 | "syntax": "scss" 7 | } 8 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | 3 | node_js: 4 | # - 4 5 | - 6 6 | - 7 7 | 8 | os: 9 | - linux 10 | # - osx 11 | 12 | cache: 13 | directories: 14 | - node_modules 15 | - e2e/node_modules 16 | yarn: true 17 | 18 | script: 19 | - yarn eslint 20 | - yarn flow 21 | - yarn lib 22 | - yarn test:stylelint 23 | - yarn test -- --coverage 24 | # E2E 25 | - cd e2e 26 | - yarn --pure-lock 27 | - yarn test 28 | 29 | after_success: yarn coveralls 30 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Modern CSS Formatter for the component age 2 | 3 | [![npm](https://img.shields.io/npm/v/styled-components-stylefmt.svg)](https://www.npmjs.com/package/styled-components-stylefmt) 4 | [![Build Status](https://travis-ci.org/brumbrum-it/styled-components-stylefmt.svg?branch=master)](https://travis-ci.org/brumbrum-it/styled-components-stylefmt) 5 | [![Coverage Status](https://coveralls.io/repos/github/brumbrum-it/styled-components-stylefmt/badge.svg?branch=master)](https://coveralls.io/github/brumbrum-it/styled-components-stylefmt?branch=master) 6 | 7 |
8 | 9 | 10 | 11 | 12 | + 13 | 14 | 15 | styled-components 16 | 17 |
18 | 19 | ## Installation 20 | 21 | with **yarn**: 22 | 23 | ```bash 24 | yarn add --dev styled-components-stylefmt 25 | ``` 26 | 27 | or with **npm**: 28 | 29 | ```bash 30 | npm install --save-dev styled-components-stylefmt 31 | ``` 32 | 33 | ## Features 34 | 35 | - works just as [stylefmt](https://www.npmjs.com/package/stylefmt), addind support for formatting [styled-components](https://www.npmjs.com/package/styled-components)! 36 | 37 | ## Example 38 | 39 | ```js 40 | import React from 'react'; 41 | import styled from 'styled-components'; 42 | 43 | const Title = styled.h1` 44 | font-size: 1.5em; 45 | text-align: center; 46 | color: palevioletred; 47 | `; 48 | 49 | const Wrapper = styled.section` 50 | padding : 4em; 51 | background: papayawhip ; 52 | `; 53 | ``` 54 | 55 | yields: 56 | 57 | ```js 58 | import React from 'react'; 59 | import styled from 'styled-components'; 60 | 61 | const Title = styled.h1` 62 | font-size: 1.5em; 63 | text-align: center; 64 | color: palevioletred; 65 | `; 66 | 67 | const Wrapper = styled.section` 68 | padding: 4em; 69 | background: papayawhip; 70 | `; 71 | ``` 72 | 73 | ## Usage 74 | 75 | ### in command line 76 | 77 | CLI help: 78 | 79 | ```bash 80 | styled-components-stylefmt --help 81 | ``` 82 | 83 | ```bash 84 | Usage: styled-components-stylefmt [options] input-name [output-name] 85 | 86 | Options: 87 | 88 | -b, --config-basedir Path to the directory that relative paths defining \\"extends\\" 89 | -c, --config Path to a specific configuration file (JSON, YAML, or CommonJS) 90 | -d, --diff Output diff against original file 91 | -r, --recursive Format list of space seperated files(globs) in place 92 | -v, --version Output the version number 93 | -h, --help Output usage information 94 | -i, --ignore-path Path to a file containing patterns that describe files to ignore. 95 | ``` 96 | 97 | ### in Node.js 98 | 99 | ```js 100 | const formatter = require('styled-components-stylefmt') 101 | 102 | const stylefmtOptions = { 103 | // ... 104 | } 105 | 106 | const formatted = formatter('input.js', stylefmtOptions) 107 | ``` 108 | 109 | ## stylelint rules it can handle 110 | 111 | All the rules that [stylefmt can](https://github.com/morishitter/stylefmt/blob/master/README.md#stylelint-rules-that-stylefmt-can-handle). 112 | -------------------------------------------------------------------------------- /bin/index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | require('../lib/bin.js') 4 | -------------------------------------------------------------------------------- /e2e/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | 3 | /src/*.formatted.js 4 | -------------------------------------------------------------------------------- /e2e/.jestrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "rootDir": "src", 3 | "testEnvironment": "node" 4 | } 5 | -------------------------------------------------------------------------------- /e2e/.stylelintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | processors: ['stylelint-processor-styled-components'], 3 | rules: { 4 | 'rule-empty-line-before': null, 5 | }, 6 | syntax: 'scss', 7 | } 8 | -------------------------------------------------------------------------------- /e2e/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "scripts": { 3 | "format": "styled-components-stylefmt --config .stylelintrc.js src/index.actual.js src/index.formatted.js", 4 | "test": "jest src" 5 | }, 6 | "devDependencies": { 7 | "babel-jest": "^19.0.0", 8 | "jest": "^19.0.2", 9 | "styled-components-stylefmt": "file:..", 10 | "stylelint": "^7.10.1", 11 | "stylelint-config-standard": "^16.0.0", 12 | "stylelint-processor-styled-components": "^0.1.0" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /e2e/src/index.actual.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import styled, { keyframes } from 'styled-components' 3 | 4 | const animations = { 5 | spinnerCircle: keyframes` 6 | 0% { 7 | opacity: 0; 8 | } 9 | 100% { 10 | opacity : 1; 11 | } 12 | `, 13 | } 14 | 15 | export default (props) => { 16 | const CirclePrimitive = styled.div` 17 | width: 100%; 18 | height: 100%; 19 | position: absolute; 20 | left : 0; 21 | top: 0; 22 | ${props.rotate && ` 23 | -webkit-transform: rotate(${props.rotate}deg); 24 | -ms-transform: rotate(${props.rotate}deg); 25 | transform: rotate(${props.rotate}deg); 26 | `} 27 | 28 | &:before { 29 | content: ''; 30 | display: block; 31 | margin: 0 auto; 32 | width: 15%; 33 | height: 15%; 34 | background-color: #333; 35 | border-radius: 100%; 36 | animation: ${animations.spinnerCircle} 1.2s infinite ease-in-out both; 37 | ${props.delay && ` 38 | -webkit-animation-delay: ${props.delay}s; 39 | animation-delay: ${props.delay}s; 40 | `} 41 | } 42 | ` 43 | return React.createElement(CirclePrimitive) 44 | } 45 | -------------------------------------------------------------------------------- /e2e/src/index.expected.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import styled, { keyframes } from 'styled-components' 3 | 4 | const animations = { 5 | spinnerCircle: keyframes` 6 | 0% { 7 | opacity: 0; 8 | } 9 | 10 | 100% { 11 | opacity: 1; 12 | } 13 | `, 14 | } 15 | 16 | export default (props) => { 17 | const CirclePrimitive = styled.div` 18 | width: 100%; 19 | height: 100%; 20 | position: absolute; 21 | left: 0; 22 | top: 0; 23 | ${props.rotate && ` 24 | -webkit-transform: rotate(${props.rotate}deg); 25 | -ms-transform: rotate(${props.rotate}deg); 26 | transform: rotate(${props.rotate}deg); 27 | `} 28 | 29 | &:before { 30 | content: ''; 31 | display: block; 32 | margin: 0 auto; 33 | width: 15%; 34 | height: 15%; 35 | background-color: #333; 36 | border-radius: 100%; 37 | animation: ${animations.spinnerCircle} 1.2s infinite ease-in-out both; 38 | ${props.delay && ` 39 | -webkit-animation-delay: ${props.delay}s; 40 | animation-delay: ${props.delay}s; 41 | `} 42 | } 43 | ` 44 | return React.createElement(CirclePrimitive) 45 | } 46 | -------------------------------------------------------------------------------- /e2e/src/index.test.js: -------------------------------------------------------------------------------- 1 | import { spawn } from 'child_process' 2 | import fs from 'fs' 3 | import path from 'path' 4 | 5 | const run = () => 6 | new Promise((resolve) => { 7 | const bin = spawn('yarn', ['format'], { 8 | stdio: 'pipe', 9 | }) 10 | 11 | let error = '' 12 | let output = '' 13 | 14 | bin.stdout.on('data', (data) => { 15 | output += data.toString() 16 | }) 17 | 18 | bin.stderr.on('data', (data) => { 19 | error += data.toString() 20 | }) 21 | 22 | bin.on('close', code => resolve({ code, error, output })) 23 | }) 24 | 25 | describe('E2E', () => { 26 | test('the CLI works', async () => { 27 | const { code, error, output } = await run() 28 | 29 | expect(code).toBe(0) 30 | expect(error).toBe('') 31 | expect(output).not.toBe('') 32 | 33 | const expected = fs.readFileSync(path.join(__dirname, 'index.expected.js')) 34 | const formatted = fs.readFileSync(path.join(__dirname, 'index.formatted.js')) 35 | 36 | expect(formatted).toEqual(expected) 37 | }) 38 | }) 39 | -------------------------------------------------------------------------------- /e2e/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | JSONStream@^0.8.4: 6 | version "0.8.4" 7 | resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-0.8.4.tgz#91657dfe6ff857483066132b4618b62e8f4887bd" 8 | dependencies: 9 | jsonparse "0.0.5" 10 | through ">=2.2.7 <3" 11 | 12 | abab@^1.0.3: 13 | version "1.0.3" 14 | resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" 15 | 16 | acorn-globals@^3.1.0: 17 | version "3.1.0" 18 | resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf" 19 | dependencies: 20 | acorn "^4.0.4" 21 | 22 | acorn@^4.0.4: 23 | version "4.0.11" 24 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0" 25 | 26 | ajv-keywords@^1.0.0: 27 | version "1.5.1" 28 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" 29 | 30 | ajv@^4.7.0, ajv@^4.9.1: 31 | version "4.11.8" 32 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" 33 | dependencies: 34 | co "^4.6.0" 35 | json-stable-stringify "^1.0.1" 36 | 37 | align-text@^0.1.1, align-text@^0.1.3: 38 | version "0.1.4" 39 | resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" 40 | dependencies: 41 | kind-of "^3.0.2" 42 | longest "^1.0.1" 43 | repeat-string "^1.5.2" 44 | 45 | amdefine@>=0.0.4: 46 | version "1.0.1" 47 | resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" 48 | 49 | ansi-escapes@^1.4.0: 50 | version "1.4.0" 51 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" 52 | 53 | ansi-regex@^2.0.0: 54 | version "2.1.1" 55 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 56 | 57 | ansi-styles@^2.2.1: 58 | version "2.2.1" 59 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 60 | 61 | ansi-styles@^3.0.0: 62 | version "3.0.0" 63 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.0.0.tgz#5404e93a544c4fec7f048262977bebfe3155e0c1" 64 | dependencies: 65 | color-convert "^1.0.0" 66 | 67 | anymatch@^1.3.0: 68 | version "1.3.0" 69 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" 70 | dependencies: 71 | arrify "^1.0.0" 72 | micromatch "^2.1.5" 73 | 74 | append-transform@^0.4.0: 75 | version "0.4.0" 76 | resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" 77 | dependencies: 78 | default-require-extensions "^1.0.0" 79 | 80 | argparse@^1.0.7: 81 | version "1.0.9" 82 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" 83 | dependencies: 84 | sprintf-js "~1.0.2" 85 | 86 | arr-diff@^2.0.0: 87 | version "2.0.0" 88 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" 89 | dependencies: 90 | arr-flatten "^1.0.1" 91 | 92 | arr-flatten@^1.0.1: 93 | version "1.0.3" 94 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.3.tgz#a274ed85ac08849b6bd7847c4580745dc51adfb1" 95 | 96 | array-differ@^1.0.0: 97 | version "1.0.0" 98 | resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" 99 | 100 | array-equal@^1.0.0: 101 | version "1.0.0" 102 | resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" 103 | 104 | array-find-index@^1.0.1: 105 | version "1.0.2" 106 | resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" 107 | 108 | array-union@^1.0.1: 109 | version "1.0.2" 110 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" 111 | dependencies: 112 | array-uniq "^1.0.1" 113 | 114 | array-uniq@^1.0.1: 115 | version "1.0.3" 116 | resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" 117 | 118 | array-unique@^0.2.1: 119 | version "0.2.1" 120 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" 121 | 122 | arrify@^1.0.0, arrify@^1.0.1: 123 | version "1.0.1" 124 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" 125 | 126 | asn1@~0.2.3: 127 | version "0.2.3" 128 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" 129 | 130 | assert-plus@1.0.0, assert-plus@^1.0.0: 131 | version "1.0.0" 132 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 133 | 134 | assert-plus@^0.2.0: 135 | version "0.2.0" 136 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" 137 | 138 | async@^1.4.0: 139 | version "1.5.2" 140 | resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" 141 | 142 | async@^2.1.4: 143 | version "2.4.0" 144 | resolved "https://registry.yarnpkg.com/async/-/async-2.4.0.tgz#4990200f18ea5b837c2cc4f8c031a6985c385611" 145 | dependencies: 146 | lodash "^4.14.0" 147 | 148 | asynckit@^0.4.0: 149 | version "0.4.0" 150 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 151 | 152 | autoprefixer@^6.0.0: 153 | version "6.7.7" 154 | resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" 155 | dependencies: 156 | browserslist "^1.7.6" 157 | caniuse-db "^1.0.30000634" 158 | normalize-range "^0.1.2" 159 | num2fraction "^1.2.2" 160 | postcss "^5.2.16" 161 | postcss-value-parser "^3.2.3" 162 | 163 | aws-sign2@~0.6.0: 164 | version "0.6.0" 165 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" 166 | 167 | aws4@^1.2.1: 168 | version "1.6.0" 169 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" 170 | 171 | babel-code-frame@^6.22.0: 172 | version "6.22.0" 173 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" 174 | dependencies: 175 | chalk "^1.1.0" 176 | esutils "^2.0.2" 177 | js-tokens "^3.0.0" 178 | 179 | babel-core@^6.0.0, babel-core@^6.24.1: 180 | version "6.24.1" 181 | resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.24.1.tgz#8c428564dce1e1f41fb337ec34f4c3b022b5ad83" 182 | dependencies: 183 | babel-code-frame "^6.22.0" 184 | babel-generator "^6.24.1" 185 | babel-helpers "^6.24.1" 186 | babel-messages "^6.23.0" 187 | babel-register "^6.24.1" 188 | babel-runtime "^6.22.0" 189 | babel-template "^6.24.1" 190 | babel-traverse "^6.24.1" 191 | babel-types "^6.24.1" 192 | babylon "^6.11.0" 193 | convert-source-map "^1.1.0" 194 | debug "^2.1.1" 195 | json5 "^0.5.0" 196 | lodash "^4.2.0" 197 | minimatch "^3.0.2" 198 | path-is-absolute "^1.0.0" 199 | private "^0.1.6" 200 | slash "^1.0.0" 201 | source-map "^0.5.0" 202 | 203 | babel-generator@^6.18.0, babel-generator@^6.24.1: 204 | version "6.24.1" 205 | resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.24.1.tgz#e715f486c58ded25649d888944d52aa07c5d9497" 206 | dependencies: 207 | babel-messages "^6.23.0" 208 | babel-runtime "^6.22.0" 209 | babel-types "^6.24.1" 210 | detect-indent "^4.0.0" 211 | jsesc "^1.3.0" 212 | lodash "^4.2.0" 213 | source-map "^0.5.0" 214 | trim-right "^1.0.1" 215 | 216 | babel-helpers@^6.24.1: 217 | version "6.24.1" 218 | resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" 219 | dependencies: 220 | babel-runtime "^6.22.0" 221 | babel-template "^6.24.1" 222 | 223 | babel-jest@^19.0.0: 224 | version "19.0.0" 225 | resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-19.0.0.tgz#59323ced99a3a84d359da219ca881074ffc6ce3f" 226 | dependencies: 227 | babel-core "^6.0.0" 228 | babel-plugin-istanbul "^4.0.0" 229 | babel-preset-jest "^19.0.0" 230 | 231 | babel-messages@^6.23.0: 232 | version "6.23.0" 233 | resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" 234 | dependencies: 235 | babel-runtime "^6.22.0" 236 | 237 | babel-plugin-istanbul@^4.0.0: 238 | version "4.1.3" 239 | resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.3.tgz#6ee6280410dcf59c7747518c3dfd98680958f102" 240 | dependencies: 241 | find-up "^2.1.0" 242 | istanbul-lib-instrument "^1.7.1" 243 | test-exclude "^4.1.0" 244 | 245 | babel-plugin-jest-hoist@^19.0.0: 246 | version "19.0.0" 247 | resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-19.0.0.tgz#4ae2a04ea612a6e73651f3fde52c178991304bea" 248 | 249 | babel-preset-jest@^19.0.0: 250 | version "19.0.0" 251 | resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-19.0.0.tgz#22d67201d02324a195811288eb38294bb3cac396" 252 | dependencies: 253 | babel-plugin-jest-hoist "^19.0.0" 254 | 255 | babel-register@^6.24.1: 256 | version "6.24.1" 257 | resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.24.1.tgz#7e10e13a2f71065bdfad5a1787ba45bca6ded75f" 258 | dependencies: 259 | babel-core "^6.24.1" 260 | babel-runtime "^6.22.0" 261 | core-js "^2.4.0" 262 | home-or-tmp "^2.0.0" 263 | lodash "^4.2.0" 264 | mkdirp "^0.5.1" 265 | source-map-support "^0.4.2" 266 | 267 | babel-runtime@^6.22.0: 268 | version "6.23.0" 269 | resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" 270 | dependencies: 271 | core-js "^2.4.0" 272 | regenerator-runtime "^0.10.0" 273 | 274 | babel-template@^6.16.0, babel-template@^6.24.1: 275 | version "6.24.1" 276 | resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.24.1.tgz#04ae514f1f93b3a2537f2a0f60a5a45fb8308333" 277 | dependencies: 278 | babel-runtime "^6.22.0" 279 | babel-traverse "^6.24.1" 280 | babel-types "^6.24.1" 281 | babylon "^6.11.0" 282 | lodash "^4.2.0" 283 | 284 | babel-traverse@^6.16.0, babel-traverse@^6.18.0, babel-traverse@^6.24.1: 285 | version "6.24.1" 286 | resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.24.1.tgz#ab36673fd356f9a0948659e7b338d5feadb31695" 287 | dependencies: 288 | babel-code-frame "^6.22.0" 289 | babel-messages "^6.23.0" 290 | babel-runtime "^6.22.0" 291 | babel-types "^6.24.1" 292 | babylon "^6.15.0" 293 | debug "^2.2.0" 294 | globals "^9.0.0" 295 | invariant "^2.2.0" 296 | lodash "^4.2.0" 297 | 298 | babel-types@^6.18.0, babel-types@^6.24.1: 299 | version "6.24.1" 300 | resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.24.1.tgz#a136879dc15b3606bda0d90c1fc74304c2ff0975" 301 | dependencies: 302 | babel-runtime "^6.22.0" 303 | esutils "^2.0.2" 304 | lodash "^4.2.0" 305 | to-fast-properties "^1.0.1" 306 | 307 | babylon@^6.11.0, babylon@^6.12.0, babylon@^6.13.0, babylon@^6.15.0, babylon@^6.17.0: 308 | version "6.17.0" 309 | resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.0.tgz#37da948878488b9c4e3c4038893fa3314b3fc932" 310 | 311 | balanced-match@^0.4.0, balanced-match@^0.4.1: 312 | version "0.4.2" 313 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" 314 | 315 | bcrypt-pbkdf@^1.0.0: 316 | version "1.0.1" 317 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" 318 | dependencies: 319 | tweetnacl "^0.14.3" 320 | 321 | bindings@~1.2.1: 322 | version "1.2.1" 323 | resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.2.1.tgz#14ad6113812d2d37d72e67b4cacb4bb726505f11" 324 | 325 | bluebird@^3.0.5: 326 | version "3.5.0" 327 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" 328 | 329 | boom@2.x.x: 330 | version "2.10.1" 331 | resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" 332 | dependencies: 333 | hoek "2.x.x" 334 | 335 | brace-expansion@^1.0.0: 336 | version "1.1.7" 337 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59" 338 | dependencies: 339 | balanced-match "^0.4.1" 340 | concat-map "0.0.1" 341 | 342 | braces@^1.8.2: 343 | version "1.8.5" 344 | resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" 345 | dependencies: 346 | expand-range "^1.8.1" 347 | preserve "^0.2.0" 348 | repeat-element "^1.1.2" 349 | 350 | browser-resolve@^1.11.2: 351 | version "1.11.2" 352 | resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" 353 | dependencies: 354 | resolve "1.1.7" 355 | 356 | browserslist@^1.1.1, browserslist@^1.1.3, browserslist@^1.7.6: 357 | version "1.7.7" 358 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" 359 | dependencies: 360 | caniuse-db "^1.0.30000639" 361 | electron-to-chromium "^1.2.7" 362 | 363 | bser@1.0.2: 364 | version "1.0.2" 365 | resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169" 366 | dependencies: 367 | node-int64 "^0.4.0" 368 | 369 | bser@^2.0.0: 370 | version "2.0.0" 371 | resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" 372 | dependencies: 373 | node-int64 "^0.4.0" 374 | 375 | builtin-modules@^1.0.0: 376 | version "1.1.1" 377 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" 378 | 379 | callsites@^2.0.0: 380 | version "2.0.0" 381 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" 382 | 383 | camelcase-keys@^2.0.0: 384 | version "2.1.0" 385 | resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" 386 | dependencies: 387 | camelcase "^2.0.0" 388 | map-obj "^1.0.0" 389 | 390 | camelcase@^1.0.2: 391 | version "1.2.1" 392 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" 393 | 394 | camelcase@^2.0.0, camelcase@^2.0.1: 395 | version "2.1.1" 396 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" 397 | 398 | camelcase@^3.0.0: 399 | version "3.0.0" 400 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" 401 | 402 | caniuse-db@^1.0.30000187, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: 403 | version "1.0.30000664" 404 | resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000664.tgz#e16316e5fdabb9c7209b2bf0744ffc8a14201f22" 405 | 406 | caseless@~0.12.0: 407 | version "0.12.0" 408 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 409 | 410 | center-align@^0.1.1: 411 | version "0.1.3" 412 | resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" 413 | dependencies: 414 | align-text "^0.1.3" 415 | lazy-cache "^1.0.3" 416 | 417 | chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: 418 | version "1.1.3" 419 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 420 | dependencies: 421 | ansi-styles "^2.2.1" 422 | escape-string-regexp "^1.0.2" 423 | has-ansi "^2.0.0" 424 | strip-ansi "^3.0.0" 425 | supports-color "^2.0.0" 426 | 427 | ci-info@^1.0.0: 428 | version "1.0.0" 429 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" 430 | 431 | circular-json@^0.3.1: 432 | version "0.3.1" 433 | resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" 434 | 435 | cliui@^2.1.0: 436 | version "2.1.0" 437 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" 438 | dependencies: 439 | center-align "^0.1.1" 440 | right-align "^0.1.1" 441 | wordwrap "0.0.2" 442 | 443 | cliui@^3.0.3, cliui@^3.2.0: 444 | version "3.2.0" 445 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" 446 | dependencies: 447 | string-width "^1.0.1" 448 | strip-ansi "^3.0.1" 449 | wrap-ansi "^2.0.0" 450 | 451 | clone-regexp@^1.0.0: 452 | version "1.0.0" 453 | resolved "https://registry.yarnpkg.com/clone-regexp/-/clone-regexp-1.0.0.tgz#eae0a2413f55c0942f818c229fefce845d7f3b1c" 454 | dependencies: 455 | is-regexp "^1.0.0" 456 | is-supported-regexp-flag "^1.0.0" 457 | 458 | co@^4.6.0: 459 | version "4.6.0" 460 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 461 | 462 | code-point-at@^1.0.0: 463 | version "1.1.0" 464 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 465 | 466 | color-convert@^1.0.0: 467 | version "1.9.0" 468 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" 469 | dependencies: 470 | color-name "^1.1.1" 471 | 472 | color-diff@^0.1.3: 473 | version "0.1.7" 474 | resolved "https://registry.yarnpkg.com/color-diff/-/color-diff-0.1.7.tgz#6db78cd9482a8e459d40821eaf4b503283dcb8e2" 475 | 476 | color-name@^1.1.1: 477 | version "1.1.2" 478 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.2.tgz#5c8ab72b64bd2215d617ae9559ebb148475cf98d" 479 | 480 | colorguard@^1.2.0: 481 | version "1.2.0" 482 | resolved "https://registry.yarnpkg.com/colorguard/-/colorguard-1.2.0.tgz#f3facaf5caaeba4ef54653d9fb25bb73177c0d84" 483 | dependencies: 484 | chalk "^1.1.1" 485 | color-diff "^0.1.3" 486 | log-symbols "^1.0.2" 487 | object-assign "^4.0.1" 488 | pipetteur "^2.0.0" 489 | plur "^2.0.0" 490 | postcss "^5.0.4" 491 | postcss-reporter "^1.2.1" 492 | text-table "^0.2.0" 493 | yargs "^1.2.6" 494 | 495 | combined-stream@^1.0.5, combined-stream@~1.0.5: 496 | version "1.0.5" 497 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" 498 | dependencies: 499 | delayed-stream "~1.0.0" 500 | 501 | commander@^2.9.0: 502 | version "2.9.0" 503 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" 504 | dependencies: 505 | graceful-readlink ">= 1.0.0" 506 | 507 | concat-map@0.0.1: 508 | version "0.0.1" 509 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 510 | 511 | content-type-parser@^1.0.1: 512 | version "1.0.1" 513 | resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.1.tgz#c3e56988c53c65127fb46d4032a3a900246fdc94" 514 | 515 | convert-source-map@^1.1.0: 516 | version "1.5.0" 517 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" 518 | 519 | core-js@^2.4.0: 520 | version "2.4.1" 521 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" 522 | 523 | core-util-is@~1.0.0: 524 | version "1.0.2" 525 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 526 | 527 | cosmiconfig@^2.1.1: 528 | version "2.1.3" 529 | resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.1.3.tgz#952771eb0dddc1cb3fa2f6fbe51a522e93b3ee0a" 530 | dependencies: 531 | is-directory "^0.3.1" 532 | js-yaml "^3.4.3" 533 | minimist "^1.2.0" 534 | object-assign "^4.1.0" 535 | os-homedir "^1.0.1" 536 | parse-json "^2.2.0" 537 | require-from-string "^1.1.0" 538 | 539 | cryptiles@2.x.x: 540 | version "2.0.5" 541 | resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" 542 | dependencies: 543 | boom "2.x.x" 544 | 545 | css-color-list@0.0.1: 546 | version "0.0.1" 547 | resolved "https://registry.yarnpkg.com/css-color-list/-/css-color-list-0.0.1.tgz#8718e8695ae7a2cc8787be8715f1c008a7f28b15" 548 | dependencies: 549 | css-color-names "0.0.1" 550 | 551 | css-color-names@0.0.1: 552 | version "0.0.1" 553 | resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.1.tgz#5d0548fa256456ede4a9a0c2ac7ab19d3eb1ad81" 554 | 555 | css-color-names@0.0.3: 556 | version "0.0.3" 557 | resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.3.tgz#de0cef16f4d8aa8222a320d5b6d7e9bbada7b9f6" 558 | 559 | css-rule-stream@^1.1.0: 560 | version "1.1.0" 561 | resolved "https://registry.yarnpkg.com/css-rule-stream/-/css-rule-stream-1.1.0.tgz#3786e7198983d965a26e31957e09078cbb7705a2" 562 | dependencies: 563 | css-tokenize "^1.0.1" 564 | duplexer2 "0.0.2" 565 | ldjson-stream "^1.2.1" 566 | through2 "^0.6.3" 567 | 568 | css-tokenize@^1.0.1: 569 | version "1.0.1" 570 | resolved "https://registry.yarnpkg.com/css-tokenize/-/css-tokenize-1.0.1.tgz#4625cb1eda21c143858b7f81d6803c1d26fc14be" 571 | dependencies: 572 | inherits "^2.0.1" 573 | readable-stream "^1.0.33" 574 | 575 | cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": 576 | version "0.3.2" 577 | resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" 578 | 579 | "cssstyle@>= 0.2.37 < 0.3.0": 580 | version "0.2.37" 581 | resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" 582 | dependencies: 583 | cssom "0.3.x" 584 | 585 | currently-unhandled@^0.4.1: 586 | version "0.4.1" 587 | resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" 588 | dependencies: 589 | array-find-index "^1.0.1" 590 | 591 | dashdash@^1.12.0: 592 | version "1.14.1" 593 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 594 | dependencies: 595 | assert-plus "^1.0.0" 596 | 597 | deasync@^0.1.9: 598 | version "0.1.9" 599 | resolved "https://registry.yarnpkg.com/deasync/-/deasync-0.1.9.tgz#f58dd49fa63110c74bea8405a90a828be26d3a24" 600 | dependencies: 601 | bindings "~1.2.1" 602 | nan "^2.0.7" 603 | 604 | debug@^2.1.1, debug@^2.2.0, debug@^2.6.0, debug@^2.6.3: 605 | version "2.6.6" 606 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.6.tgz#a9fa6fbe9ca43cf1e79f73b75c0189cbb7d6db5a" 607 | dependencies: 608 | ms "0.7.3" 609 | 610 | decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: 611 | version "1.2.0" 612 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 613 | 614 | deep-is@~0.1.3: 615 | version "0.1.3" 616 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 617 | 618 | default-require-extensions@^1.0.0: 619 | version "1.0.0" 620 | resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" 621 | dependencies: 622 | strip-bom "^2.0.0" 623 | 624 | del@^2.0.2: 625 | version "2.2.2" 626 | resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" 627 | dependencies: 628 | globby "^5.0.0" 629 | is-path-cwd "^1.0.0" 630 | is-path-in-cwd "^1.0.0" 631 | object-assign "^4.0.1" 632 | pify "^2.0.0" 633 | pinkie-promise "^2.0.0" 634 | rimraf "^2.2.8" 635 | 636 | delayed-stream@~1.0.0: 637 | version "1.0.0" 638 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 639 | 640 | detect-indent@^4.0.0: 641 | version "4.0.0" 642 | resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" 643 | dependencies: 644 | repeating "^2.0.0" 645 | 646 | diff@^3.0.0, diff@^3.1.0, diff@^3.2.0: 647 | version "3.2.0" 648 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" 649 | 650 | doiuse@^2.4.1: 651 | version "2.6.0" 652 | resolved "https://registry.yarnpkg.com/doiuse/-/doiuse-2.6.0.tgz#1892d10b61a9a356addbf2b614933e81f8bb3834" 653 | dependencies: 654 | browserslist "^1.1.1" 655 | caniuse-db "^1.0.30000187" 656 | css-rule-stream "^1.1.0" 657 | duplexer2 "0.0.2" 658 | jsonfilter "^1.1.2" 659 | ldjson-stream "^1.2.1" 660 | lodash "^4.0.0" 661 | multimatch "^2.0.0" 662 | postcss "^5.0.8" 663 | source-map "^0.4.2" 664 | through2 "^0.6.3" 665 | yargs "^3.5.4" 666 | 667 | duplexer2@0.0.2: 668 | version "0.0.2" 669 | resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" 670 | dependencies: 671 | readable-stream "~1.1.9" 672 | 673 | duplexer@~0.1.1: 674 | version "0.1.1" 675 | resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" 676 | 677 | ecc-jsbn@~0.1.1: 678 | version "0.1.1" 679 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" 680 | dependencies: 681 | jsbn "~0.1.0" 682 | 683 | editorconfig@^0.13.2: 684 | version "0.13.2" 685 | resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-0.13.2.tgz#8e57926d9ee69ab6cb999f027c2171467acceb35" 686 | dependencies: 687 | bluebird "^3.0.5" 688 | commander "^2.9.0" 689 | lru-cache "^3.2.0" 690 | sigmund "^1.0.1" 691 | 692 | electron-to-chromium@^1.2.7: 693 | version "1.3.9" 694 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.9.tgz#db1cba2a26aebcca2f7f5b8b034554468609157d" 695 | 696 | "errno@>=0.1.1 <0.2.0-0": 697 | version "0.1.4" 698 | resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" 699 | dependencies: 700 | prr "~0.0.0" 701 | 702 | error-ex@^1.2.0: 703 | version "1.3.1" 704 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" 705 | dependencies: 706 | is-arrayish "^0.2.1" 707 | 708 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: 709 | version "1.0.5" 710 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 711 | 712 | escodegen@^1.6.1: 713 | version "1.8.1" 714 | resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" 715 | dependencies: 716 | esprima "^2.7.1" 717 | estraverse "^1.9.1" 718 | esutils "^2.0.2" 719 | optionator "^0.8.1" 720 | optionalDependencies: 721 | source-map "~0.2.0" 722 | 723 | esprima@^2.7.1: 724 | version "2.7.3" 725 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" 726 | 727 | esprima@^3.1.1: 728 | version "3.1.3" 729 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" 730 | 731 | estraverse@^1.9.1: 732 | version "1.9.3" 733 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" 734 | 735 | esutils@^2.0.2: 736 | version "2.0.2" 737 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 738 | 739 | exec-sh@^0.2.0: 740 | version "0.2.0" 741 | resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.0.tgz#14f75de3f20d286ef933099b2ce50a90359cef10" 742 | dependencies: 743 | merge "^1.1.3" 744 | 745 | execall@^1.0.0: 746 | version "1.0.0" 747 | resolved "https://registry.yarnpkg.com/execall/-/execall-1.0.0.tgz#73d0904e395b3cab0658b08d09ec25307f29bb73" 748 | dependencies: 749 | clone-regexp "^1.0.0" 750 | 751 | expand-brackets@^0.1.4: 752 | version "0.1.5" 753 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" 754 | dependencies: 755 | is-posix-bracket "^0.1.0" 756 | 757 | expand-range@^1.8.1: 758 | version "1.8.2" 759 | resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" 760 | dependencies: 761 | fill-range "^2.1.0" 762 | 763 | extend@~3.0.0: 764 | version "3.0.1" 765 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" 766 | 767 | extglob@^0.3.1: 768 | version "0.3.2" 769 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" 770 | dependencies: 771 | is-extglob "^1.0.0" 772 | 773 | extsprintf@1.0.2: 774 | version "1.0.2" 775 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" 776 | 777 | fast-levenshtein@~2.0.4: 778 | version "2.0.6" 779 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 780 | 781 | fb-watchman@^1.8.0: 782 | version "1.9.2" 783 | resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-1.9.2.tgz#a24cf47827f82d38fb59a69ad70b76e3b6ae7383" 784 | dependencies: 785 | bser "1.0.2" 786 | 787 | fb-watchman@^2.0.0: 788 | version "2.0.0" 789 | resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" 790 | dependencies: 791 | bser "^2.0.0" 792 | 793 | file-entry-cache@^2.0.0: 794 | version "2.0.0" 795 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" 796 | dependencies: 797 | flat-cache "^1.2.1" 798 | object-assign "^4.0.1" 799 | 800 | filename-regex@^2.0.0: 801 | version "2.0.1" 802 | resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" 803 | 804 | fileset@^2.0.2: 805 | version "2.0.3" 806 | resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" 807 | dependencies: 808 | glob "^7.0.3" 809 | minimatch "^3.0.3" 810 | 811 | fill-range@^2.1.0: 812 | version "2.2.3" 813 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" 814 | dependencies: 815 | is-number "^2.1.0" 816 | isobject "^2.0.0" 817 | randomatic "^1.1.3" 818 | repeat-element "^1.1.2" 819 | repeat-string "^1.5.2" 820 | 821 | find-up@^1.0.0: 822 | version "1.1.2" 823 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" 824 | dependencies: 825 | path-exists "^2.0.0" 826 | pinkie-promise "^2.0.0" 827 | 828 | find-up@^2.1.0: 829 | version "2.1.0" 830 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" 831 | dependencies: 832 | locate-path "^2.0.0" 833 | 834 | flat-cache@^1.2.1: 835 | version "1.2.2" 836 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96" 837 | dependencies: 838 | circular-json "^0.3.1" 839 | del "^2.0.2" 840 | graceful-fs "^4.1.2" 841 | write "^0.2.1" 842 | 843 | flatten@^1.0.2: 844 | version "1.0.2" 845 | resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" 846 | 847 | for-in@^1.0.1: 848 | version "1.0.2" 849 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" 850 | 851 | for-own@^0.1.4: 852 | version "0.1.5" 853 | resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" 854 | dependencies: 855 | for-in "^1.0.1" 856 | 857 | forever-agent@~0.6.1: 858 | version "0.6.1" 859 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 860 | 861 | form-data@~2.1.1: 862 | version "2.1.4" 863 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" 864 | dependencies: 865 | asynckit "^0.4.0" 866 | combined-stream "^1.0.5" 867 | mime-types "^2.1.12" 868 | 869 | fs.realpath@^1.0.0: 870 | version "1.0.0" 871 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 872 | 873 | gather-stream@^1.0.0: 874 | version "1.0.0" 875 | resolved "https://registry.yarnpkg.com/gather-stream/-/gather-stream-1.0.0.tgz#b33994af457a8115700d410f317733cbe7a0904b" 876 | 877 | get-caller-file@^1.0.1: 878 | version "1.0.2" 879 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" 880 | 881 | get-stdin@^4.0.1: 882 | version "4.0.1" 883 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" 884 | 885 | get-stdin@^5.0.0: 886 | version "5.0.1" 887 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" 888 | 889 | getpass@^0.1.1: 890 | version "0.1.7" 891 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 892 | dependencies: 893 | assert-plus "^1.0.0" 894 | 895 | glob-base@^0.3.0: 896 | version "0.3.0" 897 | resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" 898 | dependencies: 899 | glob-parent "^2.0.0" 900 | is-glob "^2.0.0" 901 | 902 | glob-parent@^2.0.0: 903 | version "2.0.0" 904 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" 905 | dependencies: 906 | is-glob "^2.0.0" 907 | 908 | glob@^7.0.3, glob@^7.0.5: 909 | version "7.1.1" 910 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" 911 | dependencies: 912 | fs.realpath "^1.0.0" 913 | inflight "^1.0.4" 914 | inherits "2" 915 | minimatch "^3.0.2" 916 | once "^1.3.0" 917 | path-is-absolute "^1.0.0" 918 | 919 | globals@^9.0.0: 920 | version "9.17.0" 921 | resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286" 922 | 923 | globby@^5.0.0: 924 | version "5.0.0" 925 | resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" 926 | dependencies: 927 | array-union "^1.0.1" 928 | arrify "^1.0.0" 929 | glob "^7.0.3" 930 | object-assign "^4.0.1" 931 | pify "^2.0.0" 932 | pinkie-promise "^2.0.0" 933 | 934 | globby@^6.0.0, globby@^6.1.0: 935 | version "6.1.0" 936 | resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" 937 | dependencies: 938 | array-union "^1.0.1" 939 | glob "^7.0.3" 940 | object-assign "^4.0.1" 941 | pify "^2.0.0" 942 | pinkie-promise "^2.0.0" 943 | 944 | globjoin@^0.1.4: 945 | version "0.1.4" 946 | resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" 947 | 948 | graceful-fs@^4.1.2, graceful-fs@^4.1.6: 949 | version "4.1.11" 950 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 951 | 952 | "graceful-readlink@>= 1.0.0": 953 | version "1.0.1" 954 | resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" 955 | 956 | growly@^1.3.0: 957 | version "1.3.0" 958 | resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" 959 | 960 | handlebars@^4.0.3: 961 | version "4.0.7" 962 | resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.7.tgz#e97325aeb8ea0b9e12b9c4dd73c4c312ad0ede59" 963 | dependencies: 964 | async "^1.4.0" 965 | optimist "^0.6.1" 966 | source-map "^0.4.4" 967 | optionalDependencies: 968 | uglify-js "^2.6" 969 | 970 | har-schema@^1.0.5: 971 | version "1.0.5" 972 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" 973 | 974 | har-validator@~4.2.1: 975 | version "4.2.1" 976 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" 977 | dependencies: 978 | ajv "^4.9.1" 979 | har-schema "^1.0.5" 980 | 981 | has-ansi@^2.0.0: 982 | version "2.0.0" 983 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 984 | dependencies: 985 | ansi-regex "^2.0.0" 986 | 987 | has-flag@^1.0.0: 988 | version "1.0.0" 989 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" 990 | 991 | hawk@~3.1.3: 992 | version "3.1.3" 993 | resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" 994 | dependencies: 995 | boom "2.x.x" 996 | cryptiles "2.x.x" 997 | hoek "2.x.x" 998 | sntp "1.x.x" 999 | 1000 | hoek@2.x.x: 1001 | version "2.16.3" 1002 | resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" 1003 | 1004 | home-or-tmp@^2.0.0: 1005 | version "2.0.0" 1006 | resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" 1007 | dependencies: 1008 | os-homedir "^1.0.0" 1009 | os-tmpdir "^1.0.1" 1010 | 1011 | hosted-git-info@^2.1.4: 1012 | version "2.4.2" 1013 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.4.2.tgz#0076b9f46a270506ddbaaea56496897460612a67" 1014 | 1015 | html-encoding-sniffer@^1.0.1: 1016 | version "1.0.1" 1017 | resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz#79bf7a785ea495fe66165e734153f363ff5437da" 1018 | dependencies: 1019 | whatwg-encoding "^1.0.1" 1020 | 1021 | html-tags@^1.1.1: 1022 | version "1.1.1" 1023 | resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-1.1.1.tgz#869f43859f12d9bdc3892419e494a628aa1b204e" 1024 | 1025 | http-signature@~1.1.0: 1026 | version "1.1.1" 1027 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" 1028 | dependencies: 1029 | assert-plus "^0.2.0" 1030 | jsprim "^1.2.2" 1031 | sshpk "^1.7.0" 1032 | 1033 | iconv-lite@0.4.13: 1034 | version "0.4.13" 1035 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" 1036 | 1037 | ignore@^3.2.0: 1038 | version "3.3.0" 1039 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.0.tgz#3812d22cbe9125f2c2b4915755a1b8abd745a001" 1040 | 1041 | imurmurhash@^0.1.4: 1042 | version "0.1.4" 1043 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1044 | 1045 | indent-string@^2.1.0: 1046 | version "2.1.0" 1047 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" 1048 | dependencies: 1049 | repeating "^2.0.0" 1050 | 1051 | indent-string@^3.1.0: 1052 | version "3.1.0" 1053 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.1.0.tgz#08ff4334603388399b329e6b9538dc7a3cf5de7d" 1054 | 1055 | indexes-of@^1.0.1: 1056 | version "1.0.1" 1057 | resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" 1058 | 1059 | inflight@^1.0.4: 1060 | version "1.0.6" 1061 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1062 | dependencies: 1063 | once "^1.3.0" 1064 | wrappy "1" 1065 | 1066 | inherits@2, inherits@^2.0.1, inherits@~2.0.1: 1067 | version "2.0.3" 1068 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 1069 | 1070 | invariant@^2.2.0: 1071 | version "2.2.2" 1072 | resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" 1073 | dependencies: 1074 | loose-envify "^1.0.0" 1075 | 1076 | invert-kv@^1.0.0: 1077 | version "1.0.0" 1078 | resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" 1079 | 1080 | irregular-plurals@^1.0.0: 1081 | version "1.2.0" 1082 | resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-1.2.0.tgz#38f299834ba8c00c30be9c554e137269752ff3ac" 1083 | 1084 | is-arrayish@^0.2.1: 1085 | version "0.2.1" 1086 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 1087 | 1088 | is-buffer@^1.1.5: 1089 | version "1.1.5" 1090 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" 1091 | 1092 | is-builtin-module@^1.0.0: 1093 | version "1.0.0" 1094 | resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" 1095 | dependencies: 1096 | builtin-modules "^1.0.0" 1097 | 1098 | is-ci@^1.0.9: 1099 | version "1.0.10" 1100 | resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" 1101 | dependencies: 1102 | ci-info "^1.0.0" 1103 | 1104 | is-directory@^0.3.1: 1105 | version "0.3.1" 1106 | resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" 1107 | 1108 | is-dotfile@^1.0.0: 1109 | version "1.0.2" 1110 | resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" 1111 | 1112 | is-equal-shallow@^0.1.3: 1113 | version "0.1.3" 1114 | resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" 1115 | dependencies: 1116 | is-primitive "^2.0.0" 1117 | 1118 | is-extendable@^0.1.1: 1119 | version "0.1.1" 1120 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" 1121 | 1122 | is-extglob@^1.0.0: 1123 | version "1.0.0" 1124 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" 1125 | 1126 | is-finite@^1.0.0: 1127 | version "1.0.2" 1128 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" 1129 | dependencies: 1130 | number-is-nan "^1.0.0" 1131 | 1132 | is-fullwidth-code-point@^1.0.0: 1133 | version "1.0.0" 1134 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 1135 | dependencies: 1136 | number-is-nan "^1.0.0" 1137 | 1138 | is-fullwidth-code-point@^2.0.0: 1139 | version "2.0.0" 1140 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 1141 | 1142 | is-glob@^2.0.0, is-glob@^2.0.1: 1143 | version "2.0.1" 1144 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" 1145 | dependencies: 1146 | is-extglob "^1.0.0" 1147 | 1148 | is-number@^2.0.2, is-number@^2.1.0: 1149 | version "2.1.0" 1150 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" 1151 | dependencies: 1152 | kind-of "^3.0.2" 1153 | 1154 | is-path-cwd@^1.0.0: 1155 | version "1.0.0" 1156 | resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" 1157 | 1158 | is-path-in-cwd@^1.0.0: 1159 | version "1.0.0" 1160 | resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" 1161 | dependencies: 1162 | is-path-inside "^1.0.0" 1163 | 1164 | is-path-inside@^1.0.0: 1165 | version "1.0.0" 1166 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" 1167 | dependencies: 1168 | path-is-inside "^1.0.1" 1169 | 1170 | is-posix-bracket@^0.1.0: 1171 | version "0.1.1" 1172 | resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" 1173 | 1174 | is-primitive@^2.0.0: 1175 | version "2.0.0" 1176 | resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" 1177 | 1178 | is-regexp@^1.0.0: 1179 | version "1.0.0" 1180 | resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" 1181 | 1182 | is-supported-regexp-flag@^1.0.0: 1183 | version "1.0.0" 1184 | resolved "https://registry.yarnpkg.com/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.0.tgz#8b520c85fae7a253382d4b02652e045576e13bb8" 1185 | 1186 | is-typedarray@~1.0.0: 1187 | version "1.0.0" 1188 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 1189 | 1190 | is-utf8@^0.2.0: 1191 | version "0.2.1" 1192 | resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" 1193 | 1194 | isarray@0.0.1: 1195 | version "0.0.1" 1196 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" 1197 | 1198 | isarray@1.0.0: 1199 | version "1.0.0" 1200 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1201 | 1202 | isexe@^2.0.0: 1203 | version "2.0.0" 1204 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1205 | 1206 | isobject@^2.0.0: 1207 | version "2.1.0" 1208 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" 1209 | dependencies: 1210 | isarray "1.0.0" 1211 | 1212 | isstream@~0.1.2: 1213 | version "0.1.2" 1214 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 1215 | 1216 | istanbul-api@^1.1.0-alpha.1: 1217 | version "1.1.8" 1218 | resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.8.tgz#a844e55c6f9aeee292e7f42942196f60b23dc93e" 1219 | dependencies: 1220 | async "^2.1.4" 1221 | fileset "^2.0.2" 1222 | istanbul-lib-coverage "^1.1.0" 1223 | istanbul-lib-hook "^1.0.6" 1224 | istanbul-lib-instrument "^1.7.1" 1225 | istanbul-lib-report "^1.1.0" 1226 | istanbul-lib-source-maps "^1.2.0" 1227 | istanbul-reports "^1.1.0" 1228 | js-yaml "^3.7.0" 1229 | mkdirp "^0.5.1" 1230 | once "^1.4.0" 1231 | 1232 | istanbul-lib-coverage@^1.0.0, istanbul-lib-coverage@^1.1.0: 1233 | version "1.1.0" 1234 | resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.0.tgz#caca19decaef3525b5d6331d701f3f3b7ad48528" 1235 | 1236 | istanbul-lib-hook@^1.0.6: 1237 | version "1.0.6" 1238 | resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.6.tgz#c0866d1e81cf2d5319249510131fc16dee49231f" 1239 | dependencies: 1240 | append-transform "^0.4.0" 1241 | 1242 | istanbul-lib-instrument@^1.1.1, istanbul-lib-instrument@^1.7.1: 1243 | version "1.7.1" 1244 | resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.1.tgz#169e31bc62c778851a99439dd99c3cc12184d360" 1245 | dependencies: 1246 | babel-generator "^6.18.0" 1247 | babel-template "^6.16.0" 1248 | babel-traverse "^6.18.0" 1249 | babel-types "^6.18.0" 1250 | babylon "^6.13.0" 1251 | istanbul-lib-coverage "^1.1.0" 1252 | semver "^5.3.0" 1253 | 1254 | istanbul-lib-report@^1.1.0: 1255 | version "1.1.0" 1256 | resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.0.tgz#444c4ecca9afa93cf584f56b10f195bf768c0770" 1257 | dependencies: 1258 | istanbul-lib-coverage "^1.1.0" 1259 | mkdirp "^0.5.1" 1260 | path-parse "^1.0.5" 1261 | supports-color "^3.1.2" 1262 | 1263 | istanbul-lib-source-maps@^1.2.0: 1264 | version "1.2.0" 1265 | resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.0.tgz#8c7706d497e26feeb6af3e0c28fd5b0669598d0e" 1266 | dependencies: 1267 | debug "^2.6.3" 1268 | istanbul-lib-coverage "^1.1.0" 1269 | mkdirp "^0.5.1" 1270 | rimraf "^2.6.1" 1271 | source-map "^0.5.3" 1272 | 1273 | istanbul-reports@^1.1.0: 1274 | version "1.1.0" 1275 | resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.0.tgz#1ef3b795889219cfb5fad16365f6ce108d5f8c66" 1276 | dependencies: 1277 | handlebars "^4.0.3" 1278 | 1279 | jest-changed-files@^19.0.2: 1280 | version "19.0.2" 1281 | resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-19.0.2.tgz#16c54c84c3270be408e06d2e8af3f3e37a885824" 1282 | 1283 | jest-cli@^19.0.2: 1284 | version "19.0.2" 1285 | resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-19.0.2.tgz#cc3620b62acac5f2d93a548cb6ef697d4ec85443" 1286 | dependencies: 1287 | ansi-escapes "^1.4.0" 1288 | callsites "^2.0.0" 1289 | chalk "^1.1.1" 1290 | graceful-fs "^4.1.6" 1291 | is-ci "^1.0.9" 1292 | istanbul-api "^1.1.0-alpha.1" 1293 | istanbul-lib-coverage "^1.0.0" 1294 | istanbul-lib-instrument "^1.1.1" 1295 | jest-changed-files "^19.0.2" 1296 | jest-config "^19.0.2" 1297 | jest-environment-jsdom "^19.0.2" 1298 | jest-haste-map "^19.0.0" 1299 | jest-jasmine2 "^19.0.2" 1300 | jest-message-util "^19.0.0" 1301 | jest-regex-util "^19.0.0" 1302 | jest-resolve-dependencies "^19.0.0" 1303 | jest-runtime "^19.0.2" 1304 | jest-snapshot "^19.0.2" 1305 | jest-util "^19.0.2" 1306 | micromatch "^2.3.11" 1307 | node-notifier "^5.0.1" 1308 | slash "^1.0.0" 1309 | string-length "^1.0.1" 1310 | throat "^3.0.0" 1311 | which "^1.1.1" 1312 | worker-farm "^1.3.1" 1313 | yargs "^6.3.0" 1314 | 1315 | jest-config@^19.0.2: 1316 | version "19.0.4" 1317 | resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-19.0.4.tgz#42980211d46417e91ca7abffd086c270234f73fd" 1318 | dependencies: 1319 | chalk "^1.1.1" 1320 | jest-environment-jsdom "^19.0.2" 1321 | jest-environment-node "^19.0.2" 1322 | jest-jasmine2 "^19.0.2" 1323 | jest-regex-util "^19.0.0" 1324 | jest-resolve "^19.0.2" 1325 | jest-validate "^19.0.2" 1326 | pretty-format "^19.0.0" 1327 | 1328 | jest-diff@^19.0.0: 1329 | version "19.0.0" 1330 | resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-19.0.0.tgz#d1563cfc56c8b60232988fbc05d4d16ed90f063c" 1331 | dependencies: 1332 | chalk "^1.1.3" 1333 | diff "^3.0.0" 1334 | jest-matcher-utils "^19.0.0" 1335 | pretty-format "^19.0.0" 1336 | 1337 | jest-environment-jsdom@^19.0.2: 1338 | version "19.0.2" 1339 | resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-19.0.2.tgz#ceda859c4a4b94ab35e4de7dab54b926f293e4a3" 1340 | dependencies: 1341 | jest-mock "^19.0.0" 1342 | jest-util "^19.0.2" 1343 | jsdom "^9.11.0" 1344 | 1345 | jest-environment-node@^19.0.2: 1346 | version "19.0.2" 1347 | resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-19.0.2.tgz#6e84079db87ed21d0c05e1f9669f207b116fe99b" 1348 | dependencies: 1349 | jest-mock "^19.0.0" 1350 | jest-util "^19.0.2" 1351 | 1352 | jest-file-exists@^19.0.0: 1353 | version "19.0.0" 1354 | resolved "https://registry.yarnpkg.com/jest-file-exists/-/jest-file-exists-19.0.0.tgz#cca2e587a11ec92e24cfeab3f8a94d657f3fceb8" 1355 | 1356 | jest-haste-map@^19.0.0: 1357 | version "19.0.2" 1358 | resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-19.0.2.tgz#286484c3a16e86da7872b0877c35dce30c3d6f07" 1359 | dependencies: 1360 | fb-watchman "^2.0.0" 1361 | graceful-fs "^4.1.6" 1362 | micromatch "^2.3.11" 1363 | sane "~1.5.0" 1364 | worker-farm "^1.3.1" 1365 | 1366 | jest-jasmine2@^19.0.2: 1367 | version "19.0.2" 1368 | resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-19.0.2.tgz#167991ac825981fb1a800af126e83afcca832c73" 1369 | dependencies: 1370 | graceful-fs "^4.1.6" 1371 | jest-matcher-utils "^19.0.0" 1372 | jest-matchers "^19.0.0" 1373 | jest-message-util "^19.0.0" 1374 | jest-snapshot "^19.0.2" 1375 | 1376 | jest-matcher-utils@^19.0.0: 1377 | version "19.0.0" 1378 | resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-19.0.0.tgz#5ecd9b63565d2b001f61fbf7ec4c7f537964564d" 1379 | dependencies: 1380 | chalk "^1.1.3" 1381 | pretty-format "^19.0.0" 1382 | 1383 | jest-matchers@^19.0.0: 1384 | version "19.0.0" 1385 | resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-19.0.0.tgz#c74ecc6ebfec06f384767ba4d6fa4a42d6755754" 1386 | dependencies: 1387 | jest-diff "^19.0.0" 1388 | jest-matcher-utils "^19.0.0" 1389 | jest-message-util "^19.0.0" 1390 | jest-regex-util "^19.0.0" 1391 | 1392 | jest-message-util@^19.0.0: 1393 | version "19.0.0" 1394 | resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-19.0.0.tgz#721796b89c0e4d761606f9ba8cb828a3b6246416" 1395 | dependencies: 1396 | chalk "^1.1.1" 1397 | micromatch "^2.3.11" 1398 | 1399 | jest-mock@^19.0.0: 1400 | version "19.0.0" 1401 | resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-19.0.0.tgz#67038641e9607ab2ce08ec4a8cb83aabbc899d01" 1402 | 1403 | jest-regex-util@^19.0.0: 1404 | version "19.0.0" 1405 | resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-19.0.0.tgz#b7754587112aede1456510bb1f6afe74ef598691" 1406 | 1407 | jest-resolve-dependencies@^19.0.0: 1408 | version "19.0.0" 1409 | resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-19.0.0.tgz#a741ad1fa094140e64ecf2642a504f834ece22ee" 1410 | dependencies: 1411 | jest-file-exists "^19.0.0" 1412 | 1413 | jest-resolve@^19.0.2: 1414 | version "19.0.2" 1415 | resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-19.0.2.tgz#5793575de4f07aec32f7d7ff0c6c181963eefb3c" 1416 | dependencies: 1417 | browser-resolve "^1.11.2" 1418 | jest-haste-map "^19.0.0" 1419 | resolve "^1.2.0" 1420 | 1421 | jest-runtime@^19.0.2: 1422 | version "19.0.3" 1423 | resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-19.0.3.tgz#a163354ace46910ee33f0282b6bff6b0b87d4330" 1424 | dependencies: 1425 | babel-core "^6.0.0" 1426 | babel-jest "^19.0.0" 1427 | babel-plugin-istanbul "^4.0.0" 1428 | chalk "^1.1.3" 1429 | graceful-fs "^4.1.6" 1430 | jest-config "^19.0.2" 1431 | jest-file-exists "^19.0.0" 1432 | jest-haste-map "^19.0.0" 1433 | jest-regex-util "^19.0.0" 1434 | jest-resolve "^19.0.2" 1435 | jest-util "^19.0.2" 1436 | json-stable-stringify "^1.0.1" 1437 | micromatch "^2.3.11" 1438 | strip-bom "3.0.0" 1439 | yargs "^6.3.0" 1440 | 1441 | jest-snapshot@^19.0.2: 1442 | version "19.0.2" 1443 | resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-19.0.2.tgz#9c1b216214f7187c38bfd5c70b1efab16b0ff50b" 1444 | dependencies: 1445 | chalk "^1.1.3" 1446 | jest-diff "^19.0.0" 1447 | jest-file-exists "^19.0.0" 1448 | jest-matcher-utils "^19.0.0" 1449 | jest-util "^19.0.2" 1450 | natural-compare "^1.4.0" 1451 | pretty-format "^19.0.0" 1452 | 1453 | jest-util@^19.0.2: 1454 | version "19.0.2" 1455 | resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-19.0.2.tgz#e0a0232a2ab9e6b2b53668bdb3534c2b5977ed41" 1456 | dependencies: 1457 | chalk "^1.1.1" 1458 | graceful-fs "^4.1.6" 1459 | jest-file-exists "^19.0.0" 1460 | jest-message-util "^19.0.0" 1461 | jest-mock "^19.0.0" 1462 | jest-validate "^19.0.2" 1463 | leven "^2.0.0" 1464 | mkdirp "^0.5.1" 1465 | 1466 | jest-validate@^19.0.2: 1467 | version "19.0.2" 1468 | resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-19.0.2.tgz#dc534df5f1278d5b63df32b14241d4dbf7244c0c" 1469 | dependencies: 1470 | chalk "^1.1.1" 1471 | jest-matcher-utils "^19.0.0" 1472 | leven "^2.0.0" 1473 | pretty-format "^19.0.0" 1474 | 1475 | jest@^19.0.2: 1476 | version "19.0.2" 1477 | resolved "https://registry.yarnpkg.com/jest/-/jest-19.0.2.tgz#b794faaf8ff461e7388f28beef559a54f20b2c10" 1478 | dependencies: 1479 | jest-cli "^19.0.2" 1480 | 1481 | jodid25519@^1.0.0: 1482 | version "1.0.2" 1483 | resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" 1484 | dependencies: 1485 | jsbn "~0.1.0" 1486 | 1487 | js-base64@^2.1.9: 1488 | version "2.1.9" 1489 | resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce" 1490 | 1491 | js-tokens@^3.0.0: 1492 | version "3.0.1" 1493 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" 1494 | 1495 | js-yaml@^3.4.3, js-yaml@^3.7.0: 1496 | version "3.8.3" 1497 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.3.tgz#33a05ec481c850c8875929166fe1beb61c728766" 1498 | dependencies: 1499 | argparse "^1.0.7" 1500 | esprima "^3.1.1" 1501 | 1502 | jsbn@~0.1.0: 1503 | version "0.1.1" 1504 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 1505 | 1506 | jsdom@^9.11.0: 1507 | version "9.12.0" 1508 | resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" 1509 | dependencies: 1510 | abab "^1.0.3" 1511 | acorn "^4.0.4" 1512 | acorn-globals "^3.1.0" 1513 | array-equal "^1.0.0" 1514 | content-type-parser "^1.0.1" 1515 | cssom ">= 0.3.2 < 0.4.0" 1516 | cssstyle ">= 0.2.37 < 0.3.0" 1517 | escodegen "^1.6.1" 1518 | html-encoding-sniffer "^1.0.1" 1519 | nwmatcher ">= 1.3.9 < 2.0.0" 1520 | parse5 "^1.5.1" 1521 | request "^2.79.0" 1522 | sax "^1.2.1" 1523 | symbol-tree "^3.2.1" 1524 | tough-cookie "^2.3.2" 1525 | webidl-conversions "^4.0.0" 1526 | whatwg-encoding "^1.0.1" 1527 | whatwg-url "^4.3.0" 1528 | xml-name-validator "^2.0.1" 1529 | 1530 | jsesc@^1.3.0: 1531 | version "1.3.0" 1532 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" 1533 | 1534 | json-schema@0.2.3: 1535 | version "0.2.3" 1536 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 1537 | 1538 | json-stable-stringify@^1.0.1: 1539 | version "1.0.1" 1540 | resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" 1541 | dependencies: 1542 | jsonify "~0.0.0" 1543 | 1544 | json-stringify-safe@~5.0.1: 1545 | version "5.0.1" 1546 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 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 | jsonfilter@^1.1.2: 1553 | version "1.1.2" 1554 | resolved "https://registry.yarnpkg.com/jsonfilter/-/jsonfilter-1.1.2.tgz#21ef7cedc75193813c75932e96a98be205ba5a11" 1555 | dependencies: 1556 | JSONStream "^0.8.4" 1557 | minimist "^1.1.0" 1558 | stream-combiner "^0.2.1" 1559 | through2 "^0.6.3" 1560 | 1561 | jsonify@~0.0.0: 1562 | version "0.0.0" 1563 | resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" 1564 | 1565 | jsonparse@0.0.5: 1566 | version "0.0.5" 1567 | resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-0.0.5.tgz#330542ad3f0a654665b778f3eb2d9a9fa507ac64" 1568 | 1569 | jsprim@^1.2.2: 1570 | version "1.4.0" 1571 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918" 1572 | dependencies: 1573 | assert-plus "1.0.0" 1574 | extsprintf "1.0.2" 1575 | json-schema "0.2.3" 1576 | verror "1.3.6" 1577 | 1578 | kind-of@^3.0.2: 1579 | version "3.2.0" 1580 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.0.tgz#b58abe4d5c044ad33726a8c1525b48cf891bff07" 1581 | dependencies: 1582 | is-buffer "^1.1.5" 1583 | 1584 | known-css-properties@^0.0.7: 1585 | version "0.0.7" 1586 | resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.0.7.tgz#9104343a2adfd8ef3b07bdee7a325e4d44ed9371" 1587 | 1588 | lazy-cache@^1.0.3: 1589 | version "1.0.4" 1590 | resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" 1591 | 1592 | lcid@^1.0.0: 1593 | version "1.0.0" 1594 | resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" 1595 | dependencies: 1596 | invert-kv "^1.0.0" 1597 | 1598 | ldjson-stream@^1.2.1: 1599 | version "1.2.1" 1600 | resolved "https://registry.yarnpkg.com/ldjson-stream/-/ldjson-stream-1.2.1.tgz#91beceda5ac4ed2b17e649fb777e7abfa0189c2b" 1601 | dependencies: 1602 | split2 "^0.2.1" 1603 | through2 "^0.6.1" 1604 | 1605 | leven@^2.0.0: 1606 | version "2.1.0" 1607 | resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" 1608 | 1609 | levn@~0.3.0: 1610 | version "0.3.0" 1611 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 1612 | dependencies: 1613 | prelude-ls "~1.1.2" 1614 | type-check "~0.3.2" 1615 | 1616 | load-json-file@^1.0.0: 1617 | version "1.1.0" 1618 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" 1619 | dependencies: 1620 | graceful-fs "^4.1.2" 1621 | parse-json "^2.2.0" 1622 | pify "^2.0.0" 1623 | pinkie-promise "^2.0.0" 1624 | strip-bom "^2.0.0" 1625 | 1626 | locate-path@^2.0.0: 1627 | version "2.0.0" 1628 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" 1629 | dependencies: 1630 | p-locate "^2.0.0" 1631 | path-exists "^3.0.0" 1632 | 1633 | lodash@^4.0.0, lodash@^4.1.0, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.2.0: 1634 | version "4.17.4" 1635 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" 1636 | 1637 | log-symbols@^1.0.2: 1638 | version "1.0.2" 1639 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" 1640 | dependencies: 1641 | chalk "^1.0.0" 1642 | 1643 | longest@^1.0.1: 1644 | version "1.0.1" 1645 | resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" 1646 | 1647 | loose-envify@^1.0.0: 1648 | version "1.3.1" 1649 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" 1650 | dependencies: 1651 | js-tokens "^3.0.0" 1652 | 1653 | loud-rejection@^1.0.0: 1654 | version "1.6.0" 1655 | resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" 1656 | dependencies: 1657 | currently-unhandled "^0.4.1" 1658 | signal-exit "^3.0.0" 1659 | 1660 | lru-cache@^3.2.0: 1661 | version "3.2.0" 1662 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-3.2.0.tgz#71789b3b7f5399bec8565dda38aa30d2a097efee" 1663 | dependencies: 1664 | pseudomap "^1.0.1" 1665 | 1666 | makeerror@1.0.x: 1667 | version "1.0.11" 1668 | resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" 1669 | dependencies: 1670 | tmpl "1.0.x" 1671 | 1672 | map-obj@^1.0.0, map-obj@^1.0.1: 1673 | version "1.0.1" 1674 | resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" 1675 | 1676 | meow@^3.3.0: 1677 | version "3.7.0" 1678 | resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" 1679 | dependencies: 1680 | camelcase-keys "^2.0.0" 1681 | decamelize "^1.1.2" 1682 | loud-rejection "^1.0.0" 1683 | map-obj "^1.0.1" 1684 | minimist "^1.1.3" 1685 | normalize-package-data "^2.3.4" 1686 | object-assign "^4.0.1" 1687 | read-pkg-up "^1.0.1" 1688 | redent "^1.0.0" 1689 | trim-newlines "^1.0.0" 1690 | 1691 | merge@^1.1.3: 1692 | version "1.2.0" 1693 | resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" 1694 | 1695 | micromatch@^2.1.5, micromatch@^2.3.11: 1696 | version "2.3.11" 1697 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" 1698 | dependencies: 1699 | arr-diff "^2.0.0" 1700 | array-unique "^0.2.1" 1701 | braces "^1.8.2" 1702 | expand-brackets "^0.1.4" 1703 | extglob "^0.3.1" 1704 | filename-regex "^2.0.0" 1705 | is-extglob "^1.0.0" 1706 | is-glob "^2.0.1" 1707 | kind-of "^3.0.2" 1708 | normalize-path "^2.0.1" 1709 | object.omit "^2.0.0" 1710 | parse-glob "^3.0.4" 1711 | regex-cache "^0.4.2" 1712 | 1713 | mime-db@~1.27.0: 1714 | version "1.27.0" 1715 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" 1716 | 1717 | mime-types@^2.1.12, mime-types@~2.1.7: 1718 | version "2.1.15" 1719 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" 1720 | dependencies: 1721 | mime-db "~1.27.0" 1722 | 1723 | minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3: 1724 | version "3.0.3" 1725 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" 1726 | dependencies: 1727 | brace-expansion "^1.0.0" 1728 | 1729 | minimist@0.0.8, minimist@~0.0.1: 1730 | version "0.0.8" 1731 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 1732 | 1733 | minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: 1734 | version "1.2.0" 1735 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 1736 | 1737 | mkdirp@^0.5.1: 1738 | version "0.5.1" 1739 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 1740 | dependencies: 1741 | minimist "0.0.8" 1742 | 1743 | ms@0.7.3: 1744 | version "0.7.3" 1745 | resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.3.tgz#708155a5e44e33f5fd0fc53e81d0d40a91be1fff" 1746 | 1747 | multimatch@^2.0.0: 1748 | version "2.1.0" 1749 | resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b" 1750 | dependencies: 1751 | array-differ "^1.0.0" 1752 | array-union "^1.0.1" 1753 | arrify "^1.0.0" 1754 | minimatch "^3.0.0" 1755 | 1756 | nan@^2.0.7: 1757 | version "2.6.2" 1758 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45" 1759 | 1760 | natural-compare@^1.4.0: 1761 | version "1.4.0" 1762 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1763 | 1764 | node-int64@^0.4.0: 1765 | version "0.4.0" 1766 | resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" 1767 | 1768 | node-notifier@^5.0.1: 1769 | version "5.1.2" 1770 | resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.1.2.tgz#2fa9e12605fa10009d44549d6fcd8a63dde0e4ff" 1771 | dependencies: 1772 | growly "^1.3.0" 1773 | semver "^5.3.0" 1774 | shellwords "^0.1.0" 1775 | which "^1.2.12" 1776 | 1777 | normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: 1778 | version "2.3.8" 1779 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.8.tgz#d819eda2a9dedbd1ffa563ea4071d936782295bb" 1780 | dependencies: 1781 | hosted-git-info "^2.1.4" 1782 | is-builtin-module "^1.0.0" 1783 | semver "2 || 3 || 4 || 5" 1784 | validate-npm-package-license "^3.0.1" 1785 | 1786 | normalize-path@^2.0.1: 1787 | version "2.1.1" 1788 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" 1789 | dependencies: 1790 | remove-trailing-separator "^1.0.1" 1791 | 1792 | normalize-range@^0.1.2: 1793 | version "0.1.2" 1794 | resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" 1795 | 1796 | normalize-selector@^0.2.0: 1797 | version "0.2.0" 1798 | resolved "https://registry.yarnpkg.com/normalize-selector/-/normalize-selector-0.2.0.tgz#d0b145eb691189c63a78d201dc4fdb1293ef0c03" 1799 | 1800 | num2fraction@^1.2.2: 1801 | version "1.2.2" 1802 | resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" 1803 | 1804 | number-is-nan@^1.0.0: 1805 | version "1.0.1" 1806 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 1807 | 1808 | "nwmatcher@>= 1.3.9 < 2.0.0": 1809 | version "1.3.9" 1810 | resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.3.9.tgz#8bab486ff7fa3dfd086656bbe8b17116d3692d2a" 1811 | 1812 | oauth-sign@~0.8.1: 1813 | version "0.8.2" 1814 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" 1815 | 1816 | object-assign@^4.0.1, object-assign@^4.1.0: 1817 | version "4.1.1" 1818 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1819 | 1820 | object.omit@^2.0.0: 1821 | version "2.0.1" 1822 | resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" 1823 | dependencies: 1824 | for-own "^0.1.4" 1825 | is-extendable "^0.1.1" 1826 | 1827 | once@^1.3.0, once@^1.4.0: 1828 | version "1.4.0" 1829 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1830 | dependencies: 1831 | wrappy "1" 1832 | 1833 | onecolor@^3.0.4: 1834 | version "3.0.4" 1835 | resolved "https://registry.yarnpkg.com/onecolor/-/onecolor-3.0.4.tgz#75a46f80da6c7aaa5b4daae17a47198bd9652494" 1836 | 1837 | optimist@^0.6.1: 1838 | version "0.6.1" 1839 | resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" 1840 | dependencies: 1841 | minimist "~0.0.1" 1842 | wordwrap "~0.0.2" 1843 | 1844 | optionator@^0.8.1: 1845 | version "0.8.2" 1846 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" 1847 | dependencies: 1848 | deep-is "~0.1.3" 1849 | fast-levenshtein "~2.0.4" 1850 | levn "~0.3.0" 1851 | prelude-ls "~1.1.2" 1852 | type-check "~0.3.2" 1853 | wordwrap "~1.0.0" 1854 | 1855 | os-homedir@^1.0.0, os-homedir@^1.0.1: 1856 | version "1.0.2" 1857 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 1858 | 1859 | os-locale@^1.4.0: 1860 | version "1.4.0" 1861 | resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" 1862 | dependencies: 1863 | lcid "^1.0.0" 1864 | 1865 | os-tmpdir@^1.0.1: 1866 | version "1.0.2" 1867 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 1868 | 1869 | p-limit@^1.1.0: 1870 | version "1.1.0" 1871 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" 1872 | 1873 | p-locate@^2.0.0: 1874 | version "2.0.0" 1875 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" 1876 | dependencies: 1877 | p-limit "^1.1.0" 1878 | 1879 | parse-glob@^3.0.4: 1880 | version "3.0.4" 1881 | resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" 1882 | dependencies: 1883 | glob-base "^0.3.0" 1884 | is-dotfile "^1.0.0" 1885 | is-extglob "^1.0.0" 1886 | is-glob "^2.0.0" 1887 | 1888 | parse-json@^2.2.0: 1889 | version "2.2.0" 1890 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" 1891 | dependencies: 1892 | error-ex "^1.2.0" 1893 | 1894 | parse5@^1.5.1: 1895 | version "1.5.1" 1896 | resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" 1897 | 1898 | path-exists@^2.0.0: 1899 | version "2.1.0" 1900 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" 1901 | dependencies: 1902 | pinkie-promise "^2.0.0" 1903 | 1904 | path-exists@^3.0.0: 1905 | version "3.0.0" 1906 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 1907 | 1908 | path-is-absolute@^1.0.0: 1909 | version "1.0.1" 1910 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1911 | 1912 | path-is-inside@^1.0.1: 1913 | version "1.0.2" 1914 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" 1915 | 1916 | path-parse@^1.0.5: 1917 | version "1.0.5" 1918 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" 1919 | 1920 | path-type@^1.0.0: 1921 | version "1.1.0" 1922 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" 1923 | dependencies: 1924 | graceful-fs "^4.1.2" 1925 | pify "^2.0.0" 1926 | pinkie-promise "^2.0.0" 1927 | 1928 | performance-now@^0.2.0: 1929 | version "0.2.0" 1930 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" 1931 | 1932 | pify@^2.0.0: 1933 | version "2.3.0" 1934 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 1935 | 1936 | pinkie-promise@^2.0.0: 1937 | version "2.0.1" 1938 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 1939 | dependencies: 1940 | pinkie "^2.0.0" 1941 | 1942 | pinkie@^2.0.0: 1943 | version "2.0.4" 1944 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 1945 | 1946 | pipetteur@^2.0.0: 1947 | version "2.0.3" 1948 | resolved "https://registry.yarnpkg.com/pipetteur/-/pipetteur-2.0.3.tgz#1955760959e8d1a11cb2a50ec83eec470633e49f" 1949 | dependencies: 1950 | onecolor "^3.0.4" 1951 | synesthesia "^1.0.1" 1952 | 1953 | plur@^2.0.0, plur@^2.1.2: 1954 | version "2.1.2" 1955 | resolved "https://registry.yarnpkg.com/plur/-/plur-2.1.2.tgz#7482452c1a0f508e3e344eaec312c91c29dc655a" 1956 | dependencies: 1957 | irregular-plurals "^1.0.0" 1958 | 1959 | postcss-less@^0.14.0: 1960 | version "0.14.0" 1961 | resolved "https://registry.yarnpkg.com/postcss-less/-/postcss-less-0.14.0.tgz#c631b089c6cce422b9a10f3a958d2bedd3819324" 1962 | dependencies: 1963 | postcss "^5.0.21" 1964 | 1965 | postcss-media-query-parser@^0.2.0: 1966 | version "0.2.3" 1967 | resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" 1968 | 1969 | postcss-reporter@^1.2.1, postcss-reporter@^1.3.3: 1970 | version "1.4.1" 1971 | resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-1.4.1.tgz#c136f0a5b161915f379dd3765c61075f7e7b9af2" 1972 | dependencies: 1973 | chalk "^1.0.0" 1974 | lodash "^4.1.0" 1975 | log-symbols "^1.0.2" 1976 | postcss "^5.0.0" 1977 | 1978 | postcss-reporter@^3.0.0: 1979 | version "3.0.0" 1980 | resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-3.0.0.tgz#09ea0f37a444c5693878606e09b018ebeff7cf8f" 1981 | dependencies: 1982 | chalk "^1.0.0" 1983 | lodash "^4.1.0" 1984 | log-symbols "^1.0.2" 1985 | postcss "^5.0.0" 1986 | 1987 | postcss-resolve-nested-selector@^0.1.1: 1988 | version "0.1.1" 1989 | resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" 1990 | 1991 | postcss-scss@^0.4.0: 1992 | version "0.4.1" 1993 | resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-0.4.1.tgz#ad771b81f0f72f5f4845d08aa60f93557653d54c" 1994 | dependencies: 1995 | postcss "^5.2.13" 1996 | 1997 | postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.1.1: 1998 | version "2.2.3" 1999 | resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" 2000 | dependencies: 2001 | flatten "^1.0.2" 2002 | indexes-of "^1.0.1" 2003 | uniq "^1.0.1" 2004 | 2005 | postcss-sorting@^2.0.1: 2006 | version "2.0.1" 2007 | resolved "https://registry.yarnpkg.com/postcss-sorting/-/postcss-sorting-2.0.1.tgz#3b7cbfd6cb6b0fdb81b470589952584ef32c32a5" 2008 | dependencies: 2009 | lodash "^4.17.4" 2010 | postcss "^5.2.10" 2011 | 2012 | postcss-value-parser@^3.1.1, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: 2013 | version "3.3.0" 2014 | resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" 2015 | 2016 | postcss@^5.0.0, postcss@^5.0.18, postcss@^5.0.20, postcss@^5.0.21, postcss@^5.0.4, postcss@^5.0.8, postcss@^5.2.10, postcss@^5.2.13, postcss@^5.2.16, postcss@^5.2.17, postcss@^5.2.4, postcss@^5.2.5: 2017 | version "5.2.17" 2018 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.17.tgz#cf4f597b864d65c8a492b2eabe9d706c879c388b" 2019 | dependencies: 2020 | chalk "^1.1.3" 2021 | js-base64 "^2.1.9" 2022 | source-map "^0.5.6" 2023 | supports-color "^3.2.3" 2024 | 2025 | prelude-ls@~1.1.2: 2026 | version "1.1.2" 2027 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 2028 | 2029 | preserve@^0.2.0: 2030 | version "0.2.0" 2031 | resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" 2032 | 2033 | pretty-format@^19.0.0: 2034 | version "19.0.0" 2035 | resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-19.0.0.tgz#56530d32acb98a3fa4851c4e2b9d37b420684c84" 2036 | dependencies: 2037 | ansi-styles "^3.0.0" 2038 | 2039 | private@^0.1.6: 2040 | version "0.1.7" 2041 | resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" 2042 | 2043 | prr@~0.0.0: 2044 | version "0.0.0" 2045 | resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" 2046 | 2047 | pseudomap@^1.0.1: 2048 | version "1.0.2" 2049 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" 2050 | 2051 | punycode@^1.4.1: 2052 | version "1.4.1" 2053 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 2054 | 2055 | qs@~6.4.0: 2056 | version "6.4.0" 2057 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" 2058 | 2059 | randomatic@^1.1.3: 2060 | version "1.1.6" 2061 | resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" 2062 | dependencies: 2063 | is-number "^2.0.2" 2064 | kind-of "^3.0.2" 2065 | 2066 | read-file-stdin@^0.2.1: 2067 | version "0.2.1" 2068 | resolved "https://registry.yarnpkg.com/read-file-stdin/-/read-file-stdin-0.2.1.tgz#25eccff3a153b6809afacb23ee15387db9e0ee61" 2069 | dependencies: 2070 | gather-stream "^1.0.0" 2071 | 2072 | read-pkg-up@^1.0.1: 2073 | version "1.0.1" 2074 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" 2075 | dependencies: 2076 | find-up "^1.0.0" 2077 | read-pkg "^1.0.0" 2078 | 2079 | read-pkg@^1.0.0: 2080 | version "1.1.0" 2081 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" 2082 | dependencies: 2083 | load-json-file "^1.0.0" 2084 | normalize-package-data "^2.3.2" 2085 | path-type "^1.0.0" 2086 | 2087 | "readable-stream@>=1.0.33-1 <1.1.0-0": 2088 | version "1.0.34" 2089 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" 2090 | dependencies: 2091 | core-util-is "~1.0.0" 2092 | inherits "~2.0.1" 2093 | isarray "0.0.1" 2094 | string_decoder "~0.10.x" 2095 | 2096 | readable-stream@^1.0.33, readable-stream@~1.1.9: 2097 | version "1.1.14" 2098 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" 2099 | dependencies: 2100 | core-util-is "~1.0.0" 2101 | inherits "~2.0.1" 2102 | isarray "0.0.1" 2103 | string_decoder "~0.10.x" 2104 | 2105 | redent@^1.0.0: 2106 | version "1.0.0" 2107 | resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" 2108 | dependencies: 2109 | indent-string "^2.1.0" 2110 | strip-indent "^1.0.1" 2111 | 2112 | regenerator-runtime@^0.10.0: 2113 | version "0.10.5" 2114 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" 2115 | 2116 | regex-cache@^0.4.2: 2117 | version "0.4.3" 2118 | resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" 2119 | dependencies: 2120 | is-equal-shallow "^0.1.3" 2121 | is-primitive "^2.0.0" 2122 | 2123 | remove-trailing-separator@^1.0.1: 2124 | version "1.0.1" 2125 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz#615ebb96af559552d4bf4057c8436d486ab63cc4" 2126 | 2127 | repeat-element@^1.1.2: 2128 | version "1.1.2" 2129 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" 2130 | 2131 | repeat-string@^1.5.2: 2132 | version "1.6.1" 2133 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 2134 | 2135 | repeating@^2.0.0: 2136 | version "2.0.1" 2137 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" 2138 | dependencies: 2139 | is-finite "^1.0.0" 2140 | 2141 | request@^2.79.0: 2142 | version "2.81.0" 2143 | resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" 2144 | dependencies: 2145 | aws-sign2 "~0.6.0" 2146 | aws4 "^1.2.1" 2147 | caseless "~0.12.0" 2148 | combined-stream "~1.0.5" 2149 | extend "~3.0.0" 2150 | forever-agent "~0.6.1" 2151 | form-data "~2.1.1" 2152 | har-validator "~4.2.1" 2153 | hawk "~3.1.3" 2154 | http-signature "~1.1.0" 2155 | is-typedarray "~1.0.0" 2156 | isstream "~0.1.2" 2157 | json-stringify-safe "~5.0.1" 2158 | mime-types "~2.1.7" 2159 | oauth-sign "~0.8.1" 2160 | performance-now "^0.2.0" 2161 | qs "~6.4.0" 2162 | safe-buffer "^5.0.1" 2163 | stringstream "~0.0.4" 2164 | tough-cookie "~2.3.0" 2165 | tunnel-agent "^0.6.0" 2166 | uuid "^3.0.0" 2167 | 2168 | require-directory@^2.1.1: 2169 | version "2.1.1" 2170 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 2171 | 2172 | require-from-string@^1.1.0: 2173 | version "1.2.1" 2174 | resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" 2175 | 2176 | require-main-filename@^1.0.1: 2177 | version "1.0.1" 2178 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" 2179 | 2180 | resolve-from@^2.0.0: 2181 | version "2.0.0" 2182 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" 2183 | 2184 | resolve@1.1.7: 2185 | version "1.1.7" 2186 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" 2187 | 2188 | resolve@^1.2.0: 2189 | version "1.3.3" 2190 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5" 2191 | dependencies: 2192 | path-parse "^1.0.5" 2193 | 2194 | right-align@^0.1.1: 2195 | version "0.1.3" 2196 | resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" 2197 | dependencies: 2198 | align-text "^0.1.1" 2199 | 2200 | rimraf@^2.2.8, rimraf@^2.6.1: 2201 | version "2.6.1" 2202 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" 2203 | dependencies: 2204 | glob "^7.0.5" 2205 | 2206 | safe-buffer@^5.0.1: 2207 | version "5.0.1" 2208 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" 2209 | 2210 | sane@~1.5.0: 2211 | version "1.5.0" 2212 | resolved "https://registry.yarnpkg.com/sane/-/sane-1.5.0.tgz#a4adeae764d048621ecb27d5f9ecf513101939f3" 2213 | dependencies: 2214 | anymatch "^1.3.0" 2215 | exec-sh "^0.2.0" 2216 | fb-watchman "^1.8.0" 2217 | minimatch "^3.0.2" 2218 | minimist "^1.1.1" 2219 | walker "~1.0.5" 2220 | watch "~0.10.0" 2221 | 2222 | sax@^1.2.1: 2223 | version "1.2.2" 2224 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828" 2225 | 2226 | "semver@2 || 3 || 4 || 5", semver@^5.3.0: 2227 | version "5.3.0" 2228 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" 2229 | 2230 | set-blocking@^2.0.0: 2231 | version "2.0.0" 2232 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 2233 | 2234 | shellwords@^0.1.0: 2235 | version "0.1.0" 2236 | resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.0.tgz#66afd47b6a12932d9071cbfd98a52e785cd0ba14" 2237 | 2238 | sigmund@^1.0.1: 2239 | version "1.0.1" 2240 | resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" 2241 | 2242 | signal-exit@^3.0.0: 2243 | version "3.0.2" 2244 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 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 | sntp@1.x.x: 2255 | version "1.0.9" 2256 | resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" 2257 | dependencies: 2258 | hoek "2.x.x" 2259 | 2260 | source-map-support@^0.4.2: 2261 | version "0.4.15" 2262 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.15.tgz#03202df65c06d2bd8c7ec2362a193056fef8d3b1" 2263 | dependencies: 2264 | source-map "^0.5.6" 2265 | 2266 | source-map@^0.4.2, source-map@^0.4.4: 2267 | version "0.4.4" 2268 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" 2269 | dependencies: 2270 | amdefine ">=0.0.4" 2271 | 2272 | source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1: 2273 | version "0.5.6" 2274 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" 2275 | 2276 | source-map@~0.2.0: 2277 | version "0.2.0" 2278 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" 2279 | dependencies: 2280 | amdefine ">=0.0.4" 2281 | 2282 | spdx-correct@~1.0.0: 2283 | version "1.0.2" 2284 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" 2285 | dependencies: 2286 | spdx-license-ids "^1.0.2" 2287 | 2288 | spdx-expression-parse@~1.0.0: 2289 | version "1.0.4" 2290 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" 2291 | 2292 | spdx-license-ids@^1.0.2: 2293 | version "1.2.2" 2294 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" 2295 | 2296 | specificity@^0.3.0: 2297 | version "0.3.0" 2298 | resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.3.0.tgz#332472d4e5eb5af20821171933998a6bc3b1ce6f" 2299 | 2300 | split2@^0.2.1: 2301 | version "0.2.1" 2302 | resolved "https://registry.yarnpkg.com/split2/-/split2-0.2.1.tgz#02ddac9adc03ec0bb78c1282ec079ca6e85ae900" 2303 | dependencies: 2304 | through2 "~0.6.1" 2305 | 2306 | sprintf-js@~1.0.2: 2307 | version "1.0.3" 2308 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 2309 | 2310 | sshpk@^1.7.0: 2311 | version "1.13.0" 2312 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.0.tgz#ff2a3e4fd04497555fed97b39a0fd82fafb3a33c" 2313 | dependencies: 2314 | asn1 "~0.2.3" 2315 | assert-plus "^1.0.0" 2316 | dashdash "^1.12.0" 2317 | getpass "^0.1.1" 2318 | optionalDependencies: 2319 | bcrypt-pbkdf "^1.0.0" 2320 | ecc-jsbn "~0.1.1" 2321 | jodid25519 "^1.0.0" 2322 | jsbn "~0.1.0" 2323 | tweetnacl "~0.14.0" 2324 | 2325 | stdin@0.0.1: 2326 | version "0.0.1" 2327 | resolved "https://registry.yarnpkg.com/stdin/-/stdin-0.0.1.tgz#d3041981aaec3dfdbc77a1b38d6372e38f5fb71e" 2328 | 2329 | stream-combiner@^0.2.1: 2330 | version "0.2.2" 2331 | resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.2.2.tgz#aec8cbac177b56b6f4fa479ced8c1912cee52858" 2332 | dependencies: 2333 | duplexer "~0.1.1" 2334 | through "~2.3.4" 2335 | 2336 | string-length@^1.0.1: 2337 | version "1.0.1" 2338 | resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac" 2339 | dependencies: 2340 | strip-ansi "^3.0.0" 2341 | 2342 | string-width@^1.0.1, string-width@^1.0.2: 2343 | version "1.0.2" 2344 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 2345 | dependencies: 2346 | code-point-at "^1.0.0" 2347 | is-fullwidth-code-point "^1.0.0" 2348 | strip-ansi "^3.0.0" 2349 | 2350 | string-width@^2.0.0: 2351 | version "2.0.0" 2352 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e" 2353 | dependencies: 2354 | is-fullwidth-code-point "^2.0.0" 2355 | strip-ansi "^3.0.0" 2356 | 2357 | string_decoder@~0.10.x: 2358 | version "0.10.31" 2359 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" 2360 | 2361 | stringstream@~0.0.4: 2362 | version "0.0.5" 2363 | resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" 2364 | 2365 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 2366 | version "3.0.1" 2367 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 2368 | dependencies: 2369 | ansi-regex "^2.0.0" 2370 | 2371 | strip-bom@3.0.0: 2372 | version "3.0.0" 2373 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 2374 | 2375 | strip-bom@^2.0.0: 2376 | version "2.0.0" 2377 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" 2378 | dependencies: 2379 | is-utf8 "^0.2.0" 2380 | 2381 | strip-indent@^1.0.1: 2382 | version "1.0.1" 2383 | resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" 2384 | dependencies: 2385 | get-stdin "^4.0.1" 2386 | 2387 | style-search@^0.1.0: 2388 | version "0.1.0" 2389 | resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" 2390 | 2391 | "styled-components-stylefmt@file:..": 2392 | version "0.1.1" 2393 | dependencies: 2394 | babel-traverse "^6.24.1" 2395 | babylon "^6.17.0" 2396 | chalk "^1.1.3" 2397 | deasync "^0.1.9" 2398 | diff "^3.2.0" 2399 | escape-string-regexp "^1.0.5" 2400 | globby "^6.1.0" 2401 | indent-string "^3.1.0" 2402 | minimist "^1.2.0" 2403 | postcss "^5.2.17" 2404 | stylefmt "^5.3.2" 2405 | stylelint-processor-styled-components "^0.1.0" 2406 | 2407 | stylefmt@^5.3.2: 2408 | version "5.3.2" 2409 | resolved "https://registry.yarnpkg.com/stylefmt/-/stylefmt-5.3.2.tgz#32013437aa54d8c5253cbc107ac914dfb5ee9eea" 2410 | dependencies: 2411 | chalk "^1.1.3" 2412 | css-color-list "0.0.1" 2413 | diff "^3.1.0" 2414 | editorconfig "^0.13.2" 2415 | globby "^6.1.0" 2416 | minimist "^1.2.0" 2417 | postcss "^5.2.5" 2418 | postcss-scss "^0.4.0" 2419 | postcss-sorting "^2.0.1" 2420 | postcss-value-parser "^3.3.0" 2421 | stdin "0.0.1" 2422 | stylelint "^7.5.0" 2423 | stylelint-order "0.4.x" 2424 | 2425 | stylehacks@^2.3.2: 2426 | version "2.3.2" 2427 | resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-2.3.2.tgz#64c83e0438a68c9edf449e8c552a7d9ab6009b0b" 2428 | dependencies: 2429 | browserslist "^1.1.3" 2430 | chalk "^1.1.1" 2431 | log-symbols "^1.0.2" 2432 | minimist "^1.2.0" 2433 | plur "^2.1.2" 2434 | postcss "^5.0.18" 2435 | postcss-reporter "^1.3.3" 2436 | postcss-selector-parser "^2.0.0" 2437 | read-file-stdin "^0.2.1" 2438 | text-table "^0.2.0" 2439 | write-file-stdout "0.0.2" 2440 | 2441 | stylelint-config-standard@^16.0.0: 2442 | version "16.0.0" 2443 | resolved "https://registry.yarnpkg.com/stylelint-config-standard/-/stylelint-config-standard-16.0.0.tgz#bb7387bff1d7dd7186a52b3ebf885b2405d691bf" 2444 | 2445 | stylelint-order@0.4.x: 2446 | version "0.4.4" 2447 | resolved "https://registry.yarnpkg.com/stylelint-order/-/stylelint-order-0.4.4.tgz#db7dfca0541b5062010c7e2e21e745791fc088ac" 2448 | dependencies: 2449 | lodash "^4.17.4" 2450 | postcss "^5.2.16" 2451 | stylelint "^7.9.0" 2452 | 2453 | stylelint-processor-styled-components@^0.1.0: 2454 | version "0.1.0" 2455 | resolved "https://registry.yarnpkg.com/stylelint-processor-styled-components/-/stylelint-processor-styled-components-0.1.0.tgz#47cd66bbf39a94931bb2a445c2fc7017f536df2a" 2456 | dependencies: 2457 | babel-traverse "^6.16.0" 2458 | babylon "^6.12.0" 2459 | 2460 | stylelint@^7.10.1, stylelint@^7.5.0, stylelint@^7.9.0: 2461 | version "7.10.1" 2462 | resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-7.10.1.tgz#209a7ce5e781fc2a62489fbb31ec0201ec675db2" 2463 | dependencies: 2464 | autoprefixer "^6.0.0" 2465 | balanced-match "^0.4.0" 2466 | chalk "^1.1.1" 2467 | colorguard "^1.2.0" 2468 | cosmiconfig "^2.1.1" 2469 | debug "^2.6.0" 2470 | doiuse "^2.4.1" 2471 | execall "^1.0.0" 2472 | file-entry-cache "^2.0.0" 2473 | get-stdin "^5.0.0" 2474 | globby "^6.0.0" 2475 | globjoin "^0.1.4" 2476 | html-tags "^1.1.1" 2477 | ignore "^3.2.0" 2478 | imurmurhash "^0.1.4" 2479 | known-css-properties "^0.0.7" 2480 | lodash "^4.17.4" 2481 | log-symbols "^1.0.2" 2482 | meow "^3.3.0" 2483 | micromatch "^2.3.11" 2484 | normalize-selector "^0.2.0" 2485 | postcss "^5.0.20" 2486 | postcss-less "^0.14.0" 2487 | postcss-media-query-parser "^0.2.0" 2488 | postcss-reporter "^3.0.0" 2489 | postcss-resolve-nested-selector "^0.1.1" 2490 | postcss-scss "^0.4.0" 2491 | postcss-selector-parser "^2.1.1" 2492 | postcss-value-parser "^3.1.1" 2493 | resolve-from "^2.0.0" 2494 | specificity "^0.3.0" 2495 | string-width "^2.0.0" 2496 | style-search "^0.1.0" 2497 | stylehacks "^2.3.2" 2498 | sugarss "^0.2.0" 2499 | svg-tags "^1.0.0" 2500 | table "^4.0.1" 2501 | 2502 | sugarss@^0.2.0: 2503 | version "0.2.0" 2504 | resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-0.2.0.tgz#ac34237563327c6ff897b64742bf6aec190ad39e" 2505 | dependencies: 2506 | postcss "^5.2.4" 2507 | 2508 | supports-color@^2.0.0: 2509 | version "2.0.0" 2510 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 2511 | 2512 | supports-color@^3.1.2, supports-color@^3.2.3: 2513 | version "3.2.3" 2514 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" 2515 | dependencies: 2516 | has-flag "^1.0.0" 2517 | 2518 | svg-tags@^1.0.0: 2519 | version "1.0.0" 2520 | resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" 2521 | 2522 | symbol-tree@^3.2.1: 2523 | version "3.2.2" 2524 | resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" 2525 | 2526 | synesthesia@^1.0.1: 2527 | version "1.0.1" 2528 | resolved "https://registry.yarnpkg.com/synesthesia/-/synesthesia-1.0.1.tgz#5ef95ea548c0d5c6e6f9bb4b0d0731dff864a777" 2529 | dependencies: 2530 | css-color-names "0.0.3" 2531 | 2532 | table@^4.0.1: 2533 | version "4.0.1" 2534 | resolved "https://registry.yarnpkg.com/table/-/table-4.0.1.tgz#a8116c133fac2c61f4a420ab6cdf5c4d61f0e435" 2535 | dependencies: 2536 | ajv "^4.7.0" 2537 | ajv-keywords "^1.0.0" 2538 | chalk "^1.1.1" 2539 | lodash "^4.0.0" 2540 | slice-ansi "0.0.4" 2541 | string-width "^2.0.0" 2542 | 2543 | test-exclude@^4.1.0: 2544 | version "4.1.0" 2545 | resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.0.tgz#04ca70b7390dd38c98d4a003a173806ca7991c91" 2546 | dependencies: 2547 | arrify "^1.0.1" 2548 | micromatch "^2.3.11" 2549 | object-assign "^4.1.0" 2550 | read-pkg-up "^1.0.1" 2551 | require-main-filename "^1.0.1" 2552 | 2553 | text-table@^0.2.0: 2554 | version "0.2.0" 2555 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 2556 | 2557 | throat@^3.0.0: 2558 | version "3.0.0" 2559 | resolved "https://registry.yarnpkg.com/throat/-/throat-3.0.0.tgz#e7c64c867cbb3845f10877642f7b60055b8ec0d6" 2560 | 2561 | through2@^0.6.1, through2@^0.6.3, through2@~0.6.1: 2562 | version "0.6.5" 2563 | resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" 2564 | dependencies: 2565 | readable-stream ">=1.0.33-1 <1.1.0-0" 2566 | xtend ">=4.0.0 <4.1.0-0" 2567 | 2568 | "through@>=2.2.7 <3", through@~2.3.4: 2569 | version "2.3.8" 2570 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 2571 | 2572 | tmpl@1.0.x: 2573 | version "1.0.4" 2574 | resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" 2575 | 2576 | to-fast-properties@^1.0.1: 2577 | version "1.0.3" 2578 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" 2579 | 2580 | tough-cookie@^2.3.2, tough-cookie@~2.3.0: 2581 | version "2.3.2" 2582 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" 2583 | dependencies: 2584 | punycode "^1.4.1" 2585 | 2586 | tr46@~0.0.3: 2587 | version "0.0.3" 2588 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" 2589 | 2590 | trim-newlines@^1.0.0: 2591 | version "1.0.0" 2592 | resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" 2593 | 2594 | trim-right@^1.0.1: 2595 | version "1.0.1" 2596 | resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" 2597 | 2598 | tunnel-agent@^0.6.0: 2599 | version "0.6.0" 2600 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 2601 | dependencies: 2602 | safe-buffer "^5.0.1" 2603 | 2604 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 2605 | version "0.14.5" 2606 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 2607 | 2608 | type-check@~0.3.2: 2609 | version "0.3.2" 2610 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 2611 | dependencies: 2612 | prelude-ls "~1.1.2" 2613 | 2614 | uglify-js@^2.6: 2615 | version "2.8.22" 2616 | resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.22.tgz#d54934778a8da14903fa29a326fb24c0ab51a1a0" 2617 | dependencies: 2618 | source-map "~0.5.1" 2619 | yargs "~3.10.0" 2620 | optionalDependencies: 2621 | uglify-to-browserify "~1.0.0" 2622 | 2623 | uglify-to-browserify@~1.0.0: 2624 | version "1.0.2" 2625 | resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" 2626 | 2627 | uniq@^1.0.1: 2628 | version "1.0.1" 2629 | resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" 2630 | 2631 | uuid@^3.0.0: 2632 | version "3.0.1" 2633 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" 2634 | 2635 | validate-npm-package-license@^3.0.1: 2636 | version "3.0.1" 2637 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" 2638 | dependencies: 2639 | spdx-correct "~1.0.0" 2640 | spdx-expression-parse "~1.0.0" 2641 | 2642 | verror@1.3.6: 2643 | version "1.3.6" 2644 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" 2645 | dependencies: 2646 | extsprintf "1.0.2" 2647 | 2648 | walker@~1.0.5: 2649 | version "1.0.7" 2650 | resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" 2651 | dependencies: 2652 | makeerror "1.0.x" 2653 | 2654 | watch@~0.10.0: 2655 | version "0.10.0" 2656 | resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc" 2657 | 2658 | webidl-conversions@^3.0.0: 2659 | version "3.0.1" 2660 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" 2661 | 2662 | webidl-conversions@^4.0.0: 2663 | version "4.0.1" 2664 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.1.tgz#8015a17ab83e7e1b311638486ace81da6ce206a0" 2665 | 2666 | whatwg-encoding@^1.0.1: 2667 | version "1.0.1" 2668 | resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz#3c6c451a198ee7aec55b1ec61d0920c67801a5f4" 2669 | dependencies: 2670 | iconv-lite "0.4.13" 2671 | 2672 | whatwg-url@^4.3.0: 2673 | version "4.7.1" 2674 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.7.1.tgz#df4dc2e3f25a63b1fa5b32ed6d6c139577d690de" 2675 | dependencies: 2676 | tr46 "~0.0.3" 2677 | webidl-conversions "^3.0.0" 2678 | 2679 | which-module@^1.0.0: 2680 | version "1.0.0" 2681 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" 2682 | 2683 | which@^1.1.1, which@^1.2.12: 2684 | version "1.2.14" 2685 | resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" 2686 | dependencies: 2687 | isexe "^2.0.0" 2688 | 2689 | window-size@0.1.0: 2690 | version "0.1.0" 2691 | resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" 2692 | 2693 | window-size@^0.1.4: 2694 | version "0.1.4" 2695 | resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876" 2696 | 2697 | wordwrap@0.0.2: 2698 | version "0.0.2" 2699 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" 2700 | 2701 | wordwrap@~0.0.2: 2702 | version "0.0.3" 2703 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" 2704 | 2705 | wordwrap@~1.0.0: 2706 | version "1.0.0" 2707 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" 2708 | 2709 | worker-farm@^1.3.1: 2710 | version "1.3.1" 2711 | resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.3.1.tgz#4333112bb49b17aa050b87895ca6b2cacf40e5ff" 2712 | dependencies: 2713 | errno ">=0.1.1 <0.2.0-0" 2714 | xtend ">=4.0.0 <4.1.0-0" 2715 | 2716 | wrap-ansi@^2.0.0: 2717 | version "2.1.0" 2718 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" 2719 | dependencies: 2720 | string-width "^1.0.1" 2721 | strip-ansi "^3.0.1" 2722 | 2723 | wrappy@1: 2724 | version "1.0.2" 2725 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2726 | 2727 | write-file-stdout@0.0.2: 2728 | version "0.0.2" 2729 | resolved "https://registry.yarnpkg.com/write-file-stdout/-/write-file-stdout-0.0.2.tgz#c252d7c7c5b1b402897630e3453c7bfe690d9ca1" 2730 | 2731 | write@^0.2.1: 2732 | version "0.2.1" 2733 | resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" 2734 | dependencies: 2735 | mkdirp "^0.5.1" 2736 | 2737 | xml-name-validator@^2.0.1: 2738 | version "2.0.1" 2739 | resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" 2740 | 2741 | "xtend@>=4.0.0 <4.1.0-0": 2742 | version "4.0.1" 2743 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 2744 | 2745 | y18n@^3.2.0, y18n@^3.2.1: 2746 | version "3.2.1" 2747 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" 2748 | 2749 | yargs-parser@^4.2.0: 2750 | version "4.2.1" 2751 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" 2752 | dependencies: 2753 | camelcase "^3.0.0" 2754 | 2755 | yargs@^1.2.6: 2756 | version "1.3.3" 2757 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-1.3.3.tgz#054de8b61f22eefdb7207059eaef9d6b83fb931a" 2758 | 2759 | yargs@^3.5.4: 2760 | version "3.32.0" 2761 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.32.0.tgz#03088e9ebf9e756b69751611d2a5ef591482c995" 2762 | dependencies: 2763 | camelcase "^2.0.1" 2764 | cliui "^3.0.3" 2765 | decamelize "^1.1.1" 2766 | os-locale "^1.4.0" 2767 | string-width "^1.0.1" 2768 | window-size "^0.1.4" 2769 | y18n "^3.2.0" 2770 | 2771 | yargs@^6.3.0: 2772 | version "6.6.0" 2773 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" 2774 | dependencies: 2775 | camelcase "^3.0.0" 2776 | cliui "^3.2.0" 2777 | decamelize "^1.1.1" 2778 | get-caller-file "^1.0.1" 2779 | os-locale "^1.4.0" 2780 | read-pkg-up "^1.0.1" 2781 | require-directory "^2.1.1" 2782 | require-main-filename "^1.0.1" 2783 | set-blocking "^2.0.0" 2784 | string-width "^1.0.2" 2785 | which-module "^1.0.0" 2786 | y18n "^3.2.1" 2787 | yargs-parser "^4.2.0" 2788 | 2789 | yargs@~3.10.0: 2790 | version "3.10.0" 2791 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" 2792 | dependencies: 2793 | camelcase "^1.0.2" 2794 | cliui "^2.1.0" 2795 | decamelize "^1.0.0" 2796 | window-size "0.1.0" 2797 | -------------------------------------------------------------------------------- /flow-typed/npm/babel-traverse_vx.x.x.js: -------------------------------------------------------------------------------- 1 | // flow-typed signature: d9014f8bc026b71c5a1a5d5c13f0c393 2 | // flow-typed version: <>/babel-traverse_v^6.24.1/flow_v0.45.0 3 | 4 | import type Ast from 'babylon' 5 | import type Node from 'babylon' 6 | 7 | declare module 'babel-traverse' { 8 | declare module.exports: ( 9 | ast: Ast, 10 | opts?: { 11 | enter(args: { node: Node }): void, 12 | }, 13 | ) => void 14 | } 15 | -------------------------------------------------------------------------------- /flow-typed/npm/babylon_vx.x.x.js: -------------------------------------------------------------------------------- 1 | // flow-typed signature: 0266a8d6a48464ef50cdd8cf78fae007 2 | // flow-typed version: <>/babylon_v^6.17.0/flow_v0.45.0 3 | 4 | declare module 'babylon' { 5 | declare type Node = { 6 | loc: { start: { line: number } }, 7 | quasi: { 8 | expressions: [], 9 | end: number, 10 | start: number, 11 | }, 12 | } 13 | 14 | declare type Token = { label: string } 15 | 16 | declare type Ast = {} 17 | 18 | declare module.exports: { 19 | parse: ( 20 | input: string, 21 | options?: { 22 | sourceType?: 'module', 23 | plugins?: Array, 24 | }, 25 | ) => Ast, 26 | tokTypes: { 27 | bracketR: Token, 28 | braceR: Token, 29 | braceBarR: Token, 30 | parenR: Token, 31 | backQuote: Token, 32 | }, 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /flow-typed/npm/chalk_v1.x.x.js: -------------------------------------------------------------------------------- 1 | // flow-typed signature: 7b4e29a4fd2be533e1822c1b0aade79b 2 | // flow-typed version: 549b484575/chalk_v1.x.x/flow_>=v0.21.x 3 | 4 | type $npm$chalk$StyleElement = { 5 | open: string, 6 | close: string, 7 | } 8 | 9 | type $npm$chalk$Chain = $npm$chalk$Style & ((...text: string[]) => string) 10 | 11 | type $npm$chalk$Style = { 12 | // General 13 | reset: $npm$chalk$Chain, 14 | bold: $npm$chalk$Chain, 15 | dim: $npm$chalk$Chain, 16 | italic: $npm$chalk$Chain, 17 | underline: $npm$chalk$Chain, 18 | inverse: $npm$chalk$Chain, 19 | strikethrough: $npm$chalk$Chain, 20 | 21 | // Text colors 22 | black: $npm$chalk$Chain, 23 | red: $npm$chalk$Chain, 24 | green: $npm$chalk$Chain, 25 | yellow: $npm$chalk$Chain, 26 | blue: $npm$chalk$Chain, 27 | magenta: $npm$chalk$Chain, 28 | cyan: $npm$chalk$Chain, 29 | white: $npm$chalk$Chain, 30 | gray: $npm$chalk$Chain, 31 | grey: $npm$chalk$Chain, 32 | 33 | // Background colors 34 | bgBlack: $npm$chalk$Chain, 35 | bgRed: $npm$chalk$Chain, 36 | bgGreen: $npm$chalk$Chain, 37 | bgYellow: $npm$chalk$Chain, 38 | bgBlue: $npm$chalk$Chain, 39 | bgMagenta: $npm$chalk$Chain, 40 | bgCyan: $npm$chalk$Chain, 41 | bgWhite: $npm$chalk$Chain, 42 | } 43 | 44 | type $npm$chalk$StyleMap = { 45 | // General 46 | reset: $npm$chalk$StyleElement, 47 | bold: $npm$chalk$StyleElement, 48 | dim: $npm$chalk$StyleElement, 49 | italic: $npm$chalk$StyleElement, 50 | underline: $npm$chalk$StyleElement, 51 | inverse: $npm$chalk$StyleElement, 52 | strikethrough: $npm$chalk$StyleElement, 53 | 54 | // Text colors 55 | black: $npm$chalk$StyleElement, 56 | red: $npm$chalk$StyleElement, 57 | green: $npm$chalk$StyleElement, 58 | yellow: $npm$chalk$StyleElement, 59 | blue: $npm$chalk$StyleElement, 60 | magenta: $npm$chalk$StyleElement, 61 | cyan: $npm$chalk$StyleElement, 62 | white: $npm$chalk$StyleElement, 63 | gray: $npm$chalk$StyleElement, 64 | 65 | // Background colors 66 | bgBlack: $npm$chalk$StyleElement, 67 | bgRed: $npm$chalk$StyleElement, 68 | bgGreen: $npm$chalk$StyleElement, 69 | bgYellow: $npm$chalk$StyleElement, 70 | bgBlue: $npm$chalk$StyleElement, 71 | bgMagenta: $npm$chalk$StyleElement, 72 | bgCyan: $npm$chalk$StyleElement, 73 | bgWhite: $npm$chalk$StyleElement, 74 | } 75 | 76 | declare module 'chalk' { 77 | declare var enabled: boolean 78 | declare var supportsColor: boolean 79 | declare var styles: $npm$chalk$StyleMap 80 | 81 | declare function stripColor(value: string): any 82 | declare function hasColor(str: string): boolean 83 | 84 | // General 85 | declare var reset: $npm$chalk$Chain 86 | declare var bold: $npm$chalk$Chain 87 | declare var dim: $npm$chalk$Chain 88 | declare var italic: $npm$chalk$Chain 89 | declare var underline: $npm$chalk$Chain 90 | declare var inverse: $npm$chalk$Chain 91 | declare var strikethrough: $npm$chalk$Chain 92 | 93 | // Text colors 94 | declare var black: $npm$chalk$Chain 95 | declare var red: $npm$chalk$Chain 96 | declare var green: $npm$chalk$Chain 97 | declare var yellow: $npm$chalk$Chain 98 | declare var blue: $npm$chalk$Chain 99 | declare var magenta: $npm$chalk$Chain 100 | declare var cyan: $npm$chalk$Chain 101 | declare var white: $npm$chalk$Chain 102 | declare var gray: $npm$chalk$Chain 103 | declare var grey: $npm$chalk$Chain 104 | 105 | // Background colors 106 | declare var bgBlack: $npm$chalk$Chain 107 | declare var bgRed: $npm$chalk$Chain 108 | declare var bgGreen: $npm$chalk$Chain 109 | declare var bgYellow: $npm$chalk$Chain 110 | declare var bgBlue: $npm$chalk$Chain 111 | declare var bgMagenta: $npm$chalk$Chain 112 | declare var bgCyan: $npm$chalk$Chain 113 | declare var bgWhite: $npm$chalk$Chain 114 | } 115 | -------------------------------------------------------------------------------- /flow-typed/npm/deasync_vx.x.x.js: -------------------------------------------------------------------------------- 1 | // flow-typed signature: d62066926e61d1dd472c58136e96e132 2 | // flow-typed version: <>/deasync_v^0.1.9/flow_v0.45.0 3 | 4 | declare module 'deasync' { 5 | declare module.exports: { 6 | loopWhile(pred: () => boolean): void, 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /flow-typed/npm/diff_vx.x.x.js: -------------------------------------------------------------------------------- 1 | // flow-typed signature: 213d2944c88717cc2b10329b4af6213a 2 | // flow-typed version: <>/diff_v^3.2.0/flow_v0.45.0 3 | 4 | declare module 'diff' { 5 | declare module.exports: { 6 | createPatch(fileName: string, oldStr: string, newStr: string): string, 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /flow-typed/npm/escape-string-regexp_v1.x.x.js: -------------------------------------------------------------------------------- 1 | // flow-typed signature: ed810fce1a8248c9f857e4b34ac68c14 2 | // flow-typed version: 94e9f7e0a4/escape-string-regexp_v1.x.x/flow_>=v0.28.x 3 | 4 | declare module 'escape-string-regexp' { 5 | declare module.exports: (input: string) => string 6 | } 7 | -------------------------------------------------------------------------------- /flow-typed/npm/fs-extra_vx.x.x.js: -------------------------------------------------------------------------------- 1 | // flow-typed signature: 3f6330b883cc883d87aca3240b161af3 2 | // flow-typed version: <>/fs-extra_v^3.0.0/flow_v0.45.0 3 | 4 | import fs from 'fs' 5 | 6 | declare module 'fs-extra-x' { 7 | declare module.exports: typeof fs & { 8 | copy(from: string, to: string): void, 9 | mkdirsSync(path: string): void, 10 | removeSync(path: string): void, 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /flow-typed/npm/globby_vx.x.x.js: -------------------------------------------------------------------------------- 1 | // flow-typed signature: 01fd639d05cab1fc48e8fa119d716824 2 | // flow-typed version: <>/globby_v^6.1.0/flow_v0.45.0 3 | 4 | /** 5 | * This is an autogenerated libdef stub for: 6 | * 7 | * 'globby' 8 | * 9 | * Fill this stub out by replacing all the `any` types. 10 | * 11 | * Once filled out, we encourage you to share your work with the 12 | * community by sending a pull request to: 13 | * https://github.com/flowtype/flow-typed 14 | */ 15 | 16 | declare module 'globby' { 17 | declare module.exports: (patterns: Array) => Promise> 18 | } 19 | -------------------------------------------------------------------------------- /flow-typed/npm/indent-string_v3.x.x.js: -------------------------------------------------------------------------------- 1 | // flow-typed signature: df577dfb1cf22d9149d7d2087783d7d8 2 | // flow-typed version: 94e9f7e0a4/indent-string_v3.x.x/flow_>=v0.28.x 3 | 4 | declare module 'indent-string' { 5 | declare module.exports: (input: string, count?: number, indent?: string) => string 6 | } 7 | -------------------------------------------------------------------------------- /flow-typed/npm/jest_v19.x.x.js: -------------------------------------------------------------------------------- 1 | // flow-typed signature: b3ed97c44539e6cdbaf9032b315a2b31 2 | // flow-typed version: ea7ac31527/jest_v19.x.x/flow_>=v0.33.x 3 | 4 | type JestMockFn = { 5 | (...args: Array): any, 6 | /** 7 | * An object for introspecting mock calls 8 | */ 9 | mock: { 10 | /** 11 | * An array that represents all calls that have been made into this mock 12 | * function. Each call is represented by an array of arguments that were 13 | * passed during the call. 14 | */ 15 | calls: Array>, 16 | /** 17 | * An array that contains all the object instances that have been 18 | * instantiated from this mock function. 19 | */ 20 | instances: mixed, 21 | }, 22 | /** 23 | * Resets all information stored in the mockFn.mock.calls and 24 | * mockFn.mock.instances arrays. Often this is useful when you want to clean 25 | * up a mock's usage data between two assertions. 26 | */ 27 | mockClear(): Function, 28 | /** 29 | * Resets all information stored in the mock. This is useful when you want to 30 | * completely restore a mock back to its initial state. 31 | */ 32 | mockReset(): Function, 33 | /** 34 | * Accepts a function that should be used as the implementation of the mock. 35 | * The mock itself will still record all calls that go into and instances 36 | * that come from itself -- the only difference is that the implementation 37 | * will also be executed when the mock is called. 38 | */ 39 | mockImplementation(fn: Function): JestMockFn, 40 | /** 41 | * Accepts a function that will be used as an implementation of the mock for 42 | * one call to the mocked function. Can be chained so that multiple function 43 | * calls produce different results. 44 | */ 45 | mockImplementationOnce(fn: Function): JestMockFn, 46 | /** 47 | * Just a simple sugar function for returning `this` 48 | */ 49 | mockReturnThis(): void, 50 | /** 51 | * Deprecated: use jest.fn(() => value) instead 52 | */ 53 | mockReturnValue(value: any): JestMockFn, 54 | /** 55 | * Sugar for only returning a value once inside your mock 56 | */ 57 | mockReturnValueOnce(value: any): JestMockFn, 58 | } 59 | 60 | type JestAsymmetricEqualityType = { 61 | /** 62 | * A custom Jasmine equality tester 63 | */ 64 | asymmetricMatch(value: mixed): boolean, 65 | } 66 | 67 | type JestCallsType = { 68 | allArgs(): mixed, 69 | all(): mixed, 70 | any(): boolean, 71 | count(): number, 72 | first(): mixed, 73 | mostRecent(): mixed, 74 | reset(): void, 75 | } 76 | 77 | type JestClockType = { 78 | install(): void, 79 | mockDate(date: Date): void, 80 | tick(): void, 81 | uninstall(): void, 82 | } 83 | 84 | type JestMatcherResult = { 85 | message?: string | (() => string), 86 | pass: boolean, 87 | } 88 | 89 | type JestMatcher = (actual: any, expected: any) => JestMatcherResult 90 | 91 | type JestExpectType = { 92 | not: JestExpectType, 93 | /** 94 | * If you have a mock function, you can use .lastCalledWith to test what 95 | * arguments it was last called with. 96 | */ 97 | lastCalledWith(...args: Array): void, 98 | /** 99 | * toBe just checks that a value is what you expect. It uses === to check 100 | * strict equality. 101 | */ 102 | toBe(value: any): void, 103 | /** 104 | * Use .toHaveBeenCalled to ensure that a mock function got called. 105 | */ 106 | toBeCalled(): void, 107 | /** 108 | * Use .toBeCalledWith to ensure that a mock function was called with 109 | * specific arguments. 110 | */ 111 | toBeCalledWith(...args: Array): void, 112 | /** 113 | * Using exact equality with floating point numbers is a bad idea. Rounding 114 | * means that intuitive things fail. 115 | */ 116 | toBeCloseTo(num: number, delta: any): void, 117 | /** 118 | * Use .toBeDefined to check that a variable is not undefined. 119 | */ 120 | toBeDefined(): void, 121 | /** 122 | * Use .toBeFalsy when you don't care what a value is, you just want to 123 | * ensure a value is false in a boolean context. 124 | */ 125 | toBeFalsy(): void, 126 | /** 127 | * To compare floating point numbers, you can use toBeGreaterThan. 128 | */ 129 | toBeGreaterThan(number: number): void, 130 | /** 131 | * To compare floating point numbers, you can use toBeGreaterThanOrEqual. 132 | */ 133 | toBeGreaterThanOrEqual(number: number): void, 134 | /** 135 | * To compare floating point numbers, you can use toBeLessThan. 136 | */ 137 | toBeLessThan(number: number): void, 138 | /** 139 | * To compare floating point numbers, you can use toBeLessThanOrEqual. 140 | */ 141 | toBeLessThanOrEqual(number: number): void, 142 | /** 143 | * Use .toBeInstanceOf(Class) to check that an object is an instance of a 144 | * class. 145 | */ 146 | toBeInstanceOf(cls: Class<*>): void, 147 | /** 148 | * .toBeNull() is the same as .toBe(null) but the error messages are a bit 149 | * nicer. 150 | */ 151 | toBeNull(): void, 152 | /** 153 | * Use .toBeTruthy when you don't care what a value is, you just want to 154 | * ensure a value is true in a boolean context. 155 | */ 156 | toBeTruthy(): void, 157 | /** 158 | * Use .toBeUndefined to check that a variable is undefined. 159 | */ 160 | toBeUndefined(): void, 161 | /** 162 | * Use .toContain when you want to check that an item is in a list. For 163 | * testing the items in the list, this uses ===, a strict equality check. 164 | */ 165 | toContain(item: any): void, 166 | /** 167 | * Use .toContainEqual when you want to check that an item is in a list. For 168 | * testing the items in the list, this matcher recursively checks the 169 | * equality of all fields, rather than checking for object identity. 170 | */ 171 | toContainEqual(item: any): void, 172 | /** 173 | * Use .toEqual when you want to check that two objects have the same value. 174 | * This matcher recursively checks the equality of all fields, rather than 175 | * checking for object identity. 176 | */ 177 | toEqual(value: any): void, 178 | /** 179 | * Use .toHaveBeenCalled to ensure that a mock function got called. 180 | */ 181 | toHaveBeenCalled(): void, 182 | /** 183 | * Use .toHaveBeenCalledTimes to ensure that a mock function got called exact 184 | * number of times. 185 | */ 186 | toHaveBeenCalledTimes(number: number): void, 187 | /** 188 | * Use .toHaveBeenCalledWith to ensure that a mock function was called with 189 | * specific arguments. 190 | */ 191 | toHaveBeenCalledWith(...args: Array): void, 192 | /** 193 | * Check that an object has a .length property and it is set to a certain 194 | * numeric value. 195 | */ 196 | toHaveLength(number: number): void, 197 | /** 198 | * 199 | */ 200 | toHaveProperty(propPath: string, value?: any): void, 201 | /** 202 | * Use .toMatch to check that a string matches a regular expression. 203 | */ 204 | toMatch(regexp: RegExp): void, 205 | /** 206 | * Use .toMatchObject to check that a javascript object matches a subset of the properties of an object. 207 | */ 208 | toMatchObject(object: Object): void, 209 | /** 210 | * This ensures that a React component matches the most recent snapshot. 211 | */ 212 | toMatchSnapshot(name?: string): void, 213 | /** 214 | * Use .toThrow to test that a function throws when it is called. 215 | */ 216 | toThrow(message?: string | Error): void, 217 | /** 218 | * Use .toThrowError to test that a function throws a specific error when it 219 | * is called. The argument can be a string for the error message, a class for 220 | * the error, or a regex that should match the error. 221 | */ 222 | toThrowError(message?: string | Error | RegExp): void, 223 | /** 224 | * Use .toThrowErrorMatchingSnapshot to test that a function throws a error 225 | * matching the most recent snapshot when it is called. 226 | */ 227 | toThrowErrorMatchingSnapshot(): void, 228 | } 229 | 230 | type JestObjectType = { 231 | /** 232 | * Disables automatic mocking in the module loader. 233 | * 234 | * After this method is called, all `require()`s will return the real 235 | * versions of each module (rather than a mocked version). 236 | */ 237 | disableAutomock(): JestObjectType, 238 | /** 239 | * An un-hoisted version of disableAutomock 240 | */ 241 | autoMockOff(): JestObjectType, 242 | /** 243 | * Enables automatic mocking in the module loader. 244 | */ 245 | enableAutomock(): JestObjectType, 246 | /** 247 | * An un-hoisted version of enableAutomock 248 | */ 249 | autoMockOn(): JestObjectType, 250 | /** 251 | * Clears the mock.calls and mock.instances properties of all mocks. 252 | * Equivalent to calling .mockClear() on every mocked function. 253 | */ 254 | clearAllMocks(): JestObjectType, 255 | /** 256 | * Resets the state of all mocks. Equivalent to calling .mockReset() on every 257 | * mocked function. 258 | */ 259 | resetAllMocks(): JestObjectType, 260 | /** 261 | * Removes any pending timers from the timer system. 262 | */ 263 | clearAllTimers(): void, 264 | /** 265 | * The same as `mock` but not moved to the top of the expectation by 266 | * babel-jest. 267 | */ 268 | doMock(moduleName: string, moduleFactory?: any): JestObjectType, 269 | /** 270 | * The same as `unmock` but not moved to the top of the expectation by 271 | * babel-jest. 272 | */ 273 | dontMock(moduleName: string): JestObjectType, 274 | /** 275 | * Returns a new, unused mock function. Optionally takes a mock 276 | * implementation. 277 | */ 278 | fn(implementation?: Function): JestMockFn, 279 | /** 280 | * Determines if the given function is a mocked function. 281 | */ 282 | isMockFunction(fn: Function): boolean, 283 | /** 284 | * Given the name of a module, use the automatic mocking system to generate a 285 | * mocked version of the module for you. 286 | */ 287 | genMockFromModule(moduleName: string): any, 288 | /** 289 | * Mocks a module with an auto-mocked version when it is being required. 290 | * 291 | * The second argument can be used to specify an explicit module factory that 292 | * is being run instead of using Jest's automocking feature. 293 | * 294 | * The third argument can be used to create virtual mocks -- mocks of modules 295 | * that don't exist anywhere in the system. 296 | */ 297 | mock(moduleName: string, moduleFactory?: any): JestObjectType, 298 | /** 299 | * Resets the module registry - the cache of all required modules. This is 300 | * useful to isolate modules where local state might conflict between tests. 301 | */ 302 | resetModules(): JestObjectType, 303 | /** 304 | * Exhausts the micro-task queue (usually interfaced in node via 305 | * process.nextTick). 306 | */ 307 | runAllTicks(): void, 308 | /** 309 | * Exhausts the macro-task queue (i.e., all tasks queued by setTimeout(), 310 | * setInterval(), and setImmediate()). 311 | */ 312 | runAllTimers(): void, 313 | /** 314 | * Exhausts all tasks queued by setImmediate(). 315 | */ 316 | runAllImmediates(): void, 317 | /** 318 | * Executes only the macro task queue (i.e. all tasks queued by setTimeout() 319 | * or setInterval() and setImmediate()). 320 | */ 321 | runTimersToTime(msToRun: number): void, 322 | /** 323 | * Executes only the macro-tasks that are currently pending (i.e., only the 324 | * tasks that have been queued by setTimeout() or setInterval() up to this 325 | * point) 326 | */ 327 | runOnlyPendingTimers(): void, 328 | /** 329 | * Explicitly supplies the mock object that the module system should return 330 | * for the specified module. Note: It is recommended to use jest.mock() 331 | * instead. 332 | */ 333 | setMock(moduleName: string, moduleExports: any): JestObjectType, 334 | /** 335 | * Indicates that the module system should never return a mocked version of 336 | * the specified module from require() (e.g. that it should always return the 337 | * real module). 338 | */ 339 | unmock(moduleName: string): JestObjectType, 340 | /** 341 | * Instructs Jest to use fake versions of the standard timer functions 342 | * (setTimeout, setInterval, clearTimeout, clearInterval, nextTick, 343 | * setImmediate and clearImmediate). 344 | */ 345 | useFakeTimers(): JestObjectType, 346 | /** 347 | * Instructs Jest to use the real versions of the standard timer functions. 348 | */ 349 | useRealTimers(): JestObjectType, 350 | /** 351 | * Creates a mock function similar to jest.fn but also tracks calls to 352 | * object[methodName]. 353 | */ 354 | spyOn(object: Object, methodName: string): JestMockFn, 355 | } 356 | 357 | type JestSpyType = { 358 | calls: JestCallsType, 359 | } 360 | 361 | /** Runs this function after every test inside this context */ 362 | declare function afterEach(fn: Function): void 363 | /** Runs this function before every test inside this context */ 364 | declare function beforeEach(fn: Function): void 365 | /** Runs this function after all tests have finished inside this context */ 366 | declare function afterAll(fn: Function): void 367 | /** Runs this function before any tests have started inside this context */ 368 | declare function beforeAll(fn: Function): void 369 | /** A context for grouping tests together */ 370 | declare function describe(name: string, fn: Function): void 371 | 372 | /** An individual test unit */ 373 | declare var it: { 374 | /** 375 | * An individual test unit 376 | * 377 | * @param {string} Name of Test 378 | * @param {Function} Test 379 | */ 380 | (name: string, fn?: Function): ?Promise, 381 | /** 382 | * Only run this test 383 | * 384 | * @param {string} Name of Test 385 | * @param {Function} Test 386 | */ 387 | only(name: string, fn?: Function): ?Promise, 388 | /** 389 | * Skip running this test 390 | * 391 | * @param {string} Name of Test 392 | * @param {Function} Test 393 | */ 394 | skip(name: string, fn?: Function): ?Promise, 395 | /** 396 | * Run the test concurrently 397 | * 398 | * @param {string} Name of Test 399 | * @param {Function} Test 400 | */ 401 | concurrent(name: string, fn?: Function): ?Promise, 402 | } 403 | declare function fit(name: string, fn: Function): ?Promise 404 | /** An individual test unit */ 405 | declare var test: typeof it 406 | /** A disabled group of tests */ 407 | declare var xdescribe: typeof describe 408 | /** A focused group of tests */ 409 | declare var fdescribe: typeof describe 410 | /** A disabled individual test */ 411 | declare var xit: typeof it 412 | /** A disabled individual test */ 413 | declare var xtest: typeof it 414 | 415 | /** The expect function is used every time you want to test a value */ 416 | declare var expect: { 417 | /** The object that you want to make assertions against */ 418 | (value: any): JestExpectType, 419 | /** Add additional Jasmine matchers to Jest's roster */ 420 | extend(matchers: { [name: string]: JestMatcher }): void, 421 | /** Add a module that formats application-specific data structures. */ 422 | addSnapshotSerializer(serializer: (input: Object) => string): void, 423 | assertions(expectedAssertions: number): void, 424 | any(value: mixed): JestAsymmetricEqualityType, 425 | anything(): void, 426 | arrayContaining(value: Array): void, 427 | objectContaining(value: Object): void, 428 | /** Matches any received string that contains the exact expected string. */ 429 | stringContaining(value: string): void, 430 | stringMatching(value: string | RegExp): void, 431 | } 432 | 433 | // TODO handle return type 434 | // http://jasmine.github.io/2.4/introduction.html#section-Spies 435 | declare function spyOn(value: mixed, method: string): Object 436 | 437 | /** Holds all functions related to manipulating test runner */ 438 | declare var jest: JestObjectType 439 | 440 | /** 441 | * The global Jamine object, this is generally not exposed as the public API, 442 | * using features inside here could break in later versions of Jest. 443 | */ 444 | declare var jasmine: { 445 | DEFAULT_TIMEOUT_INTERVAL: number, 446 | any(value: mixed): JestAsymmetricEqualityType, 447 | anything(): void, 448 | arrayContaining(value: Array): void, 449 | clock(): JestClockType, 450 | createSpy(name: string): JestSpyType, 451 | createSpyObj(baseName: string, methodNames: Array): { [methodName: string]: JestSpyType }, 452 | objectContaining(value: Object): void, 453 | stringMatching(value: string): void, 454 | } 455 | -------------------------------------------------------------------------------- /flow-typed/npm/minimist_v1.x.x.js: -------------------------------------------------------------------------------- 1 | // flow-typed signature: 50bc453586282fb18e63201750049659 2 | // flow-typed version: e6f7626e10/minimist_v1.x.x/flow_>=v0.28.x 3 | 4 | declare module 'minimist' { 5 | declare type minimistOptions = { 6 | string?: string | Array, 7 | boolean?: boolean | string | Array, 8 | alias?: { [arg: string]: string | Array }, 9 | default?: { [arg: string]: any }, 10 | stopEarly?: boolean, 11 | // TODO: Strings as keys don't work... 12 | // '--'? boolean, 13 | unknown?: (param: string) => boolean, 14 | } 15 | 16 | declare type minimistOutput = { 17 | [flag: string]: string | boolean, 18 | _: Array, 19 | } 20 | 21 | declare module.exports: (argv: Array, opts?: minimistOptions) => minimistOutput 22 | } 23 | -------------------------------------------------------------------------------- /flow-typed/npm/postcss_vx.x.x.js: -------------------------------------------------------------------------------- 1 | // flow-typed signature: a06edcb53d430251478b724e1f19e383 2 | // flow-typed version: <>/postcss_v^5.2.17/flow_v0.45.0 3 | 4 | declare module 'postcss' { 5 | declare module.exports: ( 6 | plugins?: Array, 7 | ) => { 8 | process(css: string, options?: { [string]: any }): Promise<{ css: string }>, 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /flow-typed/npm/stylefmt_vx.x.x.js: -------------------------------------------------------------------------------- 1 | // flow-typed signature: 5fc2beff4d72a3544d698d498e9b98d4 2 | // flow-typed version: <>/stylefmt_v^5.3.2/flow_v0.45.0 3 | 4 | declare module 'stylefmt' { 5 | declare type Options = { from?: string, syntax?: any } 6 | 7 | declare module.exports: (options?: Options) => any 8 | } 9 | -------------------------------------------------------------------------------- /flow-typed/npm/stylelint-processor-styled-components_vx.x.x.js: -------------------------------------------------------------------------------- 1 | // flow-typed signature: ad707f38f8f64c8d74f477bd6ef2d8bd 2 | // flow-typed version: <>/stylelint-processor-styled-components_v^0.1.0/flow_v0.45.0 3 | 4 | import type BabelNode from 'babylon' 5 | 6 | declare module 'stylelint-processor-styled-components/lib/utils/styled' { 7 | declare module.exports: { 8 | isHelper(node: BabelNode, importedNames: { [string]: string }): string, 9 | isStyled(node: BabelNode, styledVariableName: string): boolean, 10 | isStyledImport(node: BabelNode): boolean, 11 | } 12 | } 13 | 14 | declare module 'stylelint-processor-styled-components/lib/utils/parse' { 15 | declare module.exports: { 16 | parseImports(node: BabelNode, currentNames?: { [string]: string }): { [string]: string }, 17 | } 18 | } 19 | 20 | declare module 'stylelint-processor-styled-components/lib/utils/general' { 21 | declare module.exports: { 22 | fixIndentation( 23 | str: string, 24 | ): { 25 | text: string, 26 | }, 27 | wrapKeyframes(str: string): string, 28 | wrapSelector(str: string): string, 29 | } 30 | } 31 | 32 | declare module 'stylelint-processor-styled-components/lib/utils/tagged-template-literal' { 33 | declare module.exports: { 34 | getTaggedTemplateLiteralContent(node: BabelNode): string, 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /flow-typed/npm/tempy_vx.x.x.js: -------------------------------------------------------------------------------- 1 | // flow-typed signature: 663636aaf996c6d1a7b04219ff0619b5 2 | // flow-typed version: <>/tempy_v^0.1.0/flow_v0.45.0 3 | 4 | declare module 'tempy' { 5 | declare module.exports: { 6 | directory(): string, 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "styled-components-stylefmt", 3 | "version": "0.1.4", 4 | "description": "Formats styled-components templates with stylefmt", 5 | "main": "lib/index.js", 6 | "dependencies": { 7 | "babel-traverse": "^6.26.0", 8 | "babylon": "^6.18.0", 9 | "chalk": "^2.3.0", 10 | "deasync": "^0.1.11", 11 | "detect-newline": "^2.1.0", 12 | "diff": "^3.4.0", 13 | "escape-string-regexp": "^1.0.5", 14 | "globby": "^7.1.1", 15 | "indent-string": "^3.2.0", 16 | "minimist": "^1.2.0", 17 | "postcss": "^5.2.17", 18 | "stylefmt": "^5.3.2", 19 | "stylelint-processor-styled-components": "^0.1.2" 20 | }, 21 | "devDependencies": { 22 | "babel-cli": "^6.26.0", 23 | "babel-eslint": "^7.2.3", 24 | "babel-jest": "^21.2.0", 25 | "babel-preset-env": "^1.6.1", 26 | "babel-preset-flow": "^6.23.0", 27 | "coveralls": "^2.13.1", 28 | "eslint": "^3.19.0", 29 | "eslint-config-airbnb-base": "^11.1.3", 30 | "eslint-plugin-import": "^2.2.0", 31 | "flow-bin": "^0.45.0", 32 | "flow-typed": "^2.1.2", 33 | "fs-extra": "^5.0.0", 34 | "jest": "^21.2.1", 35 | "lint-staged": "^6.0.0", 36 | "pre-commit": "^1.2.2", 37 | "prettier-eslint-cli": "^3.4.2", 38 | "stylelint": "^8.3.1", 39 | "tempy": "^0.2.1" 40 | }, 41 | "scripts": { 42 | "coveralls": "cat ./coverage/lcov.info | ./node_modules/.bin/coveralls", 43 | "eslint": "eslint src", 44 | "flow": "flow", 45 | "format": "prettier-eslint --write \"src/**/*.js\"", 46 | "lib": "babel src --ignore \"/__tests__/\" --out-dir lib", 47 | "lint-staged": "lint-staged", 48 | "prepublish": "yarn lib", 49 | "test": "jest --config .jestrc.json", 50 | "test:stylelint": "stylelint \"./src/__tests__/fixtures/**/*.expected.js\" --config .stylelintrc" 51 | }, 52 | "author": { 53 | "name": "Enoah Netzach", 54 | "email": "f.castellarin@gmail.com", 55 | "url": "https://github.com/EnoahNetzach" 56 | }, 57 | "repository": { 58 | "type": "git", 59 | "url": "git+https://github.com/brumbrum-it/styled-components-stylefmt.git" 60 | }, 61 | "bugs": { 62 | "url": "https://github.com/brumbrum-it/styled-components-stylefmt/issues" 63 | }, 64 | "license": "MIT", 65 | "keywords": [ 66 | "styled-components", 67 | "stylefmt", 68 | "stylelint", 69 | "css-format" 70 | ], 71 | "engines": { 72 | "node": ">= 4" 73 | }, 74 | "bin": { 75 | "styled-components-stylefmt": "bin/index.js" 76 | }, 77 | "files": [ 78 | "bin/index.js", 79 | "lib/index.js", 80 | "lib/bin.js" 81 | ], 82 | "lint-staged": { 83 | "*.js": [ 84 | "format", 85 | "git add" 86 | ] 87 | }, 88 | "pre-commit": "lint-staged" 89 | } 90 | -------------------------------------------------------------------------------- /src/__tests__/__snapshots__/bin.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`bin diff prints the diff for a single file 1`] = ` 4 | "src/__tests__/fixtures/hard/invalid-indentation.actual.js 5 | import styled from 'styled-components' 6 | 7 | // ⚠ 2 indentation errors ⚠ 8 | const Comp = () => { 9 | const Button = styled.button\` 10 | color: blue; 11 | background: red; 12 | display: block; 13 | \` 14 | 15 | return Button 16 | } 17 | 18 | // ⚠ 2 indentation errors ⚠ 19 | const Comp2 = () => { 20 | const InnerComp = () => { 21 | const Button = styled.button\` 22 | color: blue; 23 | background: red; 24 | display: block; 25 | \` 26 | 27 | return Button 28 | } 29 | 30 | return InnerComp() 31 | } 32 | 33 | " 34 | `; 35 | 36 | exports[`bin diff prints the diff for multiple files 1`] = ` 37 | "src/__tests__/fixtures/hard/indentation.actual.js 38 | import styled, { keyframes } from 'styled-components' 39 | 40 | // None of the below should throw indentation errors 41 | const Comp = () => { 42 | const Button = styled.button\` 43 | color: blue; 44 | \` 45 | 46 | return Button 47 | } 48 | 49 | const Comp2 = () => { 50 | const InnerComp = () => { 51 | const Button = styled.button\` 52 | color: blue; 53 | \` 54 | 55 | return Button 56 | } 57 | 58 | return InnerComp() 59 | } 60 | 61 | const Button = styled.button\` 62 | color: blue; 63 | \` 64 | 65 | const animations = { 66 | spinnerCircle: keyframes\` 67 | 0% { 68 | opacity: 0; 69 | } 70 | 71 | 100% { 72 | opacity: 1; 73 | } 74 | \`, 75 | } 76 | 77 | 78 | src/__tests__/fixtures/hard/invalid-indentation.actual.js 79 | import styled from 'styled-components' 80 | 81 | // ⚠ 2 indentation errors ⚠ 82 | const Comp = () => { 83 | const Button = styled.button\` 84 | color: blue; 85 | background: red; 86 | display: block; 87 | \` 88 | 89 | return Button 90 | } 91 | 92 | // ⚠ 2 indentation errors ⚠ 93 | const Comp2 = () => { 94 | const InnerComp = () => { 95 | const Button = styled.button\` 96 | color: blue; 97 | background: red; 98 | display: block; 99 | \` 100 | 101 | return Button 102 | } 103 | 104 | return InnerComp() 105 | } 106 | 107 | 108 | src/__tests__/fixtures/hard/source-maps.actual.js 109 | import styled from 'styled-components' 110 | 111 | // ⚠️ BAD INDENTATION at 5:1 ⚠️ 112 | const Button = styled.button\` 113 | color: blue; 114 | \` 115 | 116 | // Correct example 117 | const Button2 = styled.button\` 118 | color: blue; 119 | \` 120 | 121 | // ⚠️ BAD INDENTATION at 10:5 ⚠️ 122 | const Button3 = styled.button\` 123 | color: blue; 124 | \` 125 | 126 | // ⚠️ BAD INDENTATION at 22:5 ⚠️ 127 | const Button4 = styled.button\` 128 | color: blue; 129 | background: \${color}; 130 | display: block; 131 | \` 132 | 133 | // ⚠️ BAD INDENTATION at 28:5 ⚠️ 134 | const Button5 = styled.button\` 135 | color: blue; 136 | background: \${color}; 137 | display: block; 138 | \` 139 | 140 | // ⚠️ BAD INDENTATION at 35:5 ⚠️ 141 | const Button6 = styled.button\` 142 | color: blue; 143 | \${\` 144 | background: red; 145 | \`} 146 | display: block; 147 | \` 148 | 149 | 150 | src/__tests__/fixtures/interpolations/complex.actual.js 151 | There is no difference with the original file. 152 | 153 | src/__tests__/fixtures/interpolations/invalid.actual.js 154 | import styled from 'styled-components' 155 | 156 | const color = 'red' 157 | 158 | // ⚠️ BAD INDENTATION ⚠️ 159 | const Button2 = styled.button\` 160 | display: block; 161 | color: \${color}; 162 | background: blue; 163 | \` 164 | 165 | 166 | src/__tests__/fixtures/interpolations/valid.actual.js 167 | There is no difference with the original file. 168 | 169 | src/__tests__/fixtures/real-world/Circle.actual.js 170 | There is no difference with the original file. 171 | 172 | src/__tests__/fixtures/simple/global.actual.js 173 | // Global variables 174 | 175 | // ⚠️ Wrong indentation ⚠️ 176 | const Button = styled.div\` 177 | color: red; 178 | \` 179 | 180 | // ⚠️ Wrong indentation ⚠️ 181 | const animation = keyframes\` 182 | 0% { 183 | opacity: 0; 184 | } 185 | \` 186 | 187 | // ⚠️ Wrong indentation ⚠️ 188 | injectGlobal\` 189 | html { 190 | margin: 0; 191 | } 192 | \` 193 | 194 | const styles = css\` 195 | color: blue; 196 | \` 197 | 198 | 199 | src/__tests__/fixtures/simple/helpers.actual.js 200 | import styled, { css, keyframes, injectGlobal } from 'styled-components' 201 | 202 | /** 203 | * Valid 204 | */ 205 | const styles = css\` 206 | color: blue; 207 | \` 208 | 209 | const animation = keyframes\` 210 | 0% { 211 | opacity: 1; 212 | } 213 | 214 | 100% { 215 | opacity: 0; 216 | } 217 | \` 218 | 219 | const Button = styled.button\` 220 | \${styles} 221 | animation: 3s \${animation}; 222 | \` 223 | 224 | injectGlobal\` 225 | html { 226 | margin: 0; 227 | padding: 0; 228 | } 229 | \` 230 | 231 | // ⚠ Indentation 232 | const styles2 = css\` 233 | color: blue; 234 | \` 235 | 236 | // ⚠ Indentation 237 | const animation2 = keyframes\` 238 | 0% { 239 | opacity: 1; 240 | } 241 | 242 | 100% { 243 | opacity: 0; 244 | } 245 | \` 246 | 247 | // ⚠ Indentation 248 | injectGlobal\` 249 | html { 250 | margin: 0; 251 | padding: 0; 252 | } 253 | \` 254 | 255 | 256 | src/__tests__/fixtures/simple/imports.actual.js 257 | import notStyled, { css as notCss, keyframes as notKeyframes, injectGlobal as notInjectGlobal } from 'styled-components' 258 | 259 | // ⚠️ BAD INDENTATION ⚠️ 260 | const Button2 = notStyled.button\` 261 | color: blue; 262 | \` 263 | 264 | const styles = notCss\` 265 | color: blue; 266 | \` 267 | 268 | const animation = notKeyframes\` 269 | 0% { 270 | opacity: 0; 271 | } 272 | 273 | 100% { 274 | opacity: 1; 275 | } 276 | \` 277 | 278 | notInjectGlobal\` 279 | html { 280 | color: blue; 281 | } 282 | \` 283 | 284 | 285 | src/__tests__/fixtures/simple/invalid.actual.js 286 | import styled from 'styled-components' 287 | 288 | // ⚠️ EMPTY BLOCK ⚠️ 289 | const Button = styled.button\` 290 | 291 | \` 292 | 293 | // ⚠️ BAD INDENTATION ⚠️ 294 | const Button2 = styled.button\` 295 | color: blue; 296 | \` 297 | 298 | 299 | src/__tests__/fixtures/simple/nesting.actual.js 300 | There is no difference with the original file. 301 | 302 | src/__tests__/fixtures/simple/valid.actual.js 303 | There is no difference with the original file. 304 | " 305 | `; 306 | 307 | exports[`bin help prints the help page 1`] = ` 308 | "Usage: styled-components-stylefmt [options] input-name [output-name] 309 | 310 | Options: 311 | 312 | -b, --config-basedir Path to the directory that relative paths defining \\"extends\\" 313 | -c, --config Path to a specific configuration file (JSON, YAML, or CommonJS) 314 | -d, --diff Output diff against original file 315 | -r, --recursive Format list of space seperated files(globs) in place 316 | -v, --version Output the version number 317 | -h, --help Output usage information 318 | -i, --ignore-path Path to a file containing patterns that describe files to ignore. 319 | " 320 | `; 321 | 322 | exports[`bin no args prints the help page by default 1`] = ` 323 | "Usage: styled-components-stylefmt [options] input-name [output-name] 324 | 325 | Options: 326 | 327 | -b, --config-basedir Path to the directory that relative paths defining \\"extends\\" 328 | -c, --config Path to a specific configuration file (JSON, YAML, or CommonJS) 329 | -d, --diff Output diff against original file 330 | -r, --recursive Format list of space seperated files(globs) in place 331 | -v, --version Output the version number 332 | -h, --help Output usage information 333 | -i, --ignore-path Path to a file containing patterns that describe files to ignore. 334 | " 335 | `; 336 | 337 | exports[`bin write formats a single file and prints to stdout 1`] = ` 338 | "import styled from 'styled-components' 339 | 340 | // ⚠ 2 indentation errors ⚠ 341 | const Comp = () => { 342 | const Button = styled.button\` 343 | color: blue; 344 | background: red; 345 | display: block; 346 | \` 347 | 348 | return Button 349 | } 350 | 351 | // ⚠ 2 indentation errors ⚠ 352 | const Comp2 = () => { 353 | const InnerComp = () => { 354 | const Button = styled.button\` 355 | color: blue; 356 | background: red; 357 | display: block; 358 | \` 359 | 360 | return Button 361 | } 362 | 363 | return InnerComp() 364 | } 365 | " 366 | `; 367 | -------------------------------------------------------------------------------- /src/__tests__/bin.js: -------------------------------------------------------------------------------- 1 | // @flow 2 | 3 | import { spawn, spawnSync } from 'child_process' 4 | import fs from 'fs-extra' 5 | import globby from 'globby' 6 | import path from 'path' 7 | import tempy from 'tempy' 8 | 9 | const tmpdir = tempy.directory() 10 | 11 | const copyTestFile = (file) => { 12 | const tmpFile = path.join(tmpdir, path.basename(file)) 13 | 14 | fs.copy(file, tmpFile) 15 | 16 | return tmpFile 17 | } 18 | 19 | const run = args => 20 | new Promise((resolve) => { 21 | const bin = spawn('node', [path.join(__dirname, '../../bin/index.js')].concat(args), { 22 | stdio: 'pipe', 23 | }) 24 | 25 | let error = '' 26 | let output = '' 27 | 28 | bin.stdout.on('data', (data) => { 29 | output += data.toString() 30 | }) 31 | 32 | bin.stderr.on('data', (data) => { 33 | error += data.toString() 34 | }) 35 | 36 | bin.on('close', code => resolve({ code, error, output })) 37 | }) 38 | 39 | beforeAll(() => spawnSync('yarn', ['lib'], { stdio: 'ignore' })) 40 | 41 | describe('bin', () => { 42 | let args = [] 43 | 44 | describe('no args', () => { 45 | test('prints the help page by default', async () => { 46 | const { code, error, output } = await run(args) 47 | 48 | expect(code).toBe(0) 49 | expect(error).toBe('') 50 | expect(output).not.toBe('') 51 | expect(output).toMatchSnapshot() 52 | }) 53 | }) 54 | 55 | describe('help', () => { 56 | beforeEach(() => { 57 | args = ['--help'] 58 | }) 59 | 60 | test('prints the help page', async () => { 61 | const { code, error, output } = await run(args) 62 | 63 | expect(code).toBe(0) 64 | expect(error).toBe('') 65 | expect(output).not.toBe('') 66 | expect(output).toMatchSnapshot() 67 | }) 68 | }) 69 | 70 | describe('diff', () => { 71 | beforeEach(() => { 72 | args = ['--diff'] 73 | }) 74 | 75 | test('prints the diff for a single file', async () => { 76 | const inputFile = path.join(__dirname, './fixtures/hard/invalid-indentation.actual.js') 77 | const { code, error, output } = await run([inputFile, ...args]) 78 | 79 | expect(code).toBe(0) 80 | expect(error).toBe('') 81 | expect(output).not.toBe('') 82 | expect(output).toMatchSnapshot() 83 | }) 84 | 85 | test('prints the diff for multiple files', async () => { 86 | const inputGlob = path.join(__dirname, './fixtures/**/*.actual.js') 87 | const { code, error, output } = await run(['--recursive', inputGlob, ...args]) 88 | 89 | expect(code).toBe(0) 90 | expect(error).toBe('') 91 | expect(output).not.toBe('') 92 | expect(output).toMatchSnapshot() 93 | }) 94 | }) 95 | 96 | describe('write', () => { 97 | beforeEach(() => { 98 | args = [] 99 | }) 100 | 101 | afterEach(() => { 102 | fs.removeSync(tmpdir) 103 | fs.mkdirsSync(tmpdir) 104 | }) 105 | 106 | test('formats a single file and prints to stdout', async () => { 107 | const inputFile = copyTestFile(path.join(__dirname, './fixtures/hard/invalid-indentation.actual.js')) 108 | const { code, error, output } = await run([inputFile, ...args]) 109 | 110 | expect(code).toBe(0) 111 | expect(error).toBe('') 112 | expect(output).not.toBe('') 113 | expect(output).toMatchSnapshot() 114 | }) 115 | 116 | test('formats a single file and overwrites it', async () => { 117 | const fixturePath = path.join(__dirname, './fixtures/hard/invalid-indentation.actual.js') 118 | const inputFile = copyTestFile(fixturePath) 119 | const { code, error, output } = await run([inputFile, inputFile, ...args]) 120 | 121 | expect(code).toBe(0) 122 | expect(error).toBe('') 123 | expect(output).toBe('') 124 | expect(fs.readFileSync(fixturePath)).not.toEqual(fs.readFileSync(inputFile)) 125 | }) 126 | 127 | test("formats a single file and doesn't overwrite it if it's unchanged", async () => { 128 | const fixturePath = path.join(__dirname, './fixtures/real-world/Circle.actual.js') 129 | const inputFile = copyTestFile(fixturePath) 130 | const { code, error, output } = await run([inputFile, inputFile, ...args]) 131 | const fixture = fs.readFileSync(fixturePath) 132 | 133 | expect(code).toBe(0) 134 | expect(error).toBe('') 135 | expect(output).toEqual(fixture.toString()) 136 | expect(fixture).toEqual(fs.readFileSync(inputFile)) 137 | }) 138 | 139 | test('formats multiple files and overwrites them', async () => { 140 | const fixtureGlob = path.join(__dirname, './fixtures/hard/*.actual.js') 141 | const inputGlob = path.join((await globby([fixtureGlob])).map(copyTestFile).map(path.dirname)[0], '*.js') 142 | const { code, error, output } = await run(['--recursive', inputGlob, ...args]) 143 | 144 | expect(code).toBe(0) 145 | expect(error).toBe('') 146 | expect(output).toMatch(/3 files are formatted\./) 147 | }) 148 | }) 149 | }) 150 | -------------------------------------------------------------------------------- /src/__tests__/fixtures/hard/indentation.actual.js: -------------------------------------------------------------------------------- 1 | import styled, { keyframes } from 'styled-components' 2 | 3 | // None of the below should throw indentation errors 4 | const Comp = () => { 5 | const Button = styled.button` 6 | color: blue; 7 | ` 8 | 9 | return Button 10 | } 11 | 12 | const Comp2 = () => { 13 | const InnerComp = () => { 14 | const Button = styled.button` 15 | color: blue; 16 | ` 17 | 18 | return Button 19 | } 20 | 21 | return InnerComp() 22 | } 23 | 24 | const Button = styled.button`color: blue;` 25 | 26 | const animations = { 27 | spinnerCircle: keyframes` 28 | 0% { 29 | opacity: 0; 30 | } 31 | 32 | 100% { 33 | opacity: 1; 34 | } 35 | `, 36 | } 37 | -------------------------------------------------------------------------------- /src/__tests__/fixtures/hard/indentation.expected.js: -------------------------------------------------------------------------------- 1 | import styled, { keyframes } from 'styled-components' 2 | 3 | // None of the below should throw indentation errors 4 | const Comp = () => { 5 | const Button = styled.button` 6 | color: blue; 7 | ` 8 | 9 | return Button 10 | } 11 | 12 | const Comp2 = () => { 13 | const InnerComp = () => { 14 | const Button = styled.button` 15 | color: blue; 16 | ` 17 | 18 | return Button 19 | } 20 | 21 | return InnerComp() 22 | } 23 | 24 | const Button = styled.button` 25 | color: blue; 26 | ` 27 | 28 | const animations = { 29 | spinnerCircle: keyframes` 30 | 0% { 31 | opacity: 0; 32 | } 33 | 34 | 100% { 35 | opacity: 1; 36 | } 37 | `, 38 | } 39 | -------------------------------------------------------------------------------- /src/__tests__/fixtures/hard/invalid-indentation.actual.js: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | // ⚠ 2 indentation errors ⚠ 4 | const Comp = () => { 5 | const Button = styled.button` 6 | color: blue; 7 | background: red; 8 | display: block; 9 | ` 10 | 11 | return Button 12 | } 13 | 14 | // ⚠ 2 indentation errors ⚠ 15 | const Comp2 = () => { 16 | const InnerComp = () => { 17 | const Button = styled.button` 18 | color: blue; 19 | background: red; 20 | display: block; 21 | ` 22 | 23 | return Button 24 | } 25 | 26 | return InnerComp() 27 | } 28 | -------------------------------------------------------------------------------- /src/__tests__/fixtures/hard/invalid-indentation.expected.js: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | // ⚠ 2 indentation errors ⚠ 4 | const Comp = () => { 5 | const Button = styled.button` 6 | color: blue; 7 | background: red; 8 | display: block; 9 | ` 10 | 11 | return Button 12 | } 13 | 14 | // ⚠ 2 indentation errors ⚠ 15 | const Comp2 = () => { 16 | const InnerComp = () => { 17 | const Button = styled.button` 18 | color: blue; 19 | background: red; 20 | display: block; 21 | ` 22 | 23 | return Button 24 | } 25 | 26 | return InnerComp() 27 | } 28 | -------------------------------------------------------------------------------- /src/__tests__/fixtures/hard/source-maps.actual.js: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | // ⚠️ BAD INDENTATION at 5:1 ⚠️ 4 | const Button = styled.button` 5 | color: blue; 6 | ` 7 | 8 | // Correct example 9 | const Button2 = styled.button` 10 | color: blue; 11 | ` 12 | 13 | // ⚠️ BAD INDENTATION at 10:5 ⚠️ 14 | const Button3 = styled.button` 15 | color: blue; 16 | ` 17 | 18 | // ⚠️ BAD INDENTATION at 22:5 ⚠️ 19 | const Button4 = styled.button` 20 | color: blue; 21 | background: ${color}; 22 | display: block; 23 | ` 24 | 25 | // ⚠️ BAD INDENTATION at 28:5 ⚠️ 26 | const Button5 = styled.button` 27 | color: blue; 28 | background: ${color}; 29 | display: block; 30 | ` 31 | 32 | // ⚠️ BAD INDENTATION at 35:5 ⚠️ 33 | const Button6 = styled.button` 34 | color: blue; 35 | ${` 36 | background: red; 37 | `} 38 | display: block; 39 | ` 40 | -------------------------------------------------------------------------------- /src/__tests__/fixtures/hard/source-maps.expected.js: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | // ⚠️ BAD INDENTATION at 5:1 ⚠️ 4 | const Button = styled.button` 5 | color: blue; 6 | ` 7 | 8 | // Correct example 9 | const Button2 = styled.button` 10 | color: blue; 11 | ` 12 | 13 | // ⚠️ BAD INDENTATION at 10:5 ⚠️ 14 | const Button3 = styled.button` 15 | color: blue; 16 | ` 17 | 18 | // ⚠️ BAD INDENTATION at 22:5 ⚠️ 19 | const Button4 = styled.button` 20 | color: blue; 21 | background: ${color}; 22 | display: block; 23 | ` 24 | 25 | // ⚠️ BAD INDENTATION at 28:5 ⚠️ 26 | const Button5 = styled.button` 27 | color: blue; 28 | background: ${color}; 29 | display: block; 30 | ` 31 | 32 | // ⚠️ BAD INDENTATION at 35:5 ⚠️ 33 | const Button6 = styled.button` 34 | color: blue; 35 | ${` 36 | background: red; 37 | `} 38 | display: block; 39 | ` 40 | -------------------------------------------------------------------------------- /src/__tests__/fixtures/interpolations/complex.actual.js: -------------------------------------------------------------------------------- 1 | import styled, { css } from 'styled-components' 2 | 3 | const interpolatedStyle = css` 4 | background-color: gray; 5 | color: gray; 6 | ` 7 | 8 | // Interpolation of chunk 9 | const Div = styled.div` 10 | ${interpolatedStyle} 11 | ` 12 | 13 | // Conditional interpolation of chunk 14 | const Button = styled.button` 15 | ${props => props.isHovering && interpolatedStyle} 16 | ` 17 | 18 | // Interpolation in a media query 19 | const Link = styled.a` 20 | color: red; 21 | 22 | @media (${medium}) { 23 | color: blue; 24 | } 25 | ` 26 | -------------------------------------------------------------------------------- /src/__tests__/fixtures/interpolations/complex.expected.js: -------------------------------------------------------------------------------- 1 | import styled, { css } from 'styled-components' 2 | 3 | const interpolatedStyle = css` 4 | background-color: gray; 5 | color: gray; 6 | ` 7 | 8 | // Interpolation of chunk 9 | const Div = styled.div` 10 | ${interpolatedStyle} 11 | ` 12 | 13 | // Conditional interpolation of chunk 14 | const Button = styled.button` 15 | ${props => props.isHovering && interpolatedStyle} 16 | ` 17 | 18 | // Interpolation in a media query 19 | const Link = styled.a` 20 | color: red; 21 | 22 | @media (${medium}) { 23 | color: blue; 24 | } 25 | ` 26 | -------------------------------------------------------------------------------- /src/__tests__/fixtures/interpolations/invalid.actual.js: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | const color = 'red' 4 | 5 | // ⚠️ BAD INDENTATION ⚠️ 6 | const Button2 = styled.button` 7 | display: block; 8 | color: ${color}; 9 | background: blue; 10 | ` 11 | -------------------------------------------------------------------------------- /src/__tests__/fixtures/interpolations/invalid.expected.js: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | const color = 'red' 4 | 5 | // ⚠️ BAD INDENTATION ⚠️ 6 | const Button2 = styled.button` 7 | display: block; 8 | color: ${color}; 9 | background: blue; 10 | ` 11 | -------------------------------------------------------------------------------- /src/__tests__/fixtures/interpolations/valid.actual.js: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | const color = 'red' 4 | 5 | // Normal styled component 6 | const Button = styled.button` 7 | display: block; 8 | color: ${color}; 9 | background: blue; 10 | ` 11 | 12 | const Box = styled.div` 13 | display: block; 14 | color: ${color}; 15 | background: blue; 16 | ` 17 | 18 | // Tagname notation 19 | const Button2 = styled('button')` 20 | display: block; 21 | color: ${color}; 22 | background: blue; 23 | ` 24 | 25 | const Box2 = styled('div')` 26 | display: block; 27 | color: ${color}; 28 | background: blue; 29 | ` 30 | 31 | // Component Notation 32 | const Button3 = styled(Button2)` 33 | display: block; 34 | color: ${color}; 35 | background: blue; 36 | ` 37 | 38 | const Box3 = styled(Box2)` 39 | display: block; 40 | color: ${color}; 41 | background: blue; 42 | ` 43 | 44 | // Multiline 45 | const Button4 = styled.button` 46 | display: block; 47 | ${` 48 | color: blue; 49 | `} 50 | background: blue; 51 | ` 52 | 53 | // Conditional 54 | const cond = true 55 | const Button5 = styled.button` 56 | display: block; 57 | ${cond && ` 58 | color: blue; 59 | `} 60 | background: blue; 61 | ` 62 | 63 | // Conditional 64 | const cond2 = false 65 | const Button6 = styled.button` 66 | display: block; 67 | ${cond2 && ` 68 | color: ${cond2}; 69 | `} 70 | background: blue; 71 | ` 72 | -------------------------------------------------------------------------------- /src/__tests__/fixtures/interpolations/valid.expected.js: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | const color = 'red' 4 | 5 | // Normal styled component 6 | const Button = styled.button` 7 | display: block; 8 | color: ${color}; 9 | background: blue; 10 | ` 11 | 12 | const Box = styled.div` 13 | display: block; 14 | color: ${color}; 15 | background: blue; 16 | ` 17 | 18 | // Tagname notation 19 | const Button2 = styled('button')` 20 | display: block; 21 | color: ${color}; 22 | background: blue; 23 | ` 24 | 25 | const Box2 = styled('div')` 26 | display: block; 27 | color: ${color}; 28 | background: blue; 29 | ` 30 | 31 | // Component Notation 32 | const Button3 = styled(Button2)` 33 | display: block; 34 | color: ${color}; 35 | background: blue; 36 | ` 37 | 38 | const Box3 = styled(Box2)` 39 | display: block; 40 | color: ${color}; 41 | background: blue; 42 | ` 43 | 44 | // Multiline 45 | const Button4 = styled.button` 46 | display: block; 47 | ${` 48 | color: blue; 49 | `} 50 | background: blue; 51 | ` 52 | 53 | // Conditional 54 | const cond = true 55 | const Button5 = styled.button` 56 | display: block; 57 | ${cond && ` 58 | color: blue; 59 | `} 60 | background: blue; 61 | ` 62 | 63 | // Conditional 64 | const cond2 = false 65 | const Button6 = styled.button` 66 | display: block; 67 | ${cond2 && ` 68 | color: ${cond2}; 69 | `} 70 | background: blue; 71 | ` 72 | -------------------------------------------------------------------------------- /src/__tests__/fixtures/real-world/Circle.actual.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import styled, { keyframes } from 'styled-components' 3 | 4 | // Valid indentation 5 | const animations = { 6 | spinnerCircle: keyframes` 7 | 0% { 8 | opacity: 0; 9 | } 10 | 11 | 100% { 12 | opacity: 1; 13 | } 14 | `, 15 | } 16 | 17 | export default (props) => { 18 | const CirclePrimitive = styled.div` 19 | width: 100%; 20 | height: 100%; 21 | position: absolute; 22 | left: 0; 23 | top: 0; 24 | ${props.rotate && ` 25 | -webkit-transform: rotate(${props.rotate}deg); 26 | -ms-transform: rotate(${props.rotate}deg); 27 | transform: rotate(${props.rotate}deg); 28 | `} 29 | 30 | &:before { 31 | background: linear-gradient(${({ direction }) => ` 32 | ${direction === 'horizontal' ? 'right' : 'bottom'}, 33 | ${landingHeadingBackground} 0%, 34 | ${transparentize(1, landingHeadingBackground)} 100% 35 | `}); 36 | content: ''; 37 | display: block; 38 | margin: 0 auto; 39 | width: 15%; 40 | height: 15%; 41 | background-color: #333; 42 | border-radius: 100%; 43 | animation: ${animations.spinnerCircle} 1.2s infinite ease-in-out both; 44 | ${props.delay && ` 45 | -webkit-animation-delay: ${props.delay}s; 46 | animation-delay: ${props.delay}s; 47 | `} 48 | } 49 | ` 50 | return React.createElement(CirclePrimitive) 51 | } 52 | -------------------------------------------------------------------------------- /src/__tests__/fixtures/real-world/Circle.expected.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import styled, { keyframes } from 'styled-components' 3 | 4 | // Valid indentation 5 | const animations = { 6 | spinnerCircle: keyframes` 7 | 0% { 8 | opacity: 0; 9 | } 10 | 11 | 100% { 12 | opacity: 1; 13 | } 14 | `, 15 | } 16 | 17 | export default (props) => { 18 | const CirclePrimitive = styled.div` 19 | width: 100%; 20 | height: 100%; 21 | position: absolute; 22 | left: 0; 23 | top: 0; 24 | ${props.rotate && ` 25 | -webkit-transform: rotate(${props.rotate}deg); 26 | -ms-transform: rotate(${props.rotate}deg); 27 | transform: rotate(${props.rotate}deg); 28 | `} 29 | 30 | &:before { 31 | background: linear-gradient(${({ direction }) => ` 32 | ${direction === 'horizontal' ? 'right' : 'bottom'}, 33 | ${landingHeadingBackground} 0%, 34 | ${transparentize(1, landingHeadingBackground)} 100% 35 | `}); 36 | content: ''; 37 | display: block; 38 | margin: 0 auto; 39 | width: 15%; 40 | height: 15%; 41 | background-color: #333; 42 | border-radius: 100%; 43 | animation: ${animations.spinnerCircle} 1.2s infinite ease-in-out both; 44 | ${props.delay && ` 45 | -webkit-animation-delay: ${props.delay}s; 46 | animation-delay: ${props.delay}s; 47 | `} 48 | } 49 | ` 50 | return React.createElement(CirclePrimitive) 51 | } 52 | -------------------------------------------------------------------------------- /src/__tests__/fixtures/simple/global.actual.js: -------------------------------------------------------------------------------- 1 | // Global variables 2 | 3 | // ⚠️ Wrong indentation ⚠️ 4 | const Button = styled.div` 5 | color: red; 6 | ` 7 | 8 | // ⚠️ Wrong indentation ⚠️ 9 | const animation = keyframes` 10 | 0% { 11 | opacity: 0; 12 | } 13 | ` 14 | 15 | // ⚠️ Wrong indentation ⚠️ 16 | injectGlobal` 17 | html { 18 | margin: 0; 19 | } 20 | ` 21 | 22 | const styles = css` 23 | color: blue; 24 | ` 25 | -------------------------------------------------------------------------------- /src/__tests__/fixtures/simple/global.expected.js: -------------------------------------------------------------------------------- 1 | // Global variables 2 | 3 | // ⚠️ Wrong indentation ⚠️ 4 | const Button = styled.div` 5 | color: red; 6 | ` 7 | 8 | // ⚠️ Wrong indentation ⚠️ 9 | const animation = keyframes` 10 | 0% { 11 | opacity: 0; 12 | } 13 | ` 14 | 15 | // ⚠️ Wrong indentation ⚠️ 16 | injectGlobal` 17 | html { 18 | margin: 0; 19 | } 20 | ` 21 | 22 | const styles = css` 23 | color: blue; 24 | ` 25 | -------------------------------------------------------------------------------- /src/__tests__/fixtures/simple/helpers.actual.js: -------------------------------------------------------------------------------- 1 | import styled, { css, keyframes, injectGlobal } from 'styled-components' 2 | 3 | /** 4 | * Valid 5 | */ 6 | const styles = css` 7 | color: blue; 8 | ` 9 | 10 | const animation = keyframes` 11 | 0% { 12 | opacity: 1; 13 | } 14 | 100% { 15 | opacity: 0; 16 | } 17 | ` 18 | 19 | const Button = styled.button` 20 | ${styles} 21 | animation: 3s ${animation}; 22 | ` 23 | 24 | injectGlobal` 25 | html { 26 | margin: 0; 27 | padding: 0; 28 | } 29 | ` 30 | 31 | // ⚠ Indentation 32 | const styles2 = css` 33 | color: blue; 34 | ` 35 | 36 | // ⚠ Indentation 37 | const animation2 = keyframes` 38 | 0% { 39 | opacity: 1; 40 | } 41 | 100% { 42 | opacity: 0; 43 | } 44 | ` 45 | 46 | // ⚠ Indentation 47 | injectGlobal` 48 | html { 49 | margin: 0; 50 | padding: 0; 51 | } 52 | ` 53 | -------------------------------------------------------------------------------- /src/__tests__/fixtures/simple/helpers.expected.js: -------------------------------------------------------------------------------- 1 | import styled, { css, keyframes, injectGlobal } from 'styled-components' 2 | 3 | /** 4 | * Valid 5 | */ 6 | const styles = css` 7 | color: blue; 8 | ` 9 | 10 | const animation = keyframes` 11 | 0% { 12 | opacity: 1; 13 | } 14 | 15 | 100% { 16 | opacity: 0; 17 | } 18 | ` 19 | 20 | const Button = styled.button` 21 | ${styles} 22 | animation: 3s ${animation}; 23 | ` 24 | 25 | injectGlobal` 26 | html { 27 | margin: 0; 28 | padding: 0; 29 | } 30 | ` 31 | 32 | // ⚠ Indentation 33 | const styles2 = css` 34 | color: blue; 35 | ` 36 | 37 | // ⚠ Indentation 38 | const animation2 = keyframes` 39 | 0% { 40 | opacity: 1; 41 | } 42 | 43 | 100% { 44 | opacity: 0; 45 | } 46 | ` 47 | 48 | // ⚠ Indentation 49 | injectGlobal` 50 | html { 51 | margin: 0; 52 | padding: 0; 53 | } 54 | ` 55 | -------------------------------------------------------------------------------- /src/__tests__/fixtures/simple/imports.actual.js: -------------------------------------------------------------------------------- 1 | import notStyled, { css as notCss, keyframes as notKeyframes, injectGlobal as notInjectGlobal } from 'styled-components' 2 | 3 | // ⚠️ BAD INDENTATION ⚠️ 4 | const Button2 = notStyled.button` 5 | color: blue; 6 | ` 7 | 8 | const styles = notCss` 9 | color: blue; 10 | ` 11 | 12 | const animation = notKeyframes` 13 | 0% { 14 | opacity: 0; 15 | } 16 | 17 | 100% { 18 | opacity: 1; 19 | } 20 | ` 21 | 22 | notInjectGlobal` 23 | html { 24 | color: blue; 25 | } 26 | ` 27 | -------------------------------------------------------------------------------- /src/__tests__/fixtures/simple/imports.expected.js: -------------------------------------------------------------------------------- 1 | import notStyled, { css as notCss, keyframes as notKeyframes, injectGlobal as notInjectGlobal } from 'styled-components' 2 | 3 | // ⚠️ BAD INDENTATION ⚠️ 4 | const Button2 = notStyled.button` 5 | color: blue; 6 | ` 7 | 8 | const styles = notCss` 9 | color: blue; 10 | ` 11 | 12 | const animation = notKeyframes` 13 | 0% { 14 | opacity: 0; 15 | } 16 | 17 | 100% { 18 | opacity: 1; 19 | } 20 | ` 21 | 22 | notInjectGlobal` 23 | html { 24 | color: blue; 25 | } 26 | ` 27 | -------------------------------------------------------------------------------- /src/__tests__/fixtures/simple/invalid.actual.js: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | // ⚠️ EMPTY BLOCK ⚠️ 4 | const Button = styled.button` 5 | 6 | ` 7 | 8 | // ⚠️ BAD INDENTATION ⚠️ 9 | const Button2 = styled.button` 10 | color: blue; 11 | ` 12 | -------------------------------------------------------------------------------- /src/__tests__/fixtures/simple/invalid.expected.js: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | // ⚠️ EMPTY BLOCK ⚠️ 4 | const Button = styled.button` 5 | 6 | ` 7 | 8 | // ⚠️ BAD INDENTATION ⚠️ 9 | const Button2 = styled.button` 10 | color: blue; 11 | ` 12 | -------------------------------------------------------------------------------- /src/__tests__/fixtures/simple/nesting.actual.js: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | // Nesting 4 | const Button = styled.button` 5 | > h1 { 6 | color: blue; 7 | } 8 | ` 9 | 10 | // Selectors 11 | const Button2 = styled.button` 12 | color: red; 13 | 14 | &:hover { 15 | color: blue; 16 | } 17 | ` 18 | 19 | // Complex selectors 20 | const Button3 = styled.button` 21 | color: red; 22 | 23 | &:placeholder { 24 | color: blue; 25 | } 26 | 27 | &::-webkit-input-placeholder { 28 | color: blue; 29 | } 30 | ` 31 | 32 | const color = 'red' 33 | 34 | // Selectors + interpolations 35 | const Button4 = styled.button` 36 | color: ${color}; 37 | background: ${color}; 38 | 39 | &:hover { 40 | background-color: ${color}; 41 | } 42 | ` 43 | -------------------------------------------------------------------------------- /src/__tests__/fixtures/simple/nesting.expected.js: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | // Nesting 4 | const Button = styled.button` 5 | > h1 { 6 | color: blue; 7 | } 8 | ` 9 | 10 | // Selectors 11 | const Button2 = styled.button` 12 | color: red; 13 | 14 | &:hover { 15 | color: blue; 16 | } 17 | ` 18 | 19 | // Complex selectors 20 | const Button3 = styled.button` 21 | color: red; 22 | 23 | &:placeholder { 24 | color: blue; 25 | } 26 | 27 | &::-webkit-input-placeholder { 28 | color: blue; 29 | } 30 | ` 31 | 32 | const color = 'red' 33 | 34 | // Selectors + interpolations 35 | const Button4 = styled.button` 36 | color: ${color}; 37 | background: ${color}; 38 | 39 | &:hover { 40 | background-color: ${color}; 41 | } 42 | ` 43 | -------------------------------------------------------------------------------- /src/__tests__/fixtures/simple/valid.actual.js: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | // Normal styled component 4 | const Button = styled.button` 5 | color: blue; 6 | ` 7 | 8 | const Box = styled.div` 9 | color: blue; 10 | ` 11 | 12 | // Tagname notation 13 | const Button2 = styled('button')` 14 | color: red; 15 | ` 16 | 17 | const Box2 = styled('div')` 18 | color: red; 19 | ` 20 | 21 | // Component Notation 22 | const Button3 = styled(Button2)` 23 | color: violet; 24 | ` 25 | 26 | const Box3 = styled(Box2)` 27 | color: violet; 28 | ` 29 | -------------------------------------------------------------------------------- /src/__tests__/fixtures/simple/valid.expected.js: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | // Normal styled component 4 | const Button = styled.button` 5 | color: blue; 6 | ` 7 | 8 | const Box = styled.div` 9 | color: blue; 10 | ` 11 | 12 | // Tagname notation 13 | const Button2 = styled('button')` 14 | color: red; 15 | ` 16 | 17 | const Box2 = styled('div')` 18 | color: red; 19 | ` 20 | 21 | // Component Notation 22 | const Button3 = styled(Button2)` 23 | color: violet; 24 | ` 25 | 26 | const Box3 = styled(Box2)` 27 | color: violet; 28 | ` 29 | -------------------------------------------------------------------------------- /src/__tests__/index.js: -------------------------------------------------------------------------------- 1 | // @flow 2 | 3 | import fs from 'fs' 4 | import path from 'path' 5 | import format from '..' 6 | 7 | const getFixture = (type, file) => ({ 8 | actual: format(path.join(__dirname, 'fixtures', type, `${file}.actual.js`)), 9 | expected: fs.readFileSync(path.join(__dirname, 'fixtures', type, `${file}.expected.js`)).toString(), 10 | }) 11 | 12 | describe('styled-components-stylefmt', () => { 13 | let type 14 | 15 | describe('hard', () => { 16 | beforeEach((done) => { 17 | type = 'hard' 18 | done() 19 | }) 20 | 21 | test('indentation', () => { 22 | const { actual, expected } = getFixture(type, 'indentation') 23 | expect(actual).toEqual(expected) 24 | }) 25 | 26 | test('invalid-indentation', () => { 27 | const { actual, expected } = getFixture(type, 'invalid-indentation') 28 | expect(actual).toEqual(expected) 29 | }) 30 | 31 | test('source-maps', () => { 32 | const { actual, expected } = getFixture(type, 'source-maps') 33 | expect(actual).toEqual(expected) 34 | }) 35 | }) 36 | 37 | describe('interpolations', () => { 38 | beforeEach((done) => { 39 | type = 'interpolations' 40 | done() 41 | }) 42 | 43 | test('complex', () => { 44 | const { actual, expected } = getFixture(type, 'complex') 45 | expect(actual).toEqual(expected) 46 | }) 47 | 48 | test('invalid', () => { 49 | const { actual, expected } = getFixture(type, 'invalid') 50 | expect(actual).toEqual(expected) 51 | }) 52 | 53 | test('valid', () => { 54 | const { actual, expected } = getFixture(type, 'valid') 55 | expect(actual).toEqual(expected) 56 | }) 57 | }) 58 | 59 | describe('real-world', () => { 60 | beforeEach((done) => { 61 | type = 'real-world' 62 | done() 63 | }) 64 | 65 | test('Circle', () => { 66 | const { actual, expected } = getFixture(type, 'Circle') 67 | expect(actual).toEqual(expected) 68 | }) 69 | }) 70 | 71 | describe('simple', () => { 72 | beforeEach((done) => { 73 | type = 'simple' 74 | done() 75 | }) 76 | 77 | test('global', () => { 78 | const { actual, expected } = getFixture(type, 'global') 79 | expect(actual).toEqual(expected) 80 | }) 81 | 82 | test('helpers', () => { 83 | const { actual, expected } = getFixture(type, 'helpers') 84 | expect(actual).toEqual(expected) 85 | }) 86 | 87 | test('`imports`', () => { 88 | const { actual, expected } = getFixture(type, 'imports') 89 | expect(actual).toEqual(expected) 90 | }) 91 | 92 | test('`invalid`', () => { 93 | const { actual, expected } = getFixture(type, 'invalid') 94 | expect(actual).toEqual(expected) 95 | }) 96 | 97 | test('`nesting`', () => { 98 | const { actual, expected } = getFixture(type, 'nesting') 99 | expect(actual).toEqual(expected) 100 | }) 101 | 102 | test('`valid`', () => { 103 | const { actual, expected } = getFixture(type, 'valid') 104 | expect(actual).toEqual(expected) 105 | }) 106 | }) 107 | }) 108 | -------------------------------------------------------------------------------- /src/bin.js: -------------------------------------------------------------------------------- 1 | // @flow 2 | 3 | import { createPatch } from 'diff' 4 | import chalk from 'chalk' 5 | import fs from 'fs' 6 | import globby from 'globby' 7 | import minimist from 'minimist' 8 | import path from 'path' 9 | import pkg from '../package.json' 10 | import format from '.' 11 | 12 | /* eslint-disable no-console */ 13 | 14 | const argv = minimist(process.argv.slice(2), { 15 | boolean: ['help', 'version'], 16 | alias: { 17 | b: 'config-basedir', 18 | c: 'config', 19 | d: 'diff', 20 | h: 'help', 21 | i: 'ignore-path', 22 | r: 'recursive', 23 | v: 'version', 24 | }, 25 | }) 26 | 27 | if (argv.v) { 28 | console.log(pkg.version) 29 | process.exit() 30 | } 31 | 32 | function printHelp() { 33 | console.log('Usage: styled-components-stylefmt [options] input-name [output-name]') 34 | console.log('') 35 | console.log('Options:') 36 | console.log('') 37 | console.log(' -b, --config-basedir Path to the directory that relative paths defining "extends"') 38 | console.log(' -c, --config Path to a specific configuration file (JSON, YAML, or CommonJS)') 39 | console.log(' -d, --diff Output diff against original file') 40 | console.log(' -r, --recursive Format list of space seperated files(globs) in place') 41 | console.log(' -v, --version Output the version number') 42 | console.log(' -h, --help Output usage information') 43 | console.log(' -i, --ignore-path Path to a file containing patterns that describe files to ignore.') 44 | process.exit() 45 | } 46 | 47 | if (argv.h) { 48 | printHelp() 49 | } 50 | 51 | const options = {} 52 | if (argv.c) { 53 | options.configFile = argv.c 54 | } 55 | 56 | const basedir = String(argv.b) 57 | if (basedir) { 58 | options.configBasedir = path.isAbsolute(basedir) ? basedir : path.resolve(process.cwd(), basedir) 59 | } 60 | 61 | if (argv.i) { 62 | options.ignorePath = argv.i 63 | } 64 | 65 | function handleDiff(file, original, formatted) { 66 | let diff 67 | 68 | if (original === formatted) { 69 | diff = 'There is no difference with the original file.' 70 | } 71 | 72 | if (chalk.supportsColor) { 73 | if (diff) { 74 | diff = chalk.gray(String(diff)) 75 | } else { 76 | diff = createPatch(file, original, formatted) 77 | .split('\n') 78 | .splice(4) 79 | .map((diffLine) => { 80 | let line = diffLine 81 | if (diffLine[0] === '+') { 82 | line = chalk.green(diffLine) 83 | } else if (line[0] === '-') { 84 | line = chalk.red(diffLine) 85 | } else if (diffLine.match(/^@@\s+.+?\s+@@/) || diffLine === '\\ No newline at end of file') { 86 | line = '' 87 | } 88 | 89 | return chalk.gray(line) 90 | }) 91 | .join('\n') 92 | .trim() 93 | } 94 | } else if (!diff) { 95 | diff = formatted 96 | } 97 | 98 | return `${path.relative(process.cwd(), file).replace(/\\/g, '/')}\n${diff}` 99 | } 100 | 101 | function processMultipleFiles(files) { 102 | if (!files.length) { 103 | console.error('Files glob patterns specified did not match any js files.') 104 | return 105 | } 106 | 107 | Promise.all( 108 | files.map((file) => { 109 | const fullPath = path.resolve(process.cwd(), file) 110 | const input = fs.readFileSync(fullPath, 'utf-8') 111 | 112 | const formatted = format(fullPath, options) 113 | 114 | if (argv.d) { 115 | return handleDiff(fullPath, input, formatted) 116 | } else if (input !== formatted) { 117 | fs.writeFileSync(fullPath, formatted) 118 | } 119 | 120 | return file 121 | }), 122 | ).then((messages) => { 123 | if (argv.d) { 124 | console.log(messages.join('\n\n')) 125 | } else { 126 | let formatted = messages.filter(file => file) 127 | if (formatted.length) { 128 | formatted = formatted.length 129 | } else { 130 | formatted = 'No' 131 | } 132 | console.log(`${formatted} files are formatted.`) 133 | } 134 | }) 135 | } 136 | 137 | if (typeof argv.r === 'string') { 138 | globby([path.join(argv.r)].concat(argv._)).then(processMultipleFiles) 139 | } else if (argv._[0]) { 140 | const inputPath = argv._[0] 141 | const outputPath = argv._[1] 142 | const fullPath = path.resolve(process.cwd(), inputPath) 143 | const input = fs.readFileSync(fullPath, 'utf-8') 144 | 145 | const formatted = format(fullPath, options) 146 | 147 | if (argv.d) { 148 | console.log(handleDiff(fullPath, input, formatted)) 149 | } else if (outputPath && input !== formatted) { 150 | fs.writeFileSync(outputPath, formatted) 151 | } else { 152 | process.stdout.write(formatted) 153 | } 154 | } else { 155 | printHelp() 156 | } 157 | 158 | process.on('unhandledRejection', (err) => { 159 | console.error('Uncaught promise exception:', err) 160 | 161 | process.exit(1) 162 | }) 163 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | // @flow 2 | 3 | import traverse from 'babel-traverse' 4 | import { parse, tokTypes } from 'babylon' 5 | import crypto from 'crypto' 6 | import deasync from 'deasync' 7 | import detectNewline from 'detect-newline' 8 | import escapeStringRegexp from 'escape-string-regexp' 9 | import fs from 'fs' 10 | import indentString from 'indent-string' 11 | import postcss from 'postcss' 12 | import stylefmt from 'stylefmt' 13 | import { isHelper, isStyled, isStyledImport } from 'stylelint-processor-styled-components/lib/utils/styled' 14 | import { parseImports } from 'stylelint-processor-styled-components/lib/utils/parse' 15 | import { fixIndentation, wrapKeyframes, wrapSelector } from 'stylelint-processor-styled-components/lib/utils/general' 16 | import { 17 | getTaggedTemplateLiteralContent, 18 | } from 'stylelint-processor-styled-components/lib/utils/tagged-template-literal' 19 | 20 | import type Options from 'stylefmt' 21 | 22 | const getHash = (text: string) => crypto.createHash('md5').update(text).digest('hex').substr(0, 8) 23 | 24 | function resolvePromise(promise: Promise): R | any { 25 | const guard = Symbol('deasync guard') 26 | let result = guard 27 | 28 | promise.then((res) => { 29 | result = res 30 | }) 31 | deasync.loopWhile(() => result === guard) 32 | 33 | return result 34 | } 35 | 36 | export default function (inputPath: string, options?: Options = {}) { 37 | const input = fs.readFileSync(inputPath).toString() 38 | 39 | const EOL = detectNewline(input) 40 | const escapedEOL = escapeStringRegexp(EOL) 41 | 42 | const closingTokens = [tokTypes.bracketR, tokTypes.braceR, tokTypes.braceBarR, tokTypes.parenR, tokTypes.backQuote] 43 | .map(({ label }) => label) 44 | .map(escapeStringRegexp) 45 | 46 | const closingRegexp = new RegExp(`^\\s*((?:${closingTokens.join('|')}|\\s)+)\\s*${closingTokens[1]}.*$`, 'm') 47 | 48 | const getClosingLineTokens = (line: string) => { 49 | const matches = line.match(closingRegexp) 50 | 51 | return matches ? matches[1] : '' 52 | } 53 | 54 | const lines = input.split(EOL) 55 | let output = input 56 | let offset = 0 57 | 58 | const ast = parse(input, { 59 | sourceType: 'module', 60 | plugins: [ 61 | 'jsx', 62 | 'flow', 63 | 'objectRestSpread', 64 | 'decorators', 65 | 'classProperties', 66 | 'exportExtensions', 67 | 'asyncGenerators', 68 | 'functionBind', 69 | 'functionSent', 70 | 'dynamicImport', 71 | ], 72 | }) 73 | 74 | let importedNames = { 75 | default: 'styled', 76 | css: 'css', 77 | keyframes: 'keyframes', 78 | injectGlobal: 'injectGlobal', 79 | } 80 | 81 | traverse(ast, { 82 | enter({ node }) { 83 | if (isStyledImport(node)) { 84 | importedNames = parseImports(node) 85 | return 86 | } 87 | 88 | const helper = isHelper(node, importedNames) 89 | 90 | if (!helper && !isStyled(node, importedNames.default)) { 91 | return 92 | } 93 | 94 | const nodeIndentationMatches = lines[node.loc.start.line - 1].match(/(\s*)/) 95 | const nodeIndentation = nodeIndentationMatches ? nodeIndentationMatches[1] : '' 96 | 97 | type expressionSourceMapType = { 98 | closingLineTokens: string, 99 | endsWithSemicolon: boolean, 100 | hash: string, 101 | sourceCode: string, 102 | } 103 | const expressionSourceMap: Array = [] 104 | 105 | node.quasi.expressions.forEach((expression, index) => { 106 | const sourceCode = input.substring(expression.start, expression.end) 107 | const hash = getHash(sourceCode) 108 | 109 | const startLine = expression.loc.start.line 110 | const endLine = expression.loc.end.line 111 | const multiLine = startLine !== endLine 112 | 113 | const closingLineTokens = multiLine ? getClosingLineTokens(lines[endLine - 1]) : '' 114 | 115 | const endsWithSemicolon = lines[endLine - 1].match(/(;)\s*$/) !== null 116 | 117 | expressionSourceMap.push({ 118 | closingLineTokens, 119 | endsWithSemicolon, 120 | hash, 121 | sourceCode, 122 | }) 123 | 124 | // eslint-disable-next-line no-param-reassign 125 | node.quasi.expressions[index].name = `quasiExpr_${hash}` 126 | }) 127 | 128 | const content = getTaggedTemplateLiteralContent(node) 129 | const fixedContent = fixIndentation(content).text 130 | const wrapperFn = helper === 'keyframes' ? wrapKeyframes : wrapSelector 131 | const wrappedContent = wrapperFn(fixedContent) 132 | const isWrapped = wrappedContent !== fixedContent 133 | 134 | const { css } = resolvePromise(postcss([stylefmt(options)]).process(wrappedContent, { from: inputPath })) 135 | const indentedCss = indentString(css, 1, { indent: nodeIndentation }) 136 | 137 | const formatted = expressionSourceMap.reduce( 138 | (all, { closingLineTokens, endsWithSemicolon, hash, sourceCode }) => { 139 | const hashedExpression = `quasiExpr_${hash}${endsWithSemicolon ? '' : ';?'}` 140 | const hashedRegexp = new RegExp(hashedExpression) 141 | 142 | if (closingLineTokens !== '') { 143 | const firstLineIndentationMatches = indentedCss.match(new RegExp(`^(\\s*).*${hashedExpression}`, 'm')) 144 | const firstLineIndentation = firstLineIndentationMatches ? firstLineIndentationMatches[1] : '' 145 | 146 | const sourceCodeWithoutLastLine = sourceCode.split(EOL).slice(0, -1).join(EOL) 147 | 148 | return all.replace( 149 | hashedRegexp, 150 | `{${sourceCodeWithoutLastLine}${EOL}${firstLineIndentation}${closingLineTokens}}`, 151 | ) 152 | } 153 | 154 | return all.replace(hashedRegexp, `{${sourceCode}}`) 155 | }, 156 | indentedCss, 157 | ) 158 | 159 | const formattedHash = getHash(formatted) 160 | const unwrapperFn = (text) => { 161 | const escapedString = escapeStringRegexp( 162 | helper === 'keyframes' ? wrapKeyframes(formattedHash) : wrapSelector(formattedHash), 163 | ) 164 | 165 | const unwrappingString = escapedString 166 | .replace(/\d+ \\{/, '\\d+ \\{') 167 | .replace(/\s+/, '\\s*') 168 | .replace(EOL, `(?:${escapedEOL})*`) 169 | .replace(new RegExp(`${escapedEOL}*${formattedHash}${escapedEOL}*`), `${escapedEOL}*((?:.|[\\r\\n])+)`) 170 | 171 | const unwrappingRegexp = new RegExp(`^\\s*${unwrappingString}$`, 'm') 172 | 173 | const textWithoutEscapedMixins = text.replace(/-styled-mixin: /g, '$') 174 | const unwrappedMatches = textWithoutEscapedMixins.match(unwrappingRegexp) 175 | 176 | return unwrappedMatches ? unwrappedMatches[1] : textWithoutEscapedMixins 177 | } 178 | 179 | const unwrapped = isWrapped ? unwrapperFn(formatted) : formatted 180 | 181 | const templateLiteral = `\`\n${unwrapped}\`` 182 | 183 | const pre = output.substring(0, node.quasi.start + offset) 184 | const post = output.substring(node.quasi.end + offset) 185 | output = `${pre}${templateLiteral}${post}` 186 | 187 | offset += templateLiteral.length - (node.quasi.end - node.quasi.start) 188 | }, 189 | }) 190 | 191 | return output 192 | } 193 | --------------------------------------------------------------------------------