├── .github └── workflows │ └── ci.yml ├── .gitignore ├── CONTRIBUTING.md ├── ISSUE_TEMPLATE.md ├── LICENSE.md ├── PULL_REQUEST_TEMPLATE.md ├── README.md ├── keymaps └── toggle-quotes.cson ├── lib ├── config-schema.json ├── main.js ├── string-helper.js └── toggle-quotes.js ├── menus └── toggle-quotes.cson ├── package-lock.json ├── package.json └── spec └── toggle-quotes-spec.js /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: [push] 4 | 5 | env: 6 | CI: true 7 | 8 | jobs: 9 | Test: 10 | strategy: 11 | matrix: 12 | os: [ubuntu-latest, macos-latest, windows-latest] 13 | channel: [stable, beta] 14 | runs-on: ${{ matrix.os }} 15 | steps: 16 | - uses: actions/checkout@v1 17 | - uses: UziTech/action-setup-atom@v2 18 | with: 19 | version: ${{ matrix.channel }} 20 | - name: Install dependencies 21 | run: apm install 22 | - name: Run tests 23 | run: atom --test spec 24 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | See the [Atom contributing guide](https://github.com/atom/atom/blob/master/CONTRIBUTING.md) 2 | -------------------------------------------------------------------------------- /ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 8 | 9 | ### Description 10 | 11 | [Description of the issue] 12 | 13 | ### Steps to Reproduce 14 | 15 | 1. [First Step] 16 | 2. [Second Step] 17 | 3. [and so on...] 18 | 19 | **Expected behavior:** [What you expect to happen] 20 | 21 | **Actual behavior:** [What actually happens] 22 | 23 | **Reproduces how often:** [What percentage of the time does it reproduce?] 24 | 25 | ### Versions 26 | 27 | You can get this information from copy and pasting the output of `atom --version` and `apm --version` from the command line. Also, please include the OS and what version of the OS you're running. 28 | 29 | ### Additional Information 30 | 31 | Any additional information, configuration or data that might be necessary to reproduce the issue. 32 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | Copyright (c) 2014 GitHub Inc. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ### Requirements 2 | 3 | * Filling out the template is required. Any pull request that does not include enough information to be reviewed in a timely manner may be closed at the maintainers' discretion. 4 | * All new code requires tests to ensure against regressions 5 | 6 | ### Description of the Change 7 | 8 | 13 | 14 | ### Alternate Designs 15 | 16 | 17 | 18 | ### Benefits 19 | 20 | 21 | 22 | ### Possible Drawbacks 23 | 24 | 25 | 26 | ### Applicable Issues 27 | 28 | 29 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ##### Atom and all repositories under Atom will be archived on December 15, 2022. Learn more in our [official announcement](https://github.blog/2022-06-08-sunsetting-atom/) 2 | # Toggle Quotes 3 | 4 | [![Build Status](https://travis-ci.org/atom/toggle-quotes.svg?branch=master)](https://travis-ci.org/atom/toggle-quotes) 5 | [![Dependency Status](https://david-dm.org/atom/toggle-quotes.svg)](https://david-dm.org/atom/toggle-quotes) 6 | 7 | Toggle a single-quoted string to a double-quoted string, and vice versa. 8 | 9 | ![toggle-quotes-demo](https://cloud.githubusercontent.com/assets/823545/9016150/aa73ab62-379c-11e5-8622-8dbb492ff4f1.gif) 10 | 11 | This is a package for [Atom](https://atom.io), a hackable text editor for the 21st Century. 12 | 13 | ## Usage 14 | 15 | Place the cursor within a string and execute the `Toggle Quotes: Toggle` command to toggle that string between single and double quotes. Only available when using a grammar that supports single-quoted and double-quoted strings, or any other configured string character (e.g. JavaScript, Python, Ruby, etc.). 16 | 17 | ### Commands 18 | 19 | Command | Description 20 | -----------------------|-------------- 21 | `toggle-quotes:toggle` | Toggles the quote characters used for quoted strings between the configured `Quote Characters` (`'` and `"` by default). 22 | 23 | ### Keybindings 24 | 25 | Command | Linux | OS X | Windows 26 | -------------------|--------|-------|---------- 27 | `toggle-quotes:toggle` | Ctrl-" | Cmd-" | Ctrl-" 28 | 29 | Custom keybindings can be added by referencing the above commands. To learn more, visit the [Using Atom: Basic Customization](https://atom.io/docs/latest/using-atom-basic-customization#customizing-key-bindings) or [Behind Atom: Keymaps In-Depth](https://atom.io/docs/latest/behind-atom-keymaps-in-depth) sections in the flight manual. 30 | 31 | ### Configuration 32 | 33 | Configuration Key Path | Type | Default | Description 34 | ----------------------------|------|---------|------------ 35 | `toggle-quotes.quoteCharacters` | `string` | `'"` | The characters `toggle-quotes:toggle` toggles between. No whitespace. 36 | 37 | You can add [language-specific settings](http://flight-manual.atom.io/using-atom/sections/basic-customization/#language-specific-configuration-settings) for languages with more exotic string delimiters. For example, this setting in your `config.cson` will add backticks in JavaScript files, but not in other kinds of files: 38 | 39 | ```cson 40 | ".js.source": 41 | "toggle-quotes": 42 | quoteCharacters: "\"'`" 43 | ``` 44 | 45 | ## Contributing 46 | 47 | Always feel free to help out! Whether it's filing bugs and feature requests 48 | or working on some of the open issues, Atom's [contributing guide](https://github.com/atom/atom/blob/master/CONTRIBUTING.md) 49 | will help get you started while the [guide for contributing to packages](https://github.com/atom/atom/blob/master/docs/contributing-to-packages.md) 50 | has some extra information. 51 | 52 | ## License 53 | 54 | [MIT License](http://opensource.org/licenses/MIT) - see the [LICENSE](https://github.com/atom/toggle-quotes/blob/master/LICENSE.md) for more details. 55 | -------------------------------------------------------------------------------- /keymaps/toggle-quotes.cson: -------------------------------------------------------------------------------- 1 | '.platform-linux atom-workspace, .platform-win32 atom-workspace': 2 | 'ctrl-"': 'toggle-quotes:toggle' 3 | 4 | '.platform-darwin atom-workspace': 5 | 'cmd-"': 'toggle-quotes:toggle' 6 | -------------------------------------------------------------------------------- /lib/config-schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "quoteCharacters": { 3 | "type": "string", 4 | "default": "\"'" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /lib/main.js: -------------------------------------------------------------------------------- 1 | 'use babel' 2 | 3 | import configSchema from './config-schema' 4 | import {toggleQuotes} from './toggle-quotes' 5 | 6 | export default { 7 | config: configSchema, 8 | 9 | activate () { 10 | this.subscription = atom.commands.add('atom-text-editor', 'toggle-quotes:toggle', () => { 11 | let editor = atom.workspace.getActiveTextEditor() 12 | if (editor) { 13 | toggleQuotes(editor) 14 | } 15 | }) 16 | }, 17 | 18 | deactivate () { 19 | this.subscription.dispose() 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /lib/string-helper.js: -------------------------------------------------------------------------------- 1 | 'use babel' 2 | 3 | // TODO: Move to underscore-plus? 4 | export const raw = (strings) => { 5 | return strings[0].replace(/^[ \t\r]+/gm, '') 6 | } 7 | -------------------------------------------------------------------------------- /lib/toggle-quotes.js: -------------------------------------------------------------------------------- 1 | 'use babel' 2 | 3 | export const toggleQuotes = (editor) => { 4 | editor.transact(() => { 5 | for (let cursor of editor.getCursors()) { 6 | let position = cursor.getBufferPosition() 7 | toggleQuoteAtPosition(editor, position) 8 | cursor.setBufferPosition(position) 9 | } 10 | }) 11 | } 12 | 13 | const getNextQuoteCharacter = (quoteCharacter, allQuoteCharacters) => { 14 | let index = allQuoteCharacters.indexOf(quoteCharacter) 15 | if (index === -1) { 16 | return null 17 | } else { 18 | return allQuoteCharacters[(index + 1) % allQuoteCharacters.length] 19 | } 20 | } 21 | 22 | const escapePattern = (s) => { 23 | return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') 24 | } 25 | 26 | // Using the quote characters configured by the user, build a pattern that can 27 | // be used to filter the syntax nodes in tree-sitter mode. 28 | const makePredicate = (quoteChars) => { 29 | // We want text that begins and ends with the same quote character (and 30 | // _might_ start with one of Python's string format prefixes). 31 | let pattern = new RegExp(`^[uUr]?([${escapePattern(quoteChars)}])[\\s\\S]*(\\1)$`, 'g') 32 | return ({ text }) => pattern.test(text) 33 | } 34 | 35 | const toggleQuoteAtPosition = (editor, position) => { 36 | let quoteChars = atom.config.get('toggle-quotes.quoteCharacters', { 37 | scope: editor.getRootScopeDescriptor() 38 | }) 39 | let range 40 | if (editor.languageMode.getSyntaxNodeAtPosition) { 41 | const node = editor.languageMode.getSyntaxNodeAtPosition(position, makePredicate(quoteChars)) 42 | range = node && node.range 43 | } else { 44 | range = editor.bufferRangeForScopeAtPosition('.string.quoted', position) 45 | } 46 | 47 | if (!range) { 48 | // Attempt to match the current invalid region if it is wrapped in quotes 49 | // This is useful for languages where changing the quotes makes the range 50 | // invalid and so toggling again should properly restore the valid quotes 51 | 52 | range = editor.bufferRangeForScopeAtPosition('.invalid.illegal', position) 53 | if (range) { 54 | let inner = quoteChars.split('').map(character => `${character}.*${character}`).join('|') 55 | 56 | if (!RegExp(`^(${inner})$`, 'g').test(editor.getTextInBufferRange(range))) { 57 | return 58 | } 59 | } 60 | } 61 | 62 | if (range == null) { 63 | return 64 | } 65 | 66 | let text = editor.getTextInBufferRange(range) 67 | let [quoteCharacter] = text 68 | 69 | // In Python a string can have a prefix specifying its format. The Python 70 | // grammar includes this prefix in the string, and thus we need to exclude 71 | // it when toggling quotes 72 | let prefix = '' 73 | if (/[uUr]/.test(quoteCharacter)) { 74 | [prefix, quoteCharacter] = text 75 | } 76 | 77 | let nextQuoteCharacter = getNextQuoteCharacter(quoteCharacter, quoteChars) 78 | 79 | if (!nextQuoteCharacter) { 80 | return 81 | } 82 | 83 | const locateEscapesAndQuotesRegex = new RegExp(`\\\\.|${escapePattern(nextQuoteCharacter)}`, 'g') 84 | 85 | let newText = text 86 | .replace(locateEscapesAndQuotesRegex, m => { 87 | if (m[0] === nextQuoteCharacter) { 88 | return '\\' + nextQuoteCharacter 89 | } else { 90 | return m[1] === quoteCharacter ? quoteCharacter : m 91 | } 92 | }) 93 | 94 | newText = prefix + nextQuoteCharacter + newText.slice(1 + prefix.length, -1) + nextQuoteCharacter 95 | 96 | editor.setTextInBufferRange(range, newText) 97 | } 98 | -------------------------------------------------------------------------------- /menus/toggle-quotes.cson: -------------------------------------------------------------------------------- 1 | 'menu': [ 2 | { 3 | 'label': 'Packages' 4 | 'submenu': [ 5 | 'label': 'Toggle Quotes' 6 | 'submenu': [ 7 | { 'label': 'Toggle', 'command': 'toggle-quotes:toggle' } 8 | ] 9 | ] 10 | } 11 | ] 12 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "toggle-quotes", 3 | "version": "1.1.4", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@types/node": { 8 | "version": "10.12.4", 9 | "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.4.tgz", 10 | "integrity": "sha512-0aFZiYCvoxyKP/Mg6PvqBb2UtWGIPf63r6rOAvRBrgyJOfanbL60yUH2U4FSpg+Yn6FW+JVYWtzn6hLTy745Fg==", 11 | "dev": true 12 | }, 13 | "@types/semver": { 14 | "version": "5.5.0", 15 | "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", 16 | "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==", 17 | "dev": true 18 | }, 19 | "abbrev": { 20 | "version": "1.1.1", 21 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 22 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", 23 | "dev": true 24 | }, 25 | "acorn": { 26 | "version": "5.7.3", 27 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", 28 | "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", 29 | "dev": true 30 | }, 31 | "acorn-to-esprima": { 32 | "version": "2.0.8", 33 | "resolved": "https://registry.npmjs.org/acorn-to-esprima/-/acorn-to-esprima-2.0.8.tgz", 34 | "integrity": "sha1-AD8MZC65ITL0F9NwjxStqCrfLrE=", 35 | "dev": true 36 | }, 37 | "align-text": { 38 | "version": "0.1.4", 39 | "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", 40 | "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", 41 | "dev": true, 42 | "requires": { 43 | "kind-of": "3.2.2", 44 | "longest": "1.0.1", 45 | "repeat-string": "1.6.1" 46 | } 47 | }, 48 | "alter": { 49 | "version": "0.2.0", 50 | "resolved": "https://registry.npmjs.org/alter/-/alter-0.2.0.tgz", 51 | "integrity": "sha1-x1iICGF1cgNKrmJICvJrHU0cs80=", 52 | "dev": true, 53 | "requires": { 54 | "stable": "0.1.8" 55 | } 56 | }, 57 | "amdefine": { 58 | "version": "1.0.1", 59 | "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", 60 | "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", 61 | "dev": true 62 | }, 63 | "ansi-escapes": { 64 | "version": "1.4.0", 65 | "resolved": "http://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", 66 | "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", 67 | "dev": true 68 | }, 69 | "ansi-regex": { 70 | "version": "2.1.1", 71 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 72 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 73 | "dev": true 74 | }, 75 | "ansi-styles": { 76 | "version": "2.2.1", 77 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 78 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", 79 | "dev": true 80 | }, 81 | "argparse": { 82 | "version": "1.0.10", 83 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 84 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 85 | "dev": true, 86 | "requires": { 87 | "sprintf-js": "1.0.3" 88 | } 89 | }, 90 | "array-union": { 91 | "version": "1.0.2", 92 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", 93 | "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", 94 | "dev": true, 95 | "requires": { 96 | "array-uniq": "1.0.3" 97 | } 98 | }, 99 | "array-uniq": { 100 | "version": "1.0.3", 101 | "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", 102 | "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", 103 | "dev": true 104 | }, 105 | "asap": { 106 | "version": "2.0.6", 107 | "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", 108 | "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", 109 | "dev": true 110 | }, 111 | "ast-traverse": { 112 | "version": "0.1.1", 113 | "resolved": "https://registry.npmjs.org/ast-traverse/-/ast-traverse-0.1.1.tgz", 114 | "integrity": "sha1-ac8rg4bxnc2hux4F1o/jWdiJfeY=", 115 | "dev": true 116 | }, 117 | "ast-types": { 118 | "version": "0.9.6", 119 | "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", 120 | "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=", 121 | "dev": true 122 | }, 123 | "async": { 124 | "version": "2.6.1", 125 | "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", 126 | "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", 127 | "dev": true, 128 | "requires": { 129 | "lodash": "4.17.11" 130 | } 131 | }, 132 | "babel-code-frame": { 133 | "version": "6.26.0", 134 | "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", 135 | "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", 136 | "dev": true, 137 | "requires": { 138 | "chalk": "1.1.3", 139 | "esutils": "2.0.2", 140 | "js-tokens": "3.0.2" 141 | }, 142 | "dependencies": { 143 | "js-tokens": { 144 | "version": "3.0.2", 145 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", 146 | "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", 147 | "dev": true 148 | } 149 | } 150 | }, 151 | "babel-core": { 152 | "version": "5.8.38", 153 | "resolved": "http://registry.npmjs.org/babel-core/-/babel-core-5.8.38.tgz", 154 | "integrity": "sha1-H8ruedfmG3ULALjlT238nQr4ZVg=", 155 | "dev": true, 156 | "requires": { 157 | "babel-plugin-constant-folding": "1.0.1", 158 | "babel-plugin-dead-code-elimination": "1.0.2", 159 | "babel-plugin-eval": "1.0.1", 160 | "babel-plugin-inline-environment-variables": "1.0.1", 161 | "babel-plugin-jscript": "1.0.4", 162 | "babel-plugin-member-expression-literals": "1.0.1", 163 | "babel-plugin-property-literals": "1.0.1", 164 | "babel-plugin-proto-to-assign": "1.0.4", 165 | "babel-plugin-react-constant-elements": "1.0.3", 166 | "babel-plugin-react-display-name": "1.0.3", 167 | "babel-plugin-remove-console": "1.0.1", 168 | "babel-plugin-remove-debugger": "1.0.1", 169 | "babel-plugin-runtime": "1.0.7", 170 | "babel-plugin-undeclared-variables-check": "1.0.2", 171 | "babel-plugin-undefined-to-void": "1.1.6", 172 | "babylon": "5.8.38", 173 | "bluebird": "2.11.0", 174 | "chalk": "1.1.3", 175 | "convert-source-map": "1.6.0", 176 | "core-js": "1.2.7", 177 | "debug": "2.6.9", 178 | "detect-indent": "3.0.1", 179 | "esutils": "2.0.2", 180 | "fs-readdir-recursive": "0.1.2", 181 | "globals": "6.4.1", 182 | "home-or-tmp": "1.0.0", 183 | "is-integer": "1.0.7", 184 | "js-tokens": "1.0.1", 185 | "json5": "0.4.0", 186 | "lodash": "3.10.1", 187 | "minimatch": "2.0.10", 188 | "output-file-sync": "1.1.2", 189 | "path-exists": "1.0.0", 190 | "path-is-absolute": "1.0.1", 191 | "private": "0.1.8", 192 | "regenerator": "0.8.40", 193 | "regexpu": "1.3.0", 194 | "repeating": "1.1.3", 195 | "resolve": "1.8.1", 196 | "shebang-regex": "1.0.0", 197 | "slash": "1.0.0", 198 | "source-map": "0.5.7", 199 | "source-map-support": "0.2.10", 200 | "to-fast-properties": "1.0.3", 201 | "trim-right": "1.0.1", 202 | "try-resolve": "1.0.1" 203 | }, 204 | "dependencies": { 205 | "globals": { 206 | "version": "6.4.1", 207 | "resolved": "http://registry.npmjs.org/globals/-/globals-6.4.1.tgz", 208 | "integrity": "sha1-hJgDKzttHMge68X3lpDY/in6v08=", 209 | "dev": true 210 | }, 211 | "lodash": { 212 | "version": "3.10.1", 213 | "resolved": "http://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", 214 | "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", 215 | "dev": true 216 | }, 217 | "minimatch": { 218 | "version": "2.0.10", 219 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", 220 | "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", 221 | "dev": true, 222 | "requires": { 223 | "brace-expansion": "1.1.11" 224 | } 225 | }, 226 | "source-map": { 227 | "version": "0.5.7", 228 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 229 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 230 | "dev": true 231 | } 232 | } 233 | }, 234 | "babel-messages": { 235 | "version": "6.23.0", 236 | "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", 237 | "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", 238 | "dev": true, 239 | "requires": { 240 | "babel-runtime": "6.26.0" 241 | } 242 | }, 243 | "babel-plugin-constant-folding": { 244 | "version": "1.0.1", 245 | "resolved": "https://registry.npmjs.org/babel-plugin-constant-folding/-/babel-plugin-constant-folding-1.0.1.tgz", 246 | "integrity": "sha1-g2HTZMmORJw2kr26Ue/whEKQqo4=", 247 | "dev": true 248 | }, 249 | "babel-plugin-dead-code-elimination": { 250 | "version": "1.0.2", 251 | "resolved": "https://registry.npmjs.org/babel-plugin-dead-code-elimination/-/babel-plugin-dead-code-elimination-1.0.2.tgz", 252 | "integrity": "sha1-X3xFEnTc18zNv7s+C4XdKBIfD2U=", 253 | "dev": true 254 | }, 255 | "babel-plugin-eval": { 256 | "version": "1.0.1", 257 | "resolved": "https://registry.npmjs.org/babel-plugin-eval/-/babel-plugin-eval-1.0.1.tgz", 258 | "integrity": "sha1-ovrtJc5r5preS/7CY/cBaRlZUNo=", 259 | "dev": true 260 | }, 261 | "babel-plugin-inline-environment-variables": { 262 | "version": "1.0.1", 263 | "resolved": "https://registry.npmjs.org/babel-plugin-inline-environment-variables/-/babel-plugin-inline-environment-variables-1.0.1.tgz", 264 | "integrity": "sha1-H1jOkSB61qgmqL9kX6/mj/X+P/4=", 265 | "dev": true 266 | }, 267 | "babel-plugin-jscript": { 268 | "version": "1.0.4", 269 | "resolved": "https://registry.npmjs.org/babel-plugin-jscript/-/babel-plugin-jscript-1.0.4.tgz", 270 | "integrity": "sha1-jzQsOCduh6R9X6CovT1etsytj8w=", 271 | "dev": true 272 | }, 273 | "babel-plugin-member-expression-literals": { 274 | "version": "1.0.1", 275 | "resolved": "https://registry.npmjs.org/babel-plugin-member-expression-literals/-/babel-plugin-member-expression-literals-1.0.1.tgz", 276 | "integrity": "sha1-zF7bD6qNyScXDnTW0cAkQAIWJNM=", 277 | "dev": true 278 | }, 279 | "babel-plugin-property-literals": { 280 | "version": "1.0.1", 281 | "resolved": "https://registry.npmjs.org/babel-plugin-property-literals/-/babel-plugin-property-literals-1.0.1.tgz", 282 | "integrity": "sha1-AlIwGQAZKYCxwRjv6kjOk6q4MzY=", 283 | "dev": true 284 | }, 285 | "babel-plugin-proto-to-assign": { 286 | "version": "1.0.4", 287 | "resolved": "https://registry.npmjs.org/babel-plugin-proto-to-assign/-/babel-plugin-proto-to-assign-1.0.4.tgz", 288 | "integrity": "sha1-xJ56/QL1d7xNoF6i3wAiUM980SM=", 289 | "dev": true, 290 | "requires": { 291 | "lodash": "3.10.1" 292 | }, 293 | "dependencies": { 294 | "lodash": { 295 | "version": "3.10.1", 296 | "resolved": "http://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", 297 | "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", 298 | "dev": true 299 | } 300 | } 301 | }, 302 | "babel-plugin-react-constant-elements": { 303 | "version": "1.0.3", 304 | "resolved": "https://registry.npmjs.org/babel-plugin-react-constant-elements/-/babel-plugin-react-constant-elements-1.0.3.tgz", 305 | "integrity": "sha1-lGc26DeEKcvDSdz/YvUcFDs041o=", 306 | "dev": true 307 | }, 308 | "babel-plugin-react-display-name": { 309 | "version": "1.0.3", 310 | "resolved": "https://registry.npmjs.org/babel-plugin-react-display-name/-/babel-plugin-react-display-name-1.0.3.tgz", 311 | "integrity": "sha1-dU/jiSboQkpOexWrbqYTne4FFPw=", 312 | "dev": true 313 | }, 314 | "babel-plugin-remove-console": { 315 | "version": "1.0.1", 316 | "resolved": "https://registry.npmjs.org/babel-plugin-remove-console/-/babel-plugin-remove-console-1.0.1.tgz", 317 | "integrity": "sha1-2PJFVsOgUAXUKqqv0neH9T/wE6c=", 318 | "dev": true 319 | }, 320 | "babel-plugin-remove-debugger": { 321 | "version": "1.0.1", 322 | "resolved": "https://registry.npmjs.org/babel-plugin-remove-debugger/-/babel-plugin-remove-debugger-1.0.1.tgz", 323 | "integrity": "sha1-/S6jzWGkKK0fO5yJiC/0KT6MFMc=", 324 | "dev": true 325 | }, 326 | "babel-plugin-runtime": { 327 | "version": "1.0.7", 328 | "resolved": "https://registry.npmjs.org/babel-plugin-runtime/-/babel-plugin-runtime-1.0.7.tgz", 329 | "integrity": "sha1-v3x9lm3Vbs1cF/ocslPJrLflSq8=", 330 | "dev": true 331 | }, 332 | "babel-plugin-undeclared-variables-check": { 333 | "version": "1.0.2", 334 | "resolved": "http://registry.npmjs.org/babel-plugin-undeclared-variables-check/-/babel-plugin-undeclared-variables-check-1.0.2.tgz", 335 | "integrity": "sha1-XPGqU52BP/ZOmWQSkK9iCWX2Xe4=", 336 | "dev": true, 337 | "requires": { 338 | "leven": "1.0.2" 339 | } 340 | }, 341 | "babel-plugin-undefined-to-void": { 342 | "version": "1.1.6", 343 | "resolved": "https://registry.npmjs.org/babel-plugin-undefined-to-void/-/babel-plugin-undefined-to-void-1.1.6.tgz", 344 | "integrity": "sha1-f1eO+LeN+uYAM4XYQXph7aBuL4E=", 345 | "dev": true 346 | }, 347 | "babel-runtime": { 348 | "version": "6.26.0", 349 | "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 350 | "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", 351 | "dev": true, 352 | "requires": { 353 | "core-js": "2.5.7", 354 | "regenerator-runtime": "0.11.1" 355 | }, 356 | "dependencies": { 357 | "core-js": { 358 | "version": "2.5.7", 359 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", 360 | "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==", 361 | "dev": true 362 | } 363 | } 364 | }, 365 | "babel-traverse": { 366 | "version": "6.26.0", 367 | "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", 368 | "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", 369 | "dev": true, 370 | "requires": { 371 | "babel-code-frame": "6.26.0", 372 | "babel-messages": "6.23.0", 373 | "babel-runtime": "6.26.0", 374 | "babel-types": "6.26.0", 375 | "babylon": "6.18.0", 376 | "debug": "2.6.9", 377 | "globals": "9.18.0", 378 | "invariant": "2.2.4", 379 | "lodash": "4.17.11" 380 | }, 381 | "dependencies": { 382 | "babylon": { 383 | "version": "6.18.0", 384 | "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", 385 | "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", 386 | "dev": true 387 | }, 388 | "globals": { 389 | "version": "9.18.0", 390 | "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", 391 | "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", 392 | "dev": true 393 | } 394 | } 395 | }, 396 | "babel-types": { 397 | "version": "6.26.0", 398 | "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", 399 | "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", 400 | "dev": true, 401 | "requires": { 402 | "babel-runtime": "6.26.0", 403 | "esutils": "2.0.2", 404 | "lodash": "4.17.11", 405 | "to-fast-properties": "1.0.3" 406 | } 407 | }, 408 | "babylon": { 409 | "version": "5.8.38", 410 | "resolved": "http://registry.npmjs.org/babylon/-/babylon-5.8.38.tgz", 411 | "integrity": "sha1-7JsSCxG/bM1Bc6GL8hfmC3mFn/0=", 412 | "dev": true 413 | }, 414 | "balanced-match": { 415 | "version": "1.0.0", 416 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 417 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 418 | "dev": true 419 | }, 420 | "bluebird": { 421 | "version": "2.11.0", 422 | "resolved": "http://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", 423 | "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=", 424 | "dev": true 425 | }, 426 | "brace-expansion": { 427 | "version": "1.1.11", 428 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 429 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 430 | "dev": true, 431 | "requires": { 432 | "balanced-match": "1.0.0", 433 | "concat-map": "0.0.1" 434 | } 435 | }, 436 | "breakable": { 437 | "version": "1.0.0", 438 | "resolved": "https://registry.npmjs.org/breakable/-/breakable-1.0.0.tgz", 439 | "integrity": "sha1-eEp5eRWjjq0nutRWtVcstLuqeME=", 440 | "dev": true 441 | }, 442 | "buffer-from": { 443 | "version": "1.1.1", 444 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 445 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", 446 | "dev": true 447 | }, 448 | "camelcase": { 449 | "version": "1.2.1", 450 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", 451 | "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", 452 | "dev": true 453 | }, 454 | "center-align": { 455 | "version": "0.1.3", 456 | "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", 457 | "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", 458 | "dev": true, 459 | "requires": { 460 | "align-text": "0.1.4", 461 | "lazy-cache": "1.0.4" 462 | } 463 | }, 464 | "chalk": { 465 | "version": "1.1.3", 466 | "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 467 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 468 | "dev": true, 469 | "requires": { 470 | "ansi-styles": "2.2.1", 471 | "escape-string-regexp": "1.0.5", 472 | "has-ansi": "2.0.0", 473 | "strip-ansi": "3.0.1", 474 | "supports-color": "2.0.0" 475 | } 476 | }, 477 | "circular-json": { 478 | "version": "0.3.3", 479 | "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", 480 | "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", 481 | "dev": true 482 | }, 483 | "cli-cursor": { 484 | "version": "1.0.2", 485 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", 486 | "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", 487 | "dev": true, 488 | "requires": { 489 | "restore-cursor": "1.0.1" 490 | } 491 | }, 492 | "cli-width": { 493 | "version": "1.1.1", 494 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-1.1.1.tgz", 495 | "integrity": "sha1-pNKT72frt7iNSk1CwMzwDE0eNm0=", 496 | "dev": true 497 | }, 498 | "cliui": { 499 | "version": "2.1.0", 500 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", 501 | "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", 502 | "dev": true, 503 | "requires": { 504 | "center-align": "0.1.3", 505 | "right-align": "0.1.3", 506 | "wordwrap": "0.0.2" 507 | }, 508 | "dependencies": { 509 | "wordwrap": { 510 | "version": "0.0.2", 511 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", 512 | "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", 513 | "dev": true 514 | } 515 | } 516 | }, 517 | "clone": { 518 | "version": "1.0.4", 519 | "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", 520 | "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", 521 | "dev": true 522 | }, 523 | "code-point-at": { 524 | "version": "1.1.0", 525 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", 526 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", 527 | "dev": true 528 | }, 529 | "commander": { 530 | "version": "2.17.1", 531 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", 532 | "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", 533 | "dev": true 534 | }, 535 | "commoner": { 536 | "version": "0.10.8", 537 | "resolved": "https://registry.npmjs.org/commoner/-/commoner-0.10.8.tgz", 538 | "integrity": "sha1-NPw2cs0kOT6LtH5wyqApOBH08sU=", 539 | "dev": true, 540 | "requires": { 541 | "commander": "2.17.1", 542 | "detective": "4.7.1", 543 | "glob": "5.0.15", 544 | "graceful-fs": "4.1.15", 545 | "iconv-lite": "0.4.24", 546 | "mkdirp": "0.5.1", 547 | "private": "0.1.8", 548 | "q": "1.5.1", 549 | "recast": "0.11.23" 550 | }, 551 | "dependencies": { 552 | "esprima": { 553 | "version": "3.1.3", 554 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", 555 | "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", 556 | "dev": true 557 | }, 558 | "glob": { 559 | "version": "5.0.15", 560 | "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", 561 | "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", 562 | "dev": true, 563 | "requires": { 564 | "inflight": "1.0.6", 565 | "inherits": "2.0.3", 566 | "minimatch": "3.0.4", 567 | "once": "1.4.0", 568 | "path-is-absolute": "1.0.1" 569 | } 570 | }, 571 | "recast": { 572 | "version": "0.11.23", 573 | "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", 574 | "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=", 575 | "dev": true, 576 | "requires": { 577 | "ast-types": "0.9.6", 578 | "esprima": "3.1.3", 579 | "private": "0.1.8", 580 | "source-map": "0.5.7" 581 | } 582 | }, 583 | "source-map": { 584 | "version": "0.5.7", 585 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 586 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 587 | "dev": true 588 | } 589 | } 590 | }, 591 | "concat-map": { 592 | "version": "0.0.1", 593 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 594 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 595 | "dev": true 596 | }, 597 | "concat-stream": { 598 | "version": "1.6.2", 599 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 600 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 601 | "dev": true, 602 | "requires": { 603 | "buffer-from": "1.1.1", 604 | "inherits": "2.0.3", 605 | "readable-stream": "2.3.6", 606 | "typedarray": "0.0.6" 607 | } 608 | }, 609 | "config-chain": { 610 | "version": "1.1.12", 611 | "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", 612 | "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", 613 | "dev": true, 614 | "requires": { 615 | "ini": "1.3.5", 616 | "proto-list": "1.2.4" 617 | } 618 | }, 619 | "convert-source-map": { 620 | "version": "1.6.0", 621 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", 622 | "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", 623 | "dev": true, 624 | "requires": { 625 | "safe-buffer": "5.1.2" 626 | } 627 | }, 628 | "core-js": { 629 | "version": "1.2.7", 630 | "resolved": "http://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", 631 | "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", 632 | "dev": true 633 | }, 634 | "core-util-is": { 635 | "version": "1.0.2", 636 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 637 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 638 | "dev": true 639 | }, 640 | "d": { 641 | "version": "1.0.0", 642 | "resolved": "http://registry.npmjs.org/d/-/d-1.0.0.tgz", 643 | "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", 644 | "dev": true, 645 | "requires": { 646 | "es5-ext": "0.10.46" 647 | } 648 | }, 649 | "debug": { 650 | "version": "2.6.9", 651 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 652 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 653 | "dev": true, 654 | "requires": { 655 | "ms": "2.0.0" 656 | } 657 | }, 658 | "debug-log": { 659 | "version": "1.0.1", 660 | "resolved": "http://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", 661 | "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=", 662 | "dev": true 663 | }, 664 | "decamelize": { 665 | "version": "1.2.0", 666 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 667 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", 668 | "dev": true 669 | }, 670 | "deep-is": { 671 | "version": "0.1.3", 672 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 673 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 674 | "dev": true 675 | }, 676 | "defaults": { 677 | "version": "1.0.3", 678 | "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", 679 | "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", 680 | "dev": true, 681 | "requires": { 682 | "clone": "1.0.4" 683 | } 684 | }, 685 | "defined": { 686 | "version": "1.0.0", 687 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", 688 | "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", 689 | "dev": true 690 | }, 691 | "defs": { 692 | "version": "1.1.1", 693 | "resolved": "https://registry.npmjs.org/defs/-/defs-1.1.1.tgz", 694 | "integrity": "sha1-siYJ8sehG6ej2xFoBcE5scr/qdI=", 695 | "dev": true, 696 | "requires": { 697 | "alter": "0.2.0", 698 | "ast-traverse": "0.1.1", 699 | "breakable": "1.0.0", 700 | "esprima-fb": "15001.1001.0-dev-harmony-fb", 701 | "simple-fmt": "0.1.0", 702 | "simple-is": "0.2.0", 703 | "stringmap": "0.2.2", 704 | "stringset": "0.2.1", 705 | "tryor": "0.1.2", 706 | "yargs": "3.27.0" 707 | }, 708 | "dependencies": { 709 | "esprima-fb": { 710 | "version": "15001.1001.0-dev-harmony-fb", 711 | "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", 712 | "integrity": "sha1-Q761fsJujPI3092LM+QlM1d/Jlk=", 713 | "dev": true 714 | } 715 | } 716 | }, 717 | "deglob": { 718 | "version": "1.1.2", 719 | "resolved": "http://registry.npmjs.org/deglob/-/deglob-1.1.2.tgz", 720 | "integrity": "sha1-dtV3wl/j9zKUEqK1nq3qV6xQDj8=", 721 | "dev": true, 722 | "requires": { 723 | "find-root": "1.1.0", 724 | "glob": "7.1.3", 725 | "ignore": "3.3.10", 726 | "pkg-config": "1.1.1", 727 | "run-parallel": "1.1.9", 728 | "uniq": "1.0.1", 729 | "xtend": "4.0.1" 730 | }, 731 | "dependencies": { 732 | "find-root": { 733 | "version": "1.1.0", 734 | "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", 735 | "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", 736 | "dev": true 737 | } 738 | } 739 | }, 740 | "del": { 741 | "version": "3.0.0", 742 | "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", 743 | "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", 744 | "dev": true, 745 | "requires": { 746 | "globby": "6.1.0", 747 | "is-path-cwd": "1.0.0", 748 | "is-path-in-cwd": "1.0.1", 749 | "p-map": "1.2.0", 750 | "pify": "3.0.0", 751 | "rimraf": "2.6.2" 752 | } 753 | }, 754 | "detect-indent": { 755 | "version": "3.0.1", 756 | "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-3.0.1.tgz", 757 | "integrity": "sha1-ncXl3bzu+DJXZLlFGwK8bVQIT3U=", 758 | "dev": true, 759 | "requires": { 760 | "get-stdin": "4.0.1", 761 | "minimist": "1.2.0", 762 | "repeating": "1.1.3" 763 | } 764 | }, 765 | "detective": { 766 | "version": "4.7.1", 767 | "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz", 768 | "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==", 769 | "dev": true, 770 | "requires": { 771 | "acorn": "5.7.3", 772 | "defined": "1.0.0" 773 | } 774 | }, 775 | "dezalgo": { 776 | "version": "1.0.3", 777 | "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", 778 | "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", 779 | "dev": true, 780 | "requires": { 781 | "asap": "2.0.6", 782 | "wrappy": "1.0.2" 783 | } 784 | }, 785 | "diff": { 786 | "version": "1.4.0", 787 | "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", 788 | "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", 789 | "dev": true 790 | }, 791 | "disparity": { 792 | "version": "2.0.0", 793 | "resolved": "https://registry.npmjs.org/disparity/-/disparity-2.0.0.tgz", 794 | "integrity": "sha1-V92stHMkrl9Y0swNqIbbTOnutxg=", 795 | "dev": true, 796 | "requires": { 797 | "ansi-styles": "2.2.1", 798 | "diff": "1.4.0" 799 | } 800 | }, 801 | "doctrine": { 802 | "version": "0.7.2", 803 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-0.7.2.tgz", 804 | "integrity": "sha1-fLhgNZujvpDgQLJrcpzkv6ZUxSM=", 805 | "dev": true, 806 | "requires": { 807 | "esutils": "1.1.6", 808 | "isarray": "0.0.1" 809 | }, 810 | "dependencies": { 811 | "esutils": { 812 | "version": "1.1.6", 813 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.1.6.tgz", 814 | "integrity": "sha1-wBzKqa5LiXxtDD4hCuUvPHqEQ3U=", 815 | "dev": true 816 | }, 817 | "isarray": { 818 | "version": "0.0.1", 819 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 820 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", 821 | "dev": true 822 | } 823 | } 824 | }, 825 | "editorconfig": { 826 | "version": "0.15.2", 827 | "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.2.tgz", 828 | "integrity": "sha512-GWjSI19PVJAM9IZRGOS+YKI8LN+/sjkSjNyvxL5ucqP9/IqtYNXBaQ/6c/hkPNYQHyOHra2KoXZI/JVpuqwmcQ==", 829 | "dev": true, 830 | "requires": { 831 | "@types/node": "10.12.4", 832 | "@types/semver": "5.5.0", 833 | "commander": "2.19.0", 834 | "lru-cache": "4.1.3", 835 | "semver": "5.6.0", 836 | "sigmund": "1.0.1" 837 | }, 838 | "dependencies": { 839 | "commander": { 840 | "version": "2.19.0", 841 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", 842 | "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", 843 | "dev": true 844 | }, 845 | "semver": { 846 | "version": "5.6.0", 847 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", 848 | "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", 849 | "dev": true 850 | } 851 | } 852 | }, 853 | "es5-ext": { 854 | "version": "0.10.46", 855 | "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.46.tgz", 856 | "integrity": "sha512-24XxRvJXNFwEMpJb3nOkiRJKRoupmjYmOPVlI65Qy2SrtxwOTB+g6ODjBKOtwEHbYrhWRty9xxOWLNdClT2djw==", 857 | "dev": true, 858 | "requires": { 859 | "es6-iterator": "2.0.3", 860 | "es6-symbol": "3.1.1", 861 | "next-tick": "1.0.0" 862 | } 863 | }, 864 | "es6-iterator": { 865 | "version": "2.0.3", 866 | "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", 867 | "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", 868 | "dev": true, 869 | "requires": { 870 | "d": "1.0.0", 871 | "es5-ext": "0.10.46", 872 | "es6-symbol": "3.1.1" 873 | } 874 | }, 875 | "es6-map": { 876 | "version": "0.1.5", 877 | "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", 878 | "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", 879 | "dev": true, 880 | "requires": { 881 | "d": "1.0.0", 882 | "es5-ext": "0.10.46", 883 | "es6-iterator": "2.0.3", 884 | "es6-set": "0.1.5", 885 | "es6-symbol": "3.1.1", 886 | "event-emitter": "0.3.5" 887 | } 888 | }, 889 | "es6-set": { 890 | "version": "0.1.5", 891 | "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", 892 | "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", 893 | "dev": true, 894 | "requires": { 895 | "d": "1.0.0", 896 | "es5-ext": "0.10.46", 897 | "es6-iterator": "2.0.3", 898 | "es6-symbol": "3.1.1", 899 | "event-emitter": "0.3.5" 900 | } 901 | }, 902 | "es6-symbol": { 903 | "version": "3.1.1", 904 | "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", 905 | "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", 906 | "dev": true, 907 | "requires": { 908 | "d": "1.0.0", 909 | "es5-ext": "0.10.46" 910 | } 911 | }, 912 | "es6-weak-map": { 913 | "version": "2.0.2", 914 | "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", 915 | "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", 916 | "dev": true, 917 | "requires": { 918 | "d": "1.0.0", 919 | "es5-ext": "0.10.46", 920 | "es6-iterator": "2.0.3", 921 | "es6-symbol": "3.1.1" 922 | } 923 | }, 924 | "escape-string-regexp": { 925 | "version": "1.0.5", 926 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 927 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 928 | "dev": true 929 | }, 930 | "escope": { 931 | "version": "3.6.0", 932 | "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", 933 | "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", 934 | "dev": true, 935 | "requires": { 936 | "es6-map": "0.1.5", 937 | "es6-weak-map": "2.0.2", 938 | "esrecurse": "4.2.1", 939 | "estraverse": "4.2.0" 940 | } 941 | }, 942 | "esformatter": { 943 | "version": "0.8.2", 944 | "resolved": "https://registry.npmjs.org/esformatter/-/esformatter-0.8.2.tgz", 945 | "integrity": "sha1-e6mIKqPtMIOfivds3fTxLaM3084=", 946 | "dev": true, 947 | "requires": { 948 | "debug": "0.7.4", 949 | "disparity": "2.0.0", 950 | "espree": "2.2.5", 951 | "glob": "5.0.15", 952 | "minimist": "1.2.0", 953 | "mout": "1.1.0", 954 | "npm-run": "2.0.0", 955 | "resolve": "1.8.1", 956 | "rocambole": "0.7.0", 957 | "rocambole-indent": "2.0.4", 958 | "rocambole-linebreak": "1.0.2", 959 | "rocambole-node": "1.0.0", 960 | "rocambole-token": "1.2.1", 961 | "rocambole-whitespace": "1.0.0", 962 | "stdin": "0.0.1", 963 | "strip-json-comments": "0.1.3", 964 | "supports-color": "1.3.1", 965 | "user-home": "2.0.0" 966 | }, 967 | "dependencies": { 968 | "debug": { 969 | "version": "0.7.4", 970 | "resolved": "http://registry.npmjs.org/debug/-/debug-0.7.4.tgz", 971 | "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=", 972 | "dev": true 973 | }, 974 | "glob": { 975 | "version": "5.0.15", 976 | "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", 977 | "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", 978 | "dev": true, 979 | "requires": { 980 | "inflight": "1.0.6", 981 | "inherits": "2.0.3", 982 | "minimatch": "3.0.4", 983 | "once": "1.4.0", 984 | "path-is-absolute": "1.0.1" 985 | } 986 | }, 987 | "strip-json-comments": { 988 | "version": "0.1.3", 989 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-0.1.3.tgz", 990 | "integrity": "sha1-Fkxk43Coo8wAyeAbU55WmCPw7lQ=", 991 | "dev": true 992 | }, 993 | "supports-color": { 994 | "version": "1.3.1", 995 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.3.1.tgz", 996 | "integrity": "sha1-FXWN8J2P87SswwdTn6vicJXhBC0=", 997 | "dev": true 998 | } 999 | } 1000 | }, 1001 | "esformatter-eol-last": { 1002 | "version": "1.0.0", 1003 | "resolved": "https://registry.npmjs.org/esformatter-eol-last/-/esformatter-eol-last-1.0.0.tgz", 1004 | "integrity": "sha1-RaeP9GIrHUnkT1a0mQV2amMpDAc=", 1005 | "dev": true, 1006 | "requires": { 1007 | "string.prototype.endswith": "0.2.0" 1008 | } 1009 | }, 1010 | "esformatter-ignore": { 1011 | "version": "0.1.3", 1012 | "resolved": "https://registry.npmjs.org/esformatter-ignore/-/esformatter-ignore-0.1.3.tgz", 1013 | "integrity": "sha1-BNO4db+knd4ATMWN9va7w8BWfx4=", 1014 | "dev": true 1015 | }, 1016 | "esformatter-jsx": { 1017 | "version": "2.3.11", 1018 | "resolved": "https://registry.npmjs.org/esformatter-jsx/-/esformatter-jsx-2.3.11.tgz", 1019 | "integrity": "sha1-QRxE7TJHVK+VquXe2FbVp+78td8=", 1020 | "dev": true, 1021 | "requires": { 1022 | "babel-core": "5.8.38", 1023 | "esformatter-ignore": "0.1.3", 1024 | "extend": "2.0.2", 1025 | "fresh-falafel": "1.2.0", 1026 | "js-beautify": "1.8.8" 1027 | } 1028 | }, 1029 | "esformatter-literal-notation": { 1030 | "version": "1.0.1", 1031 | "resolved": "https://registry.npmjs.org/esformatter-literal-notation/-/esformatter-literal-notation-1.0.1.tgz", 1032 | "integrity": "sha1-cQ57QgF1/j9+WvrVu60ykQOELi8=", 1033 | "dev": true, 1034 | "requires": { 1035 | "rocambole": "0.3.6", 1036 | "rocambole-token": "1.2.1" 1037 | }, 1038 | "dependencies": { 1039 | "esprima": { 1040 | "version": "1.0.4", 1041 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", 1042 | "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=", 1043 | "dev": true 1044 | }, 1045 | "rocambole": { 1046 | "version": "0.3.6", 1047 | "resolved": "https://registry.npmjs.org/rocambole/-/rocambole-0.3.6.tgz", 1048 | "integrity": "sha1-Teu/WUMUS8e2AG2Vvo+swLdDUqc=", 1049 | "dev": true, 1050 | "requires": { 1051 | "esprima": "1.0.4" 1052 | } 1053 | } 1054 | } 1055 | }, 1056 | "esformatter-parser": { 1057 | "version": "1.0.0", 1058 | "resolved": "https://registry.npmjs.org/esformatter-parser/-/esformatter-parser-1.0.0.tgz", 1059 | "integrity": "sha1-CFQHLQSHU57TnK442KVDLBfsEdM=", 1060 | "dev": true, 1061 | "requires": { 1062 | "acorn-to-esprima": "2.0.8", 1063 | "babel-traverse": "6.26.0", 1064 | "babylon": "6.18.0", 1065 | "rocambole": "0.7.0" 1066 | }, 1067 | "dependencies": { 1068 | "babylon": { 1069 | "version": "6.18.0", 1070 | "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", 1071 | "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", 1072 | "dev": true 1073 | } 1074 | } 1075 | }, 1076 | "esformatter-quotes": { 1077 | "version": "1.1.0", 1078 | "resolved": "https://registry.npmjs.org/esformatter-quotes/-/esformatter-quotes-1.1.0.tgz", 1079 | "integrity": "sha1-4ixsRFx/MGBB2BybnlH8psv6yoI=", 1080 | "dev": true 1081 | }, 1082 | "esformatter-semicolon-first": { 1083 | "version": "1.2.0", 1084 | "resolved": "https://registry.npmjs.org/esformatter-semicolon-first/-/esformatter-semicolon-first-1.2.0.tgz", 1085 | "integrity": "sha1-47US0dTgcxDqvKv1cnfqfIpW4kI=", 1086 | "dev": true, 1087 | "requires": { 1088 | "esformatter-parser": "1.0.0", 1089 | "rocambole": "0.7.0", 1090 | "rocambole-linebreak": "1.0.2", 1091 | "rocambole-token": "1.2.1" 1092 | } 1093 | }, 1094 | "esformatter-spaced-lined-comment": { 1095 | "version": "2.0.1", 1096 | "resolved": "https://registry.npmjs.org/esformatter-spaced-lined-comment/-/esformatter-spaced-lined-comment-2.0.1.tgz", 1097 | "integrity": "sha1-3F80B/k8KV4eVkRr00RWDaXm3Kw=", 1098 | "dev": true 1099 | }, 1100 | "eslint": { 1101 | "version": "1.9.0", 1102 | "resolved": "http://registry.npmjs.org/eslint/-/eslint-1.9.0.tgz", 1103 | "integrity": "sha1-p1qvB+KGUHcu0OcNqizggwebZRQ=", 1104 | "dev": true, 1105 | "requires": { 1106 | "chalk": "1.1.3", 1107 | "concat-stream": "1.6.2", 1108 | "debug": "2.6.9", 1109 | "doctrine": "0.7.2", 1110 | "escape-string-regexp": "1.0.5", 1111 | "escope": "3.6.0", 1112 | "espree": "2.2.5", 1113 | "estraverse": "4.2.0", 1114 | "estraverse-fb": "1.3.2", 1115 | "esutils": "2.0.2", 1116 | "file-entry-cache": "1.3.1", 1117 | "glob": "5.0.15", 1118 | "globals": "8.18.0", 1119 | "handlebars": "4.0.12", 1120 | "inquirer": "0.11.4", 1121 | "is-my-json-valid": "2.19.0", 1122 | "is-resolvable": "1.1.0", 1123 | "js-yaml": "3.12.0", 1124 | "json-stable-stringify": "1.0.1", 1125 | "lodash.clonedeep": "3.0.2", 1126 | "lodash.merge": "3.3.2", 1127 | "lodash.omit": "3.1.0", 1128 | "minimatch": "3.0.4", 1129 | "mkdirp": "0.5.1", 1130 | "object-assign": "4.1.1", 1131 | "optionator": "0.6.0", 1132 | "path-is-absolute": "1.0.1", 1133 | "path-is-inside": "1.0.2", 1134 | "shelljs": "0.5.3", 1135 | "strip-json-comments": "1.0.4", 1136 | "text-table": "0.2.0", 1137 | "to-double-quotes": "2.0.0", 1138 | "to-single-quotes": "2.0.1", 1139 | "user-home": "2.0.0", 1140 | "xml-escape": "1.0.0" 1141 | }, 1142 | "dependencies": { 1143 | "glob": { 1144 | "version": "5.0.15", 1145 | "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", 1146 | "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", 1147 | "dev": true, 1148 | "requires": { 1149 | "inflight": "1.0.6", 1150 | "inherits": "2.0.3", 1151 | "minimatch": "3.0.4", 1152 | "once": "1.4.0", 1153 | "path-is-absolute": "1.0.1" 1154 | } 1155 | } 1156 | } 1157 | }, 1158 | "eslint-config-standard": { 1159 | "version": "4.4.0", 1160 | "resolved": "http://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-4.4.0.tgz", 1161 | "integrity": "sha1-wSl0nhmZ4M+GEHeyddnFHc2XzXU=", 1162 | "dev": true 1163 | }, 1164 | "eslint-config-standard-react": { 1165 | "version": "1.2.1", 1166 | "resolved": "http://registry.npmjs.org/eslint-config-standard-react/-/eslint-config-standard-react-1.2.1.tgz", 1167 | "integrity": "sha1-7QRf2yKzoP4LsL1EnPO/vq7etbM=", 1168 | "dev": true 1169 | }, 1170 | "eslint-plugin-react": { 1171 | "version": "3.16.1", 1172 | "resolved": "http://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-3.16.1.tgz", 1173 | "integrity": "sha1-Ji2Wt318SkKvgJpzwOUnpYYSKTw=", 1174 | "dev": true 1175 | }, 1176 | "eslint-plugin-standard": { 1177 | "version": "1.3.3", 1178 | "resolved": "http://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-1.3.3.tgz", 1179 | "integrity": "sha1-owhUUVI0MedvQJxwy4+U4yvw7H8=", 1180 | "dev": true 1181 | }, 1182 | "espree": { 1183 | "version": "2.2.5", 1184 | "resolved": "http://registry.npmjs.org/espree/-/espree-2.2.5.tgz", 1185 | "integrity": "sha1-32kbkxCIlAKuspzAZnCMVmkLhUs=", 1186 | "dev": true 1187 | }, 1188 | "esrecurse": { 1189 | "version": "4.2.1", 1190 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", 1191 | "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", 1192 | "dev": true, 1193 | "requires": { 1194 | "estraverse": "4.2.0" 1195 | } 1196 | }, 1197 | "estraverse": { 1198 | "version": "4.2.0", 1199 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", 1200 | "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", 1201 | "dev": true 1202 | }, 1203 | "estraverse-fb": { 1204 | "version": "1.3.2", 1205 | "resolved": "https://registry.npmjs.org/estraverse-fb/-/estraverse-fb-1.3.2.tgz", 1206 | "integrity": "sha1-0yOky15awzHOoDNBOpJT4WQ+B8Q=", 1207 | "dev": true 1208 | }, 1209 | "esutils": { 1210 | "version": "2.0.2", 1211 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", 1212 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", 1213 | "dev": true 1214 | }, 1215 | "event-emitter": { 1216 | "version": "0.3.5", 1217 | "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", 1218 | "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", 1219 | "dev": true, 1220 | "requires": { 1221 | "d": "1.0.0", 1222 | "es5-ext": "0.10.46" 1223 | } 1224 | }, 1225 | "exit-hook": { 1226 | "version": "1.1.1", 1227 | "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", 1228 | "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", 1229 | "dev": true 1230 | }, 1231 | "extend": { 1232 | "version": "2.0.2", 1233 | "resolved": "https://registry.npmjs.org/extend/-/extend-2.0.2.tgz", 1234 | "integrity": "sha512-AgFD4VU+lVLP6vjnlNfF7OeInLTyeyckCNPEsuxz1vi786UuK/nk6ynPuhn/h+Ju9++TQyr5EpLRI14fc1QtTQ==", 1235 | "dev": true 1236 | }, 1237 | "fast-levenshtein": { 1238 | "version": "1.0.7", 1239 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.0.7.tgz", 1240 | "integrity": "sha1-AXjc3uAjuSkFGTrwlZ6KdjnP3Lk=", 1241 | "dev": true 1242 | }, 1243 | "figures": { 1244 | "version": "1.7.0", 1245 | "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", 1246 | "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", 1247 | "dev": true, 1248 | "requires": { 1249 | "escape-string-regexp": "1.0.5", 1250 | "object-assign": "4.1.1" 1251 | } 1252 | }, 1253 | "file-entry-cache": { 1254 | "version": "1.3.1", 1255 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-1.3.1.tgz", 1256 | "integrity": "sha1-RMYepgeuS+nBQC9B9EJwy/4zT/g=", 1257 | "dev": true, 1258 | "requires": { 1259 | "flat-cache": "1.3.2", 1260 | "object-assign": "4.1.1" 1261 | } 1262 | }, 1263 | "find-root": { 1264 | "version": "0.1.2", 1265 | "resolved": "https://registry.npmjs.org/find-root/-/find-root-0.1.2.tgz", 1266 | "integrity": "sha1-mNImfP8ZFsyvJ0OzoO6oHXnX3NE=", 1267 | "dev": true 1268 | }, 1269 | "flat-cache": { 1270 | "version": "1.3.2", 1271 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.2.tgz", 1272 | "integrity": "sha512-KByBY8c98sLUAGpnmjEdWTrtrLZRtZdwds+kAL/ciFXTCb7AZgqKsAnVnYFQj1hxepwO8JKN/8AsRWwLq+RK0A==", 1273 | "dev": true, 1274 | "requires": { 1275 | "circular-json": "0.3.3", 1276 | "del": "3.0.0", 1277 | "graceful-fs": "4.1.15", 1278 | "write": "0.2.1" 1279 | } 1280 | }, 1281 | "foreach": { 1282 | "version": "2.0.5", 1283 | "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", 1284 | "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", 1285 | "dev": true 1286 | }, 1287 | "fresh-falafel": { 1288 | "version": "1.2.0", 1289 | "resolved": "https://registry.npmjs.org/fresh-falafel/-/fresh-falafel-1.2.0.tgz", 1290 | "integrity": "sha1-WWbe6V+zXSopsS0vJRaLFyJeS2w=", 1291 | "dev": true, 1292 | "requires": { 1293 | "acorn": "1.2.2", 1294 | "foreach": "2.0.5", 1295 | "isarray": "0.0.1", 1296 | "object-keys": "1.0.12" 1297 | }, 1298 | "dependencies": { 1299 | "acorn": { 1300 | "version": "1.2.2", 1301 | "resolved": "http://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz", 1302 | "integrity": "sha1-yM4n3grMdtiW0rH6099YjZ6C8BQ=", 1303 | "dev": true 1304 | }, 1305 | "isarray": { 1306 | "version": "0.0.1", 1307 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 1308 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", 1309 | "dev": true 1310 | } 1311 | } 1312 | }, 1313 | "fs-readdir-recursive": { 1314 | "version": "0.1.2", 1315 | "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-0.1.2.tgz", 1316 | "integrity": "sha1-MVtPuMHKW4xH3v7zGdBz2tNWgFk=", 1317 | "dev": true 1318 | }, 1319 | "fs.realpath": { 1320 | "version": "1.0.0", 1321 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1322 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 1323 | "dev": true 1324 | }, 1325 | "generate-function": { 1326 | "version": "2.3.1", 1327 | "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", 1328 | "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", 1329 | "dev": true, 1330 | "requires": { 1331 | "is-property": "1.0.2" 1332 | } 1333 | }, 1334 | "generate-object-property": { 1335 | "version": "1.2.0", 1336 | "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", 1337 | "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", 1338 | "dev": true, 1339 | "requires": { 1340 | "is-property": "1.0.2" 1341 | } 1342 | }, 1343 | "get-stdin": { 1344 | "version": "4.0.1", 1345 | "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", 1346 | "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", 1347 | "dev": true 1348 | }, 1349 | "glob": { 1350 | "version": "7.1.3", 1351 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", 1352 | "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", 1353 | "dev": true, 1354 | "requires": { 1355 | "fs.realpath": "1.0.0", 1356 | "inflight": "1.0.6", 1357 | "inherits": "2.0.3", 1358 | "minimatch": "3.0.4", 1359 | "once": "1.4.0", 1360 | "path-is-absolute": "1.0.1" 1361 | } 1362 | }, 1363 | "globals": { 1364 | "version": "8.18.0", 1365 | "resolved": "http://registry.npmjs.org/globals/-/globals-8.18.0.tgz", 1366 | "integrity": "sha1-k9SmK9ysOM+vr8R9awNHaMsP/LQ=", 1367 | "dev": true 1368 | }, 1369 | "globby": { 1370 | "version": "6.1.0", 1371 | "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", 1372 | "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", 1373 | "dev": true, 1374 | "requires": { 1375 | "array-union": "1.0.2", 1376 | "glob": "7.1.3", 1377 | "object-assign": "4.1.1", 1378 | "pify": "2.3.0", 1379 | "pinkie-promise": "2.0.1" 1380 | }, 1381 | "dependencies": { 1382 | "pify": { 1383 | "version": "2.3.0", 1384 | "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 1385 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", 1386 | "dev": true 1387 | } 1388 | } 1389 | }, 1390 | "graceful-fs": { 1391 | "version": "4.1.15", 1392 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", 1393 | "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", 1394 | "dev": true 1395 | }, 1396 | "handlebars": { 1397 | "version": "4.0.12", 1398 | "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz", 1399 | "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==", 1400 | "dev": true, 1401 | "requires": { 1402 | "async": "2.6.1", 1403 | "optimist": "0.6.1", 1404 | "source-map": "0.6.1", 1405 | "uglify-js": "3.4.9" 1406 | } 1407 | }, 1408 | "has-ansi": { 1409 | "version": "2.0.0", 1410 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 1411 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 1412 | "dev": true, 1413 | "requires": { 1414 | "ansi-regex": "2.1.1" 1415 | } 1416 | }, 1417 | "home-or-tmp": { 1418 | "version": "1.0.0", 1419 | "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-1.0.0.tgz", 1420 | "integrity": "sha1-S58eQIAMPlDGwn94FnavzOcfOYU=", 1421 | "dev": true, 1422 | "requires": { 1423 | "os-tmpdir": "1.0.2", 1424 | "user-home": "1.1.1" 1425 | }, 1426 | "dependencies": { 1427 | "user-home": { 1428 | "version": "1.1.1", 1429 | "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", 1430 | "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", 1431 | "dev": true 1432 | } 1433 | } 1434 | }, 1435 | "iconv-lite": { 1436 | "version": "0.4.24", 1437 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 1438 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 1439 | "dev": true, 1440 | "requires": { 1441 | "safer-buffer": "2.1.2" 1442 | } 1443 | }, 1444 | "ignore": { 1445 | "version": "3.3.10", 1446 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", 1447 | "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", 1448 | "dev": true 1449 | }, 1450 | "inflight": { 1451 | "version": "1.0.6", 1452 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1453 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1454 | "dev": true, 1455 | "requires": { 1456 | "once": "1.4.0", 1457 | "wrappy": "1.0.2" 1458 | } 1459 | }, 1460 | "inherits": { 1461 | "version": "2.0.3", 1462 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1463 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 1464 | "dev": true 1465 | }, 1466 | "ini": { 1467 | "version": "1.3.5", 1468 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", 1469 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", 1470 | "dev": true 1471 | }, 1472 | "inquirer": { 1473 | "version": "0.11.4", 1474 | "resolved": "http://registry.npmjs.org/inquirer/-/inquirer-0.11.4.tgz", 1475 | "integrity": "sha1-geM3ToNhvq/y2XAWIG01nQsy+k0=", 1476 | "dev": true, 1477 | "requires": { 1478 | "ansi-escapes": "1.4.0", 1479 | "ansi-regex": "2.1.1", 1480 | "chalk": "1.1.3", 1481 | "cli-cursor": "1.0.2", 1482 | "cli-width": "1.1.1", 1483 | "figures": "1.7.0", 1484 | "lodash": "3.10.1", 1485 | "readline2": "1.0.1", 1486 | "run-async": "0.1.0", 1487 | "rx-lite": "3.1.2", 1488 | "string-width": "1.0.2", 1489 | "strip-ansi": "3.0.1", 1490 | "through": "2.3.8" 1491 | }, 1492 | "dependencies": { 1493 | "lodash": { 1494 | "version": "3.10.1", 1495 | "resolved": "http://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", 1496 | "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", 1497 | "dev": true 1498 | } 1499 | } 1500 | }, 1501 | "invariant": { 1502 | "version": "2.2.4", 1503 | "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", 1504 | "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", 1505 | "dev": true, 1506 | "requires": { 1507 | "loose-envify": "1.4.0" 1508 | } 1509 | }, 1510 | "invert-kv": { 1511 | "version": "1.0.0", 1512 | "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", 1513 | "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", 1514 | "dev": true 1515 | }, 1516 | "is-buffer": { 1517 | "version": "1.1.6", 1518 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 1519 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", 1520 | "dev": true 1521 | }, 1522 | "is-finite": { 1523 | "version": "1.0.2", 1524 | "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", 1525 | "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", 1526 | "dev": true, 1527 | "requires": { 1528 | "number-is-nan": "1.0.1" 1529 | } 1530 | }, 1531 | "is-fullwidth-code-point": { 1532 | "version": "1.0.0", 1533 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 1534 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", 1535 | "dev": true, 1536 | "requires": { 1537 | "number-is-nan": "1.0.1" 1538 | } 1539 | }, 1540 | "is-integer": { 1541 | "version": "1.0.7", 1542 | "resolved": "https://registry.npmjs.org/is-integer/-/is-integer-1.0.7.tgz", 1543 | "integrity": "sha1-a96Bqs3feLZZtmKdYpytxRqIbVw=", 1544 | "dev": true, 1545 | "requires": { 1546 | "is-finite": "1.0.2" 1547 | } 1548 | }, 1549 | "is-my-ip-valid": { 1550 | "version": "1.0.0", 1551 | "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", 1552 | "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", 1553 | "dev": true 1554 | }, 1555 | "is-my-json-valid": { 1556 | "version": "2.19.0", 1557 | "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.19.0.tgz", 1558 | "integrity": "sha512-mG0f/unGX1HZ5ep4uhRaPOS8EkAY8/j6mDRMJrutq4CqhoJWYp7qAlonIPy3TV7p3ju4TK9fo/PbnoksWmsp5Q==", 1559 | "dev": true, 1560 | "requires": { 1561 | "generate-function": "2.3.1", 1562 | "generate-object-property": "1.2.0", 1563 | "is-my-ip-valid": "1.0.0", 1564 | "jsonpointer": "4.0.1", 1565 | "xtend": "4.0.1" 1566 | } 1567 | }, 1568 | "is-path-cwd": { 1569 | "version": "1.0.0", 1570 | "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", 1571 | "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", 1572 | "dev": true 1573 | }, 1574 | "is-path-in-cwd": { 1575 | "version": "1.0.1", 1576 | "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", 1577 | "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", 1578 | "dev": true, 1579 | "requires": { 1580 | "is-path-inside": "1.0.1" 1581 | } 1582 | }, 1583 | "is-path-inside": { 1584 | "version": "1.0.1", 1585 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", 1586 | "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", 1587 | "dev": true, 1588 | "requires": { 1589 | "path-is-inside": "1.0.2" 1590 | } 1591 | }, 1592 | "is-property": { 1593 | "version": "1.0.2", 1594 | "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", 1595 | "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", 1596 | "dev": true 1597 | }, 1598 | "is-resolvable": { 1599 | "version": "1.1.0", 1600 | "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", 1601 | "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", 1602 | "dev": true 1603 | }, 1604 | "isarray": { 1605 | "version": "1.0.0", 1606 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1607 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 1608 | "dev": true 1609 | }, 1610 | "isexe": { 1611 | "version": "2.0.0", 1612 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1613 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 1614 | "dev": true 1615 | }, 1616 | "js-beautify": { 1617 | "version": "1.8.8", 1618 | "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.8.8.tgz", 1619 | "integrity": "sha512-qVNq7ZZ7ZbLdzorvSlRDadS0Rh5oyItaE95v6I4wbbuSiijxn7SnnsV6dvKlcXuO2jX7lK8tn9fBulx34K/Ejg==", 1620 | "dev": true, 1621 | "requires": { 1622 | "config-chain": "1.1.12", 1623 | "editorconfig": "0.15.2", 1624 | "mkdirp": "0.5.1", 1625 | "nopt": "4.0.1" 1626 | } 1627 | }, 1628 | "js-tokens": { 1629 | "version": "1.0.1", 1630 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-1.0.1.tgz", 1631 | "integrity": "sha1-zENaXIuUrRWst5gxQPyAGCyJrq4=", 1632 | "dev": true 1633 | }, 1634 | "js-yaml": { 1635 | "version": "3.12.0", 1636 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", 1637 | "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", 1638 | "dev": true, 1639 | "requires": { 1640 | "argparse": "1.0.10", 1641 | "esprima": "4.0.1" 1642 | }, 1643 | "dependencies": { 1644 | "esprima": { 1645 | "version": "4.0.1", 1646 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 1647 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 1648 | "dev": true 1649 | } 1650 | } 1651 | }, 1652 | "jsesc": { 1653 | "version": "0.5.0", 1654 | "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", 1655 | "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", 1656 | "dev": true 1657 | }, 1658 | "json-stable-stringify": { 1659 | "version": "1.0.1", 1660 | "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", 1661 | "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", 1662 | "dev": true, 1663 | "requires": { 1664 | "jsonify": "0.0.0" 1665 | } 1666 | }, 1667 | "json5": { 1668 | "version": "0.4.0", 1669 | "resolved": "http://registry.npmjs.org/json5/-/json5-0.4.0.tgz", 1670 | "integrity": "sha1-BUNS5MTIDIbAkjh31EneF2pzLI0=", 1671 | "dev": true 1672 | }, 1673 | "jsonify": { 1674 | "version": "0.0.0", 1675 | "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", 1676 | "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", 1677 | "dev": true 1678 | }, 1679 | "jsonpointer": { 1680 | "version": "4.0.1", 1681 | "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", 1682 | "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", 1683 | "dev": true 1684 | }, 1685 | "kind-of": { 1686 | "version": "3.2.2", 1687 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 1688 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 1689 | "dev": true, 1690 | "requires": { 1691 | "is-buffer": "1.1.6" 1692 | } 1693 | }, 1694 | "lazy-cache": { 1695 | "version": "1.0.4", 1696 | "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", 1697 | "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", 1698 | "dev": true 1699 | }, 1700 | "lcid": { 1701 | "version": "1.0.0", 1702 | "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", 1703 | "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", 1704 | "dev": true, 1705 | "requires": { 1706 | "invert-kv": "1.0.0" 1707 | } 1708 | }, 1709 | "leven": { 1710 | "version": "1.0.2", 1711 | "resolved": "https://registry.npmjs.org/leven/-/leven-1.0.2.tgz", 1712 | "integrity": "sha1-kUS27ryl8dBoAWnxpncNzqYLdcM=", 1713 | "dev": true 1714 | }, 1715 | "levn": { 1716 | "version": "0.2.5", 1717 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.2.5.tgz", 1718 | "integrity": "sha1-uo0znQykphDjo/FFucr0iAcVUFQ=", 1719 | "dev": true, 1720 | "requires": { 1721 | "prelude-ls": "1.1.2", 1722 | "type-check": "0.3.2" 1723 | } 1724 | }, 1725 | "lodash": { 1726 | "version": "4.17.11", 1727 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", 1728 | "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", 1729 | "dev": true 1730 | }, 1731 | "lodash._arraycopy": { 1732 | "version": "3.0.0", 1733 | "resolved": "https://registry.npmjs.org/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz", 1734 | "integrity": "sha1-due3wfH7klRzdIeKVi7Qaj5Q9uE=", 1735 | "dev": true 1736 | }, 1737 | "lodash._arrayeach": { 1738 | "version": "3.0.0", 1739 | "resolved": "https://registry.npmjs.org/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz", 1740 | "integrity": "sha1-urFWsqkNPxu9XGU0AzSeXlkz754=", 1741 | "dev": true 1742 | }, 1743 | "lodash._arraymap": { 1744 | "version": "3.0.0", 1745 | "resolved": "https://registry.npmjs.org/lodash._arraymap/-/lodash._arraymap-3.0.0.tgz", 1746 | "integrity": "sha1-Go/Q9MDfS2HeoHbXF83Jfwo8PmY=", 1747 | "dev": true 1748 | }, 1749 | "lodash._baseassign": { 1750 | "version": "3.2.0", 1751 | "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", 1752 | "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", 1753 | "dev": true, 1754 | "requires": { 1755 | "lodash._basecopy": "3.0.1", 1756 | "lodash.keys": "3.1.2" 1757 | } 1758 | }, 1759 | "lodash._baseclone": { 1760 | "version": "3.3.0", 1761 | "resolved": "https://registry.npmjs.org/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz", 1762 | "integrity": "sha1-MDUZv2OT/n5C802LYw73eU41Qrc=", 1763 | "dev": true, 1764 | "requires": { 1765 | "lodash._arraycopy": "3.0.0", 1766 | "lodash._arrayeach": "3.0.0", 1767 | "lodash._baseassign": "3.2.0", 1768 | "lodash._basefor": "3.0.3", 1769 | "lodash.isarray": "3.0.4", 1770 | "lodash.keys": "3.1.2" 1771 | } 1772 | }, 1773 | "lodash._basecopy": { 1774 | "version": "3.0.1", 1775 | "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", 1776 | "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", 1777 | "dev": true 1778 | }, 1779 | "lodash._basedifference": { 1780 | "version": "3.0.3", 1781 | "resolved": "https://registry.npmjs.org/lodash._basedifference/-/lodash._basedifference-3.0.3.tgz", 1782 | "integrity": "sha1-8sIEKWwqeOArOJCBtu3KyTPPYpw=", 1783 | "dev": true, 1784 | "requires": { 1785 | "lodash._baseindexof": "3.1.0", 1786 | "lodash._cacheindexof": "3.0.2", 1787 | "lodash._createcache": "3.1.2" 1788 | } 1789 | }, 1790 | "lodash._baseflatten": { 1791 | "version": "3.1.4", 1792 | "resolved": "https://registry.npmjs.org/lodash._baseflatten/-/lodash._baseflatten-3.1.4.tgz", 1793 | "integrity": "sha1-B3D/gBMa9uNPO1EXlqe6UhTmX/c=", 1794 | "dev": true, 1795 | "requires": { 1796 | "lodash.isarguments": "3.1.0", 1797 | "lodash.isarray": "3.0.4" 1798 | } 1799 | }, 1800 | "lodash._basefor": { 1801 | "version": "3.0.3", 1802 | "resolved": "https://registry.npmjs.org/lodash._basefor/-/lodash._basefor-3.0.3.tgz", 1803 | "integrity": "sha1-dVC06SGO8J+tJDQ7YSAhx5tMIMI=", 1804 | "dev": true 1805 | }, 1806 | "lodash._baseindexof": { 1807 | "version": "3.1.0", 1808 | "resolved": "https://registry.npmjs.org/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz", 1809 | "integrity": "sha1-/lK1OhxnYeQmGNZU5KJXie1hgiw=", 1810 | "dev": true 1811 | }, 1812 | "lodash._bindcallback": { 1813 | "version": "3.0.1", 1814 | "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", 1815 | "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", 1816 | "dev": true 1817 | }, 1818 | "lodash._cacheindexof": { 1819 | "version": "3.0.2", 1820 | "resolved": "https://registry.npmjs.org/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz", 1821 | "integrity": "sha1-PcaayCSY0u5ePOVgkbr9Ktx73pI=", 1822 | "dev": true 1823 | }, 1824 | "lodash._createassigner": { 1825 | "version": "3.1.1", 1826 | "resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz", 1827 | "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", 1828 | "dev": true, 1829 | "requires": { 1830 | "lodash._bindcallback": "3.0.1", 1831 | "lodash._isiterateecall": "3.0.9", 1832 | "lodash.restparam": "3.6.1" 1833 | } 1834 | }, 1835 | "lodash._createcache": { 1836 | "version": "3.1.2", 1837 | "resolved": "https://registry.npmjs.org/lodash._createcache/-/lodash._createcache-3.1.2.tgz", 1838 | "integrity": "sha1-VtagZAF2JeeevKa4AY4XRAvc8JM=", 1839 | "dev": true, 1840 | "requires": { 1841 | "lodash._getnative": "3.9.1" 1842 | } 1843 | }, 1844 | "lodash._getnative": { 1845 | "version": "3.9.1", 1846 | "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", 1847 | "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", 1848 | "dev": true 1849 | }, 1850 | "lodash._isiterateecall": { 1851 | "version": "3.0.9", 1852 | "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", 1853 | "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", 1854 | "dev": true 1855 | }, 1856 | "lodash._pickbyarray": { 1857 | "version": "3.0.2", 1858 | "resolved": "https://registry.npmjs.org/lodash._pickbyarray/-/lodash._pickbyarray-3.0.2.tgz", 1859 | "integrity": "sha1-H4mNlgfrVgsOFnOEt3x8bRCKpMU=", 1860 | "dev": true 1861 | }, 1862 | "lodash._pickbycallback": { 1863 | "version": "3.0.0", 1864 | "resolved": "https://registry.npmjs.org/lodash._pickbycallback/-/lodash._pickbycallback-3.0.0.tgz", 1865 | "integrity": "sha1-/2G5oBens699MObFPeKK+hm4dQo=", 1866 | "dev": true, 1867 | "requires": { 1868 | "lodash._basefor": "3.0.3", 1869 | "lodash.keysin": "3.0.8" 1870 | } 1871 | }, 1872 | "lodash.clonedeep": { 1873 | "version": "3.0.2", 1874 | "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-3.0.2.tgz", 1875 | "integrity": "sha1-oKHkDYKl6on/WxR7hETtY9koJ9s=", 1876 | "dev": true, 1877 | "requires": { 1878 | "lodash._baseclone": "3.3.0", 1879 | "lodash._bindcallback": "3.0.1" 1880 | } 1881 | }, 1882 | "lodash.isarguments": { 1883 | "version": "3.1.0", 1884 | "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", 1885 | "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", 1886 | "dev": true 1887 | }, 1888 | "lodash.isarray": { 1889 | "version": "3.0.4", 1890 | "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", 1891 | "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", 1892 | "dev": true 1893 | }, 1894 | "lodash.isplainobject": { 1895 | "version": "3.2.0", 1896 | "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-3.2.0.tgz", 1897 | "integrity": "sha1-moI4rhayAEMpYM1zRlEtASP79MU=", 1898 | "dev": true, 1899 | "requires": { 1900 | "lodash._basefor": "3.0.3", 1901 | "lodash.isarguments": "3.1.0", 1902 | "lodash.keysin": "3.0.8" 1903 | } 1904 | }, 1905 | "lodash.istypedarray": { 1906 | "version": "3.0.6", 1907 | "resolved": "https://registry.npmjs.org/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz", 1908 | "integrity": "sha1-yaR3SYYHUB2OhJTSg7h8OSgc72I=", 1909 | "dev": true 1910 | }, 1911 | "lodash.keys": { 1912 | "version": "3.1.2", 1913 | "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", 1914 | "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", 1915 | "dev": true, 1916 | "requires": { 1917 | "lodash._getnative": "3.9.1", 1918 | "lodash.isarguments": "3.1.0", 1919 | "lodash.isarray": "3.0.4" 1920 | } 1921 | }, 1922 | "lodash.keysin": { 1923 | "version": "3.0.8", 1924 | "resolved": "https://registry.npmjs.org/lodash.keysin/-/lodash.keysin-3.0.8.tgz", 1925 | "integrity": "sha1-IsRJPrvtsUJ5YqVLRFssinZ/tH8=", 1926 | "dev": true, 1927 | "requires": { 1928 | "lodash.isarguments": "3.1.0", 1929 | "lodash.isarray": "3.0.4" 1930 | } 1931 | }, 1932 | "lodash.merge": { 1933 | "version": "3.3.2", 1934 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-3.3.2.tgz", 1935 | "integrity": "sha1-DZDZPtY3sYeEN7s+IWASYNev6ZQ=", 1936 | "dev": true, 1937 | "requires": { 1938 | "lodash._arraycopy": "3.0.0", 1939 | "lodash._arrayeach": "3.0.0", 1940 | "lodash._createassigner": "3.1.1", 1941 | "lodash._getnative": "3.9.1", 1942 | "lodash.isarguments": "3.1.0", 1943 | "lodash.isarray": "3.0.4", 1944 | "lodash.isplainobject": "3.2.0", 1945 | "lodash.istypedarray": "3.0.6", 1946 | "lodash.keys": "3.1.2", 1947 | "lodash.keysin": "3.0.8", 1948 | "lodash.toplainobject": "3.0.0" 1949 | } 1950 | }, 1951 | "lodash.omit": { 1952 | "version": "3.1.0", 1953 | "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-3.1.0.tgz", 1954 | "integrity": "sha1-iX/jguZBPZrJfGH3jtHgV6AK+fM=", 1955 | "dev": true, 1956 | "requires": { 1957 | "lodash._arraymap": "3.0.0", 1958 | "lodash._basedifference": "3.0.3", 1959 | "lodash._baseflatten": "3.1.4", 1960 | "lodash._bindcallback": "3.0.1", 1961 | "lodash._pickbyarray": "3.0.2", 1962 | "lodash._pickbycallback": "3.0.0", 1963 | "lodash.keysin": "3.0.8", 1964 | "lodash.restparam": "3.6.1" 1965 | } 1966 | }, 1967 | "lodash.restparam": { 1968 | "version": "3.6.1", 1969 | "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", 1970 | "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", 1971 | "dev": true 1972 | }, 1973 | "lodash.toplainobject": { 1974 | "version": "3.0.0", 1975 | "resolved": "https://registry.npmjs.org/lodash.toplainobject/-/lodash.toplainobject-3.0.0.tgz", 1976 | "integrity": "sha1-KHkK2ULSk9eKpmOgfs9/UsoEGY0=", 1977 | "dev": true, 1978 | "requires": { 1979 | "lodash._basecopy": "3.0.1", 1980 | "lodash.keysin": "3.0.8" 1981 | } 1982 | }, 1983 | "longest": { 1984 | "version": "1.0.1", 1985 | "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", 1986 | "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", 1987 | "dev": true 1988 | }, 1989 | "loose-envify": { 1990 | "version": "1.4.0", 1991 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 1992 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 1993 | "dev": true, 1994 | "requires": { 1995 | "js-tokens": "4.0.0" 1996 | }, 1997 | "dependencies": { 1998 | "js-tokens": { 1999 | "version": "4.0.0", 2000 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 2001 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 2002 | "dev": true 2003 | } 2004 | } 2005 | }, 2006 | "lru-cache": { 2007 | "version": "4.1.3", 2008 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", 2009 | "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", 2010 | "dev": true, 2011 | "requires": { 2012 | "pseudomap": "1.0.2", 2013 | "yallist": "2.1.2" 2014 | } 2015 | }, 2016 | "minimatch": { 2017 | "version": "3.0.4", 2018 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 2019 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 2020 | "dev": true, 2021 | "requires": { 2022 | "brace-expansion": "1.1.11" 2023 | } 2024 | }, 2025 | "minimist": { 2026 | "version": "1.2.0", 2027 | "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 2028 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", 2029 | "dev": true 2030 | }, 2031 | "mkdirp": { 2032 | "version": "0.5.1", 2033 | "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 2034 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 2035 | "dev": true, 2036 | "requires": { 2037 | "minimist": "0.0.8" 2038 | }, 2039 | "dependencies": { 2040 | "minimist": { 2041 | "version": "0.0.8", 2042 | "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 2043 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 2044 | "dev": true 2045 | } 2046 | } 2047 | }, 2048 | "mout": { 2049 | "version": "1.1.0", 2050 | "resolved": "https://registry.npmjs.org/mout/-/mout-1.1.0.tgz", 2051 | "integrity": "sha512-XsP0vf4As6BfqglxZqbqQ8SR6KQot2AgxvR0gG+WtUkf90vUXchMOZQtPf/Hml1rEffJupqL/tIrU6EYhsUQjw==", 2052 | "dev": true 2053 | }, 2054 | "ms": { 2055 | "version": "2.0.0", 2056 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 2057 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 2058 | "dev": true 2059 | }, 2060 | "multiline": { 2061 | "version": "1.0.2", 2062 | "resolved": "http://registry.npmjs.org/multiline/-/multiline-1.0.2.tgz", 2063 | "integrity": "sha1-abHyX/B00oKJBPJE3dBrfZbvbJM=", 2064 | "dev": true, 2065 | "requires": { 2066 | "strip-indent": "1.0.1" 2067 | } 2068 | }, 2069 | "mute-stream": { 2070 | "version": "0.0.5", 2071 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", 2072 | "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", 2073 | "dev": true 2074 | }, 2075 | "next-tick": { 2076 | "version": "1.0.0", 2077 | "resolved": "http://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", 2078 | "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", 2079 | "dev": true 2080 | }, 2081 | "nopt": { 2082 | "version": "4.0.1", 2083 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", 2084 | "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", 2085 | "dev": true, 2086 | "requires": { 2087 | "abbrev": "1.1.1", 2088 | "osenv": "0.1.5" 2089 | } 2090 | }, 2091 | "npm-path": { 2092 | "version": "1.1.0", 2093 | "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-1.1.0.tgz", 2094 | "integrity": "sha1-BHSuAEGcMn1UcBt88s0F3Ii+EUA=", 2095 | "dev": true, 2096 | "requires": { 2097 | "which": "1.3.1" 2098 | } 2099 | }, 2100 | "npm-run": { 2101 | "version": "2.0.0", 2102 | "resolved": "https://registry.npmjs.org/npm-run/-/npm-run-2.0.0.tgz", 2103 | "integrity": "sha1-KN/ArV4uRv4ISOK9WN3wAue3PBU=", 2104 | "dev": true, 2105 | "requires": { 2106 | "minimist": "1.2.0", 2107 | "npm-path": "1.1.0", 2108 | "npm-which": "2.0.0", 2109 | "serializerr": "1.0.3", 2110 | "spawn-sync": "1.0.15", 2111 | "sync-exec": "0.5.0" 2112 | } 2113 | }, 2114 | "npm-which": { 2115 | "version": "2.0.0", 2116 | "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-2.0.0.tgz", 2117 | "integrity": "sha1-DEaYIWC3gwk2YdHQG9RJbS/qu6w=", 2118 | "dev": true, 2119 | "requires": { 2120 | "commander": "2.17.1", 2121 | "npm-path": "1.1.0", 2122 | "which": "1.3.1" 2123 | } 2124 | }, 2125 | "number-is-nan": { 2126 | "version": "1.0.1", 2127 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 2128 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", 2129 | "dev": true 2130 | }, 2131 | "object-assign": { 2132 | "version": "4.1.1", 2133 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 2134 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 2135 | "dev": true 2136 | }, 2137 | "object-keys": { 2138 | "version": "1.0.12", 2139 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", 2140 | "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", 2141 | "dev": true 2142 | }, 2143 | "once": { 2144 | "version": "1.4.0", 2145 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2146 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 2147 | "dev": true, 2148 | "requires": { 2149 | "wrappy": "1.0.2" 2150 | } 2151 | }, 2152 | "onetime": { 2153 | "version": "1.1.0", 2154 | "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", 2155 | "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", 2156 | "dev": true 2157 | }, 2158 | "optimist": { 2159 | "version": "0.6.1", 2160 | "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", 2161 | "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", 2162 | "dev": true, 2163 | "requires": { 2164 | "minimist": "0.0.10", 2165 | "wordwrap": "0.0.3" 2166 | }, 2167 | "dependencies": { 2168 | "minimist": { 2169 | "version": "0.0.10", 2170 | "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", 2171 | "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", 2172 | "dev": true 2173 | } 2174 | } 2175 | }, 2176 | "optionator": { 2177 | "version": "0.6.0", 2178 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.6.0.tgz", 2179 | "integrity": "sha1-tj7Lvw4xX61LyYJ7Rdx7pFKE/LY=", 2180 | "dev": true, 2181 | "requires": { 2182 | "deep-is": "0.1.3", 2183 | "fast-levenshtein": "1.0.7", 2184 | "levn": "0.2.5", 2185 | "prelude-ls": "1.1.2", 2186 | "type-check": "0.3.2", 2187 | "wordwrap": "0.0.3" 2188 | } 2189 | }, 2190 | "os-homedir": { 2191 | "version": "1.0.2", 2192 | "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", 2193 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", 2194 | "dev": true 2195 | }, 2196 | "os-locale": { 2197 | "version": "1.4.0", 2198 | "resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", 2199 | "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", 2200 | "dev": true, 2201 | "requires": { 2202 | "lcid": "1.0.0" 2203 | } 2204 | }, 2205 | "os-shim": { 2206 | "version": "0.1.3", 2207 | "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz", 2208 | "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=", 2209 | "dev": true 2210 | }, 2211 | "os-tmpdir": { 2212 | "version": "1.0.2", 2213 | "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 2214 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", 2215 | "dev": true 2216 | }, 2217 | "osenv": { 2218 | "version": "0.1.5", 2219 | "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", 2220 | "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", 2221 | "dev": true, 2222 | "requires": { 2223 | "os-homedir": "1.0.2", 2224 | "os-tmpdir": "1.0.2" 2225 | } 2226 | }, 2227 | "output-file-sync": { 2228 | "version": "1.1.2", 2229 | "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", 2230 | "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", 2231 | "dev": true, 2232 | "requires": { 2233 | "graceful-fs": "4.1.15", 2234 | "mkdirp": "0.5.1", 2235 | "object-assign": "4.1.1" 2236 | } 2237 | }, 2238 | "p-map": { 2239 | "version": "1.2.0", 2240 | "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", 2241 | "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", 2242 | "dev": true 2243 | }, 2244 | "path-exists": { 2245 | "version": "1.0.0", 2246 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-1.0.0.tgz", 2247 | "integrity": "sha1-1aiZjrce83p0w06w2eum6HjuoIE=", 2248 | "dev": true 2249 | }, 2250 | "path-is-absolute": { 2251 | "version": "1.0.1", 2252 | "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2253 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 2254 | "dev": true 2255 | }, 2256 | "path-is-inside": { 2257 | "version": "1.0.2", 2258 | "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", 2259 | "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", 2260 | "dev": true 2261 | }, 2262 | "path-parse": { 2263 | "version": "1.0.6", 2264 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 2265 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", 2266 | "dev": true 2267 | }, 2268 | "pify": { 2269 | "version": "3.0.0", 2270 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", 2271 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", 2272 | "dev": true 2273 | }, 2274 | "pinkie": { 2275 | "version": "2.0.4", 2276 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", 2277 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", 2278 | "dev": true 2279 | }, 2280 | "pinkie-promise": { 2281 | "version": "2.0.1", 2282 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", 2283 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", 2284 | "dev": true, 2285 | "requires": { 2286 | "pinkie": "2.0.4" 2287 | } 2288 | }, 2289 | "pkg-config": { 2290 | "version": "1.1.1", 2291 | "resolved": "https://registry.npmjs.org/pkg-config/-/pkg-config-1.1.1.tgz", 2292 | "integrity": "sha1-VX7yLXPaPIg3EHdmxS6tq94pj+Q=", 2293 | "dev": true, 2294 | "requires": { 2295 | "debug-log": "1.0.1", 2296 | "find-root": "1.1.0", 2297 | "xtend": "4.0.1" 2298 | }, 2299 | "dependencies": { 2300 | "find-root": { 2301 | "version": "1.1.0", 2302 | "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", 2303 | "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", 2304 | "dev": true 2305 | } 2306 | } 2307 | }, 2308 | "prelude-ls": { 2309 | "version": "1.1.2", 2310 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 2311 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", 2312 | "dev": true 2313 | }, 2314 | "private": { 2315 | "version": "0.1.8", 2316 | "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", 2317 | "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", 2318 | "dev": true 2319 | }, 2320 | "process-nextick-args": { 2321 | "version": "2.0.0", 2322 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", 2323 | "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", 2324 | "dev": true 2325 | }, 2326 | "proto-list": { 2327 | "version": "1.2.4", 2328 | "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", 2329 | "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", 2330 | "dev": true 2331 | }, 2332 | "protochain": { 2333 | "version": "1.0.5", 2334 | "resolved": "https://registry.npmjs.org/protochain/-/protochain-1.0.5.tgz", 2335 | "integrity": "sha1-mRxAfpneJkqt+PgVBLXn+ve/omA=", 2336 | "dev": true 2337 | }, 2338 | "pseudomap": { 2339 | "version": "1.0.2", 2340 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", 2341 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", 2342 | "dev": true 2343 | }, 2344 | "q": { 2345 | "version": "1.5.1", 2346 | "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", 2347 | "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", 2348 | "dev": true 2349 | }, 2350 | "readable-stream": { 2351 | "version": "2.3.6", 2352 | "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 2353 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 2354 | "dev": true, 2355 | "requires": { 2356 | "core-util-is": "1.0.2", 2357 | "inherits": "2.0.3", 2358 | "isarray": "1.0.0", 2359 | "process-nextick-args": "2.0.0", 2360 | "safe-buffer": "5.1.2", 2361 | "string_decoder": "1.1.1", 2362 | "util-deprecate": "1.0.2" 2363 | } 2364 | }, 2365 | "readline2": { 2366 | "version": "1.0.1", 2367 | "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", 2368 | "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", 2369 | "dev": true, 2370 | "requires": { 2371 | "code-point-at": "1.1.0", 2372 | "is-fullwidth-code-point": "1.0.0", 2373 | "mute-stream": "0.0.5" 2374 | } 2375 | }, 2376 | "recast": { 2377 | "version": "0.10.33", 2378 | "resolved": "http://registry.npmjs.org/recast/-/recast-0.10.33.tgz", 2379 | "integrity": "sha1-lCgI96oBbx+nFCxGHX5XBKqo1pc=", 2380 | "dev": true, 2381 | "requires": { 2382 | "ast-types": "0.8.12", 2383 | "esprima-fb": "15001.1001.0-dev-harmony-fb", 2384 | "private": "0.1.8", 2385 | "source-map": "0.5.7" 2386 | }, 2387 | "dependencies": { 2388 | "ast-types": { 2389 | "version": "0.8.12", 2390 | "resolved": "http://registry.npmjs.org/ast-types/-/ast-types-0.8.12.tgz", 2391 | "integrity": "sha1-oNkOQ1G7iHcWyD/WN+v4GK9K38w=", 2392 | "dev": true 2393 | }, 2394 | "esprima-fb": { 2395 | "version": "15001.1001.0-dev-harmony-fb", 2396 | "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", 2397 | "integrity": "sha1-Q761fsJujPI3092LM+QlM1d/Jlk=", 2398 | "dev": true 2399 | }, 2400 | "source-map": { 2401 | "version": "0.5.7", 2402 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 2403 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 2404 | "dev": true 2405 | } 2406 | } 2407 | }, 2408 | "regenerate": { 2409 | "version": "1.4.0", 2410 | "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", 2411 | "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", 2412 | "dev": true 2413 | }, 2414 | "regenerator": { 2415 | "version": "0.8.40", 2416 | "resolved": "https://registry.npmjs.org/regenerator/-/regenerator-0.8.40.tgz", 2417 | "integrity": "sha1-oORXxY69uuV1yfjNdRJ+k3VkNdg=", 2418 | "dev": true, 2419 | "requires": { 2420 | "commoner": "0.10.8", 2421 | "defs": "1.1.1", 2422 | "esprima-fb": "15001.1001.0-dev-harmony-fb", 2423 | "private": "0.1.8", 2424 | "recast": "0.10.33", 2425 | "through": "2.3.8" 2426 | }, 2427 | "dependencies": { 2428 | "esprima-fb": { 2429 | "version": "15001.1001.0-dev-harmony-fb", 2430 | "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", 2431 | "integrity": "sha1-Q761fsJujPI3092LM+QlM1d/Jlk=", 2432 | "dev": true 2433 | } 2434 | } 2435 | }, 2436 | "regenerator-runtime": { 2437 | "version": "0.11.1", 2438 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", 2439 | "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", 2440 | "dev": true 2441 | }, 2442 | "regexpu": { 2443 | "version": "1.3.0", 2444 | "resolved": "https://registry.npmjs.org/regexpu/-/regexpu-1.3.0.tgz", 2445 | "integrity": "sha1-5TTcmRqeWEYFDJjebX3UpVyeoW0=", 2446 | "dev": true, 2447 | "requires": { 2448 | "esprima": "2.7.3", 2449 | "recast": "0.10.33", 2450 | "regenerate": "1.4.0", 2451 | "regjsgen": "0.2.0", 2452 | "regjsparser": "0.1.5" 2453 | }, 2454 | "dependencies": { 2455 | "esprima": { 2456 | "version": "2.7.3", 2457 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", 2458 | "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", 2459 | "dev": true 2460 | } 2461 | } 2462 | }, 2463 | "regjsgen": { 2464 | "version": "0.2.0", 2465 | "resolved": "http://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", 2466 | "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", 2467 | "dev": true 2468 | }, 2469 | "regjsparser": { 2470 | "version": "0.1.5", 2471 | "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", 2472 | "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", 2473 | "dev": true, 2474 | "requires": { 2475 | "jsesc": "0.5.0" 2476 | } 2477 | }, 2478 | "repeat-string": { 2479 | "version": "1.6.1", 2480 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", 2481 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", 2482 | "dev": true 2483 | }, 2484 | "repeating": { 2485 | "version": "1.1.3", 2486 | "resolved": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", 2487 | "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", 2488 | "dev": true, 2489 | "requires": { 2490 | "is-finite": "1.0.2" 2491 | } 2492 | }, 2493 | "resolve": { 2494 | "version": "1.8.1", 2495 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", 2496 | "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", 2497 | "dev": true, 2498 | "requires": { 2499 | "path-parse": "1.0.6" 2500 | } 2501 | }, 2502 | "restore-cursor": { 2503 | "version": "1.0.1", 2504 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", 2505 | "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", 2506 | "dev": true, 2507 | "requires": { 2508 | "exit-hook": "1.1.1", 2509 | "onetime": "1.1.0" 2510 | } 2511 | }, 2512 | "right-align": { 2513 | "version": "0.1.3", 2514 | "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", 2515 | "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", 2516 | "dev": true, 2517 | "requires": { 2518 | "align-text": "0.1.4" 2519 | } 2520 | }, 2521 | "rimraf": { 2522 | "version": "2.6.2", 2523 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", 2524 | "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", 2525 | "dev": true, 2526 | "requires": { 2527 | "glob": "7.1.3" 2528 | } 2529 | }, 2530 | "rocambole": { 2531 | "version": "0.7.0", 2532 | "resolved": "https://registry.npmjs.org/rocambole/-/rocambole-0.7.0.tgz", 2533 | "integrity": "sha1-9seVBVF9xCtvuECEK4uVOw+WhYU=", 2534 | "dev": true, 2535 | "requires": { 2536 | "esprima": "2.7.3" 2537 | }, 2538 | "dependencies": { 2539 | "esprima": { 2540 | "version": "2.7.3", 2541 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", 2542 | "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", 2543 | "dev": true 2544 | } 2545 | } 2546 | }, 2547 | "rocambole-indent": { 2548 | "version": "2.0.4", 2549 | "resolved": "https://registry.npmjs.org/rocambole-indent/-/rocambole-indent-2.0.4.tgz", 2550 | "integrity": "sha1-oYokl3ygQAuGHapGMehh3LUtCFw=", 2551 | "dev": true, 2552 | "requires": { 2553 | "debug": "2.6.9", 2554 | "mout": "0.11.1", 2555 | "rocambole-token": "1.2.1" 2556 | }, 2557 | "dependencies": { 2558 | "mout": { 2559 | "version": "0.11.1", 2560 | "resolved": "https://registry.npmjs.org/mout/-/mout-0.11.1.tgz", 2561 | "integrity": "sha1-ujYR318OWx/7/QEWa48C0fX6K5k=", 2562 | "dev": true 2563 | } 2564 | } 2565 | }, 2566 | "rocambole-linebreak": { 2567 | "version": "1.0.2", 2568 | "resolved": "https://registry.npmjs.org/rocambole-linebreak/-/rocambole-linebreak-1.0.2.tgz", 2569 | "integrity": "sha1-A2IVFbQ7RyHJflocG8paA2Y2jy8=", 2570 | "dev": true, 2571 | "requires": { 2572 | "debug": "2.6.9", 2573 | "rocambole-token": "1.2.1", 2574 | "semver": "4.3.6" 2575 | } 2576 | }, 2577 | "rocambole-node": { 2578 | "version": "1.0.0", 2579 | "resolved": "https://registry.npmjs.org/rocambole-node/-/rocambole-node-1.0.0.tgz", 2580 | "integrity": "sha1-21tJ3nQHsAgN1RSHLyjjk9D3/z8=", 2581 | "dev": true 2582 | }, 2583 | "rocambole-token": { 2584 | "version": "1.2.1", 2585 | "resolved": "https://registry.npmjs.org/rocambole-token/-/rocambole-token-1.2.1.tgz", 2586 | "integrity": "sha1-x4XfdCjcPLJ614lwR71SOMwHDTU=", 2587 | "dev": true 2588 | }, 2589 | "rocambole-whitespace": { 2590 | "version": "1.0.0", 2591 | "resolved": "https://registry.npmjs.org/rocambole-whitespace/-/rocambole-whitespace-1.0.0.tgz", 2592 | "integrity": "sha1-YzMJSSVrKZQfWbGQRZ+ZnGsdO/k=", 2593 | "dev": true, 2594 | "requires": { 2595 | "debug": "2.6.9", 2596 | "repeat-string": "1.6.1", 2597 | "rocambole-token": "1.2.1" 2598 | } 2599 | }, 2600 | "run-async": { 2601 | "version": "0.1.0", 2602 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", 2603 | "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", 2604 | "dev": true, 2605 | "requires": { 2606 | "once": "1.4.0" 2607 | } 2608 | }, 2609 | "run-parallel": { 2610 | "version": "1.1.9", 2611 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", 2612 | "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", 2613 | "dev": true 2614 | }, 2615 | "rx-lite": { 2616 | "version": "3.1.2", 2617 | "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", 2618 | "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", 2619 | "dev": true 2620 | }, 2621 | "safe-buffer": { 2622 | "version": "5.1.2", 2623 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 2624 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 2625 | "dev": true 2626 | }, 2627 | "safer-buffer": { 2628 | "version": "2.1.2", 2629 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 2630 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 2631 | "dev": true 2632 | }, 2633 | "semver": { 2634 | "version": "4.3.6", 2635 | "resolved": "http://registry.npmjs.org/semver/-/semver-4.3.6.tgz", 2636 | "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", 2637 | "dev": true 2638 | }, 2639 | "serializerr": { 2640 | "version": "1.0.3", 2641 | "resolved": "https://registry.npmjs.org/serializerr/-/serializerr-1.0.3.tgz", 2642 | "integrity": "sha1-EtTFqhw/+49tHcXzlaqUVVacP5E=", 2643 | "dev": true, 2644 | "requires": { 2645 | "protochain": "1.0.5" 2646 | } 2647 | }, 2648 | "shebang-regex": { 2649 | "version": "1.0.0", 2650 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 2651 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", 2652 | "dev": true 2653 | }, 2654 | "shelljs": { 2655 | "version": "0.5.3", 2656 | "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.5.3.tgz", 2657 | "integrity": "sha1-xUmCuZbHbvDB5rWfvcWCX1txMRM=", 2658 | "dev": true 2659 | }, 2660 | "sigmund": { 2661 | "version": "1.0.1", 2662 | "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", 2663 | "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", 2664 | "dev": true 2665 | }, 2666 | "simple-fmt": { 2667 | "version": "0.1.0", 2668 | "resolved": "https://registry.npmjs.org/simple-fmt/-/simple-fmt-0.1.0.tgz", 2669 | "integrity": "sha1-GRv1ZqWeZTBILLJatTtKjchcOms=", 2670 | "dev": true 2671 | }, 2672 | "simple-is": { 2673 | "version": "0.2.0", 2674 | "resolved": "https://registry.npmjs.org/simple-is/-/simple-is-0.2.0.tgz", 2675 | "integrity": "sha1-Krt1qt453rXMgVzhDmGRFkhQuvA=", 2676 | "dev": true 2677 | }, 2678 | "slash": { 2679 | "version": "1.0.0", 2680 | "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", 2681 | "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", 2682 | "dev": true 2683 | }, 2684 | "source-map": { 2685 | "version": "0.6.1", 2686 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2687 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 2688 | "dev": true 2689 | }, 2690 | "source-map-support": { 2691 | "version": "0.2.10", 2692 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.2.10.tgz", 2693 | "integrity": "sha1-6lo5AKHByyUJagrozFwrSxDe09w=", 2694 | "dev": true, 2695 | "requires": { 2696 | "source-map": "0.1.32" 2697 | }, 2698 | "dependencies": { 2699 | "source-map": { 2700 | "version": "0.1.32", 2701 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz", 2702 | "integrity": "sha1-yLbBZ3l7pHQKjqMyUhYv8IWRsmY=", 2703 | "dev": true, 2704 | "requires": { 2705 | "amdefine": "1.0.1" 2706 | } 2707 | } 2708 | } 2709 | }, 2710 | "spawn-sync": { 2711 | "version": "1.0.15", 2712 | "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz", 2713 | "integrity": "sha1-sAeZVX63+wyDdsKdROih6mfldHY=", 2714 | "dev": true, 2715 | "requires": { 2716 | "concat-stream": "1.6.2", 2717 | "os-shim": "0.1.3" 2718 | } 2719 | }, 2720 | "sprintf-js": { 2721 | "version": "1.0.3", 2722 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 2723 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 2724 | "dev": true 2725 | }, 2726 | "stable": { 2727 | "version": "0.1.8", 2728 | "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", 2729 | "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", 2730 | "dev": true 2731 | }, 2732 | "standard": { 2733 | "version": "5.4.1", 2734 | "resolved": "http://registry.npmjs.org/standard/-/standard-5.4.1.tgz", 2735 | "integrity": "sha1-LwE5ErJ5Tdswu6qJ3BP7OpkMxys=", 2736 | "dev": true, 2737 | "requires": { 2738 | "eslint-config-standard": "4.4.0", 2739 | "eslint-config-standard-react": "1.2.1", 2740 | "eslint-plugin-react": "3.16.1", 2741 | "eslint-plugin-standard": "1.3.3", 2742 | "standard-engine": "2.2.5", 2743 | "standard-format": "1.6.10" 2744 | } 2745 | }, 2746 | "standard-engine": { 2747 | "version": "2.2.5", 2748 | "resolved": "http://registry.npmjs.org/standard-engine/-/standard-engine-2.2.5.tgz", 2749 | "integrity": "sha1-ornUQZ9kiiIbjReCP7dFQG83w04=", 2750 | "dev": true, 2751 | "requires": { 2752 | "defaults": "1.0.3", 2753 | "deglob": "1.1.2", 2754 | "dezalgo": "1.0.3", 2755 | "eslint": "1.9.0", 2756 | "find-root": "0.1.2", 2757 | "get-stdin": "4.0.1", 2758 | "minimist": "1.2.0", 2759 | "multiline": "1.0.2", 2760 | "pkg-config": "1.1.1", 2761 | "xtend": "4.0.1" 2762 | } 2763 | }, 2764 | "standard-format": { 2765 | "version": "1.6.10", 2766 | "resolved": "https://registry.npmjs.org/standard-format/-/standard-format-1.6.10.tgz", 2767 | "integrity": "sha1-sYPI+DfI05OHmPPQlD5dgHoboD8=", 2768 | "dev": true, 2769 | "requires": { 2770 | "deglob": "1.1.2", 2771 | "esformatter": "0.8.2", 2772 | "esformatter-eol-last": "1.0.0", 2773 | "esformatter-jsx": "2.3.11", 2774 | "esformatter-literal-notation": "1.0.1", 2775 | "esformatter-quotes": "1.1.0", 2776 | "esformatter-semicolon-first": "1.2.0", 2777 | "esformatter-spaced-lined-comment": "2.0.1", 2778 | "minimist": "1.2.0", 2779 | "stdin": "0.0.1" 2780 | } 2781 | }, 2782 | "stdin": { 2783 | "version": "0.0.1", 2784 | "resolved": "https://registry.npmjs.org/stdin/-/stdin-0.0.1.tgz", 2785 | "integrity": "sha1-0wQZgarsPf28d6GzjWNy449ftx4=", 2786 | "dev": true 2787 | }, 2788 | "string-width": { 2789 | "version": "1.0.2", 2790 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 2791 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 2792 | "dev": true, 2793 | "requires": { 2794 | "code-point-at": "1.1.0", 2795 | "is-fullwidth-code-point": "1.0.0", 2796 | "strip-ansi": "3.0.1" 2797 | } 2798 | }, 2799 | "string.prototype.endswith": { 2800 | "version": "0.2.0", 2801 | "resolved": "https://registry.npmjs.org/string.prototype.endswith/-/string.prototype.endswith-0.2.0.tgz", 2802 | "integrity": "sha1-oZwg3uUamHd+mkfhDwm+OTubunU=", 2803 | "dev": true 2804 | }, 2805 | "string_decoder": { 2806 | "version": "1.1.1", 2807 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 2808 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 2809 | "dev": true, 2810 | "requires": { 2811 | "safe-buffer": "5.1.2" 2812 | } 2813 | }, 2814 | "stringmap": { 2815 | "version": "0.2.2", 2816 | "resolved": "https://registry.npmjs.org/stringmap/-/stringmap-0.2.2.tgz", 2817 | "integrity": "sha1-VWwTeyWPlCuHdvWy71gqoGnX0bE=", 2818 | "dev": true 2819 | }, 2820 | "stringset": { 2821 | "version": "0.2.1", 2822 | "resolved": "https://registry.npmjs.org/stringset/-/stringset-0.2.1.tgz", 2823 | "integrity": "sha1-7yWcTjSTRDd/zRyRPdLoSMnAQrU=", 2824 | "dev": true 2825 | }, 2826 | "strip-ansi": { 2827 | "version": "3.0.1", 2828 | "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 2829 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 2830 | "dev": true, 2831 | "requires": { 2832 | "ansi-regex": "2.1.1" 2833 | } 2834 | }, 2835 | "strip-indent": { 2836 | "version": "1.0.1", 2837 | "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", 2838 | "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", 2839 | "dev": true, 2840 | "requires": { 2841 | "get-stdin": "4.0.1" 2842 | } 2843 | }, 2844 | "strip-json-comments": { 2845 | "version": "1.0.4", 2846 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", 2847 | "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", 2848 | "dev": true 2849 | }, 2850 | "supports-color": { 2851 | "version": "2.0.0", 2852 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 2853 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", 2854 | "dev": true 2855 | }, 2856 | "sync-exec": { 2857 | "version": "0.5.0", 2858 | "resolved": "https://registry.npmjs.org/sync-exec/-/sync-exec-0.5.0.tgz", 2859 | "integrity": "sha1-P3JY5KW6FyRTgZCfpqb2z1BuFmE=", 2860 | "dev": true 2861 | }, 2862 | "text-table": { 2863 | "version": "0.2.0", 2864 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 2865 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 2866 | "dev": true 2867 | }, 2868 | "through": { 2869 | "version": "2.3.8", 2870 | "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", 2871 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 2872 | "dev": true 2873 | }, 2874 | "to-double-quotes": { 2875 | "version": "2.0.0", 2876 | "resolved": "https://registry.npmjs.org/to-double-quotes/-/to-double-quotes-2.0.0.tgz", 2877 | "integrity": "sha1-qvIx1vqUiUn4GTAburRITYWI5Kc=", 2878 | "dev": true 2879 | }, 2880 | "to-fast-properties": { 2881 | "version": "1.0.3", 2882 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", 2883 | "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", 2884 | "dev": true 2885 | }, 2886 | "to-single-quotes": { 2887 | "version": "2.0.1", 2888 | "resolved": "https://registry.npmjs.org/to-single-quotes/-/to-single-quotes-2.0.1.tgz", 2889 | "integrity": "sha1-fMKRUfD18sQZRvEZ9ZMv5VQXASU=", 2890 | "dev": true 2891 | }, 2892 | "trim-right": { 2893 | "version": "1.0.1", 2894 | "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", 2895 | "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", 2896 | "dev": true 2897 | }, 2898 | "try-resolve": { 2899 | "version": "1.0.1", 2900 | "resolved": "https://registry.npmjs.org/try-resolve/-/try-resolve-1.0.1.tgz", 2901 | "integrity": "sha1-z95vq9ctY+V5fPqrhzq76OcA6RI=", 2902 | "dev": true 2903 | }, 2904 | "tryor": { 2905 | "version": "0.1.2", 2906 | "resolved": "https://registry.npmjs.org/tryor/-/tryor-0.1.2.tgz", 2907 | "integrity": "sha1-gUXkynyv9ArN48z5Rui4u3W0Fys=", 2908 | "dev": true 2909 | }, 2910 | "type-check": { 2911 | "version": "0.3.2", 2912 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 2913 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", 2914 | "dev": true, 2915 | "requires": { 2916 | "prelude-ls": "1.1.2" 2917 | } 2918 | }, 2919 | "typedarray": { 2920 | "version": "0.0.6", 2921 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 2922 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", 2923 | "dev": true 2924 | }, 2925 | "uglify-js": { 2926 | "version": "3.4.9", 2927 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", 2928 | "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", 2929 | "dev": true, 2930 | "optional": true, 2931 | "requires": { 2932 | "commander": "2.17.1", 2933 | "source-map": "0.6.1" 2934 | } 2935 | }, 2936 | "uniq": { 2937 | "version": "1.0.1", 2938 | "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", 2939 | "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", 2940 | "dev": true 2941 | }, 2942 | "user-home": { 2943 | "version": "2.0.0", 2944 | "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", 2945 | "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", 2946 | "dev": true, 2947 | "requires": { 2948 | "os-homedir": "1.0.2" 2949 | } 2950 | }, 2951 | "util-deprecate": { 2952 | "version": "1.0.2", 2953 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2954 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 2955 | "dev": true 2956 | }, 2957 | "which": { 2958 | "version": "1.3.1", 2959 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 2960 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 2961 | "dev": true, 2962 | "requires": { 2963 | "isexe": "2.0.0" 2964 | } 2965 | }, 2966 | "window-size": { 2967 | "version": "0.1.4", 2968 | "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", 2969 | "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=", 2970 | "dev": true 2971 | }, 2972 | "wordwrap": { 2973 | "version": "0.0.3", 2974 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", 2975 | "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", 2976 | "dev": true 2977 | }, 2978 | "wrappy": { 2979 | "version": "1.0.2", 2980 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2981 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 2982 | "dev": true 2983 | }, 2984 | "write": { 2985 | "version": "0.2.1", 2986 | "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", 2987 | "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", 2988 | "dev": true, 2989 | "requires": { 2990 | "mkdirp": "0.5.1" 2991 | } 2992 | }, 2993 | "xml-escape": { 2994 | "version": "1.0.0", 2995 | "resolved": "https://registry.npmjs.org/xml-escape/-/xml-escape-1.0.0.tgz", 2996 | "integrity": "sha1-AJY9aXsq3wwYXE4E5zF0upsojrI=", 2997 | "dev": true 2998 | }, 2999 | "xtend": { 3000 | "version": "4.0.1", 3001 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", 3002 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", 3003 | "dev": true 3004 | }, 3005 | "y18n": { 3006 | "version": "3.2.1", 3007 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", 3008 | "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", 3009 | "dev": true 3010 | }, 3011 | "yallist": { 3012 | "version": "2.1.2", 3013 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", 3014 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", 3015 | "dev": true 3016 | }, 3017 | "yargs": { 3018 | "version": "3.27.0", 3019 | "resolved": "http://registry.npmjs.org/yargs/-/yargs-3.27.0.tgz", 3020 | "integrity": "sha1-ISBUaTFuk5Ex1Z8toMbX+YIh6kA=", 3021 | "dev": true, 3022 | "requires": { 3023 | "camelcase": "1.2.1", 3024 | "cliui": "2.1.0", 3025 | "decamelize": "1.2.0", 3026 | "os-locale": "1.4.0", 3027 | "window-size": "0.1.4", 3028 | "y18n": "3.2.1" 3029 | } 3030 | } 3031 | } 3032 | } 3033 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "toggle-quotes", 3 | "version": "1.1.4", 4 | "main": "./lib/main", 5 | "description": "Quickly toggle between single and double quotes", 6 | "repository": "https://github.com/atom/toggle-quotes", 7 | "license": "MIT", 8 | "activationCommands": { 9 | "atom-text-editor": [ 10 | "toggle-quotes:toggle" 11 | ] 12 | }, 13 | "engines": { 14 | "atom": "^1.0.8" 15 | }, 16 | "devDependencies": { 17 | "standard": "^5.1.0" 18 | }, 19 | "standard": { 20 | "globals": [ 21 | "advanceClock", 22 | "atom", 23 | "beforeEach", 24 | "expect", 25 | "describe", 26 | "it", 27 | "jasmine", 28 | "MouseEvent", 29 | "runs", 30 | "spyOn", 31 | "waits", 32 | "waitsForPromise" 33 | ] 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /spec/toggle-quotes-spec.js: -------------------------------------------------------------------------------- 1 | 'use babel' 2 | 3 | import {toggleQuotes} from '../lib/toggle-quotes' 4 | import {raw as r} from '../lib/string-helper' 5 | 6 | describe('ToggleQuotes', () => { 7 | beforeEach(() => { 8 | atom.config.set('toggle-quotes.quoteCharacters', '\'"') 9 | }) 10 | 11 | describe('toggleQuotes(editor) js', () => { 12 | let editor = null 13 | 14 | beforeEach(() => { 15 | waitsForPromise(() => { 16 | return Promise.all([ 17 | atom.packages.activatePackage('language-javascript'), 18 | atom.packages.activatePackage('language-json'), 19 | atom.packages.activatePackage('language-python'), 20 | atom.workspace.open() 21 | ]) 22 | }) 23 | 24 | runs(() => { 25 | editor = atom.workspace.getActiveTextEditor() 26 | editor.setText( 27 | r`console.log("Hello World") 28 | console.log('Hello World') 29 | console.log("Hello 'World'") 30 | console.log('Hello "World"') 31 | console.log('') 32 | console.log("boom") 33 | console.log(\`backticks\`)` 34 | ) 35 | editor.setGrammar(atom.grammars.selectGrammar('test.js')) 36 | }) 37 | }) 38 | 39 | describe('when the cursor is not inside a quoted string', () => { 40 | it('does nothing', () => { 41 | expect(() => toggleQuotes(editor)).not.toThrow() 42 | }) 43 | }) 44 | 45 | describe('when the cursor is inside an empty single quoted string', () => { 46 | it('switches the quotes to double', () => { 47 | editor.setCursorBufferPosition([4, 13]) 48 | toggleQuotes(editor) 49 | expect(editor.lineTextForBufferRow(4)).toBe('console.log("")') 50 | expect(editor.getCursorBufferPosition()).toEqual([4, 13]) 51 | }) 52 | }) 53 | 54 | describe('when the cursor is inside a double quoted string', () => { 55 | describe('when using default config', () => { 56 | it('switches the double quotes to single quotes', () => { 57 | editor.setCursorBufferPosition([0, 16]) 58 | toggleQuotes(editor) 59 | expect(editor.lineTextForBufferRow(0)).toBe("console.log('Hello World')") 60 | expect(editor.getCursorBufferPosition()).toEqual([0, 16]) 61 | }) 62 | }) 63 | }) 64 | 65 | describe('when the cursor is barely inside a double quoted string', () => { 66 | describe('when using default config', () => { 67 | it('switches the double quotes to single quotes', () => { 68 | editor.setCursorBufferPosition([5, 13]) 69 | toggleQuotes(editor) 70 | expect(editor.lineTextForBufferRow(5)).toBe(`console.log('boom')`) 71 | expect(editor.getCursorBufferPosition()).toEqual([5, 13]) 72 | }) 73 | }) 74 | }) 75 | 76 | describe('when using custom config of backticks', () => { 77 | it('switches the double quotes to backticks', () => { 78 | atom.config.set('toggle-quotes.quoteCharacters', '\'"`') 79 | editor.setCursorBufferPosition([0, 16]) 80 | toggleQuotes(editor) 81 | expect(editor.lineTextForBufferRow(0)).toBe('console.log(`Hello World`)') 82 | expect(editor.getCursorBufferPosition()).toEqual([0, 16]) 83 | }) 84 | 85 | it('switches backticks to single quotes', () => { 86 | atom.config.set('toggle-quotes.quoteCharacters', '\'"`') 87 | editor.setCursorBufferPosition([6, 18]) 88 | toggleQuotes(editor) 89 | expect(editor.lineTextForBufferRow(6)).toBe('console.log(\'backticks\')') 90 | expect(editor.getCursorBufferPosition()).toEqual([6, 18]) 91 | }) 92 | }) 93 | 94 | describe('when using a scope-specific config override', () => { 95 | it('prefers the scope-specific setting', () => { 96 | atom.config.set('toggle-quotes.quoteCharacters', '\'"~', { scopeSelector: '.source.js' }) 97 | editor.setCursorBufferPosition([0, 16]) 98 | toggleQuotes(editor) 99 | expect(editor.lineTextForBufferRow(0)).toBe('console.log(~Hello World~)') 100 | expect(editor.getCursorBufferPosition()).toEqual([0, 16]) 101 | atom.config.unset('toggle-quotes.quoteCharacters', { scope: '.source.js' }) 102 | }) 103 | 104 | it('does not bleed into the wrong scope', () => { 105 | atom.config.set('toggle-quotes.quoteCharacters', '\'"~', { scopeSelector: '.source.js' }) 106 | editor.setGrammar(atom.grammars.selectGrammar('test.py')) 107 | editor.setCursorBufferPosition([0, 16]) 108 | toggleQuotes(editor) 109 | expect(editor.lineTextForBufferRow(0)).toBe('console.log(\'Hello World\')') 110 | expect(editor.getCursorBufferPosition()).toEqual([0, 16]) 111 | atom.config.unset('toggle-quotes.quoteCharacters', { scope: '.source.js' }) 112 | }) 113 | }) 114 | 115 | describe('when the cursor is inside a single quoted string', () => { 116 | it('switches the quotes to double', () => { 117 | editor.setCursorBufferPosition([1, 16]) 118 | toggleQuotes(editor) 119 | expect(editor.lineTextForBufferRow(1)).toBe('console.log("Hello World")') 120 | expect(editor.getCursorBufferPosition()).toEqual([1, 16]) 121 | }) 122 | }) 123 | 124 | describe('when the cursor is inside a single-quoted string that is nested within a double quoted string', () => { 125 | it('switches the outer quotes to single and escapes the inner quotes', () => { 126 | editor.setCursorBufferPosition([2, 22]) 127 | toggleQuotes(editor) 128 | expect(editor.lineTextForBufferRow(2)).toBe("console.log('Hello \\'World\\'')") 129 | expect(editor.getCursorBufferPosition()).toEqual([2, 22]) 130 | 131 | toggleQuotes(editor) 132 | expect(editor.lineTextForBufferRow(2)).toBe('console.log("Hello \'World\'")') 133 | }) 134 | }) 135 | 136 | describe('when the cursor is inside a double-quoted string that is nested within a single quoted string', () => { 137 | it('switches the outer quotes to double and escapes the inner quotes', () => { 138 | editor.setCursorBufferPosition([3, 22]) 139 | toggleQuotes(editor) 140 | expect(editor.lineTextForBufferRow(3)).toBe('console.log("Hello \\"World\\"")') 141 | expect(editor.getCursorBufferPosition()).toEqual([3, 22]) 142 | 143 | toggleQuotes(editor) 144 | expect(editor.lineTextForBufferRow(3)).toBe("console.log('Hello \"World\"')") 145 | }) 146 | }) 147 | 148 | describe('when the cursor is inside multiple quoted strings', () => { 149 | it('switches the quotes of both quoted strings separately and leaves the cursors where they were, and does so atomically', () => { 150 | editor.setCursorBufferPosition([0, 16]) 151 | editor.addCursorAtBufferPosition([1, 16]) 152 | toggleQuotes(editor) 153 | expect(editor.lineTextForBufferRow(0)).toBe("console.log('Hello World')") 154 | expect(editor.lineTextForBufferRow(1)).toBe('console.log("Hello World")') 155 | expect(editor.getCursors()[0].getBufferPosition()).toEqual([0, 16]) 156 | expect(editor.getCursors()[1].getBufferPosition()).toEqual([1, 16]) 157 | 158 | editor.undo() 159 | expect(editor.lineTextForBufferRow(0)).toBe('console.log("Hello World")') 160 | expect(editor.lineTextForBufferRow(1)).toBe("console.log('Hello World')") 161 | expect(editor.getCursors()[0].getBufferPosition()).toEqual([0, 16]) 162 | expect(editor.getCursors()[1].getBufferPosition()).toEqual([1, 16]) 163 | }) 164 | }) 165 | 166 | describe('when the cursor is on an invalid region', () => { 167 | describe('when it is quoted', () => { 168 | it('toggles the quotes', () => { 169 | editor.setGrammar(atom.grammars.selectGrammar('test.json')) 170 | editor.setText("{'invalid': true}") 171 | editor.setCursorBufferPosition([0, 4]) 172 | toggleQuotes(editor) 173 | expect(editor.getText()).toBe('{"invalid": true}') 174 | }) 175 | }) 176 | 177 | describe('when it is not quoted', () => { 178 | it('does not toggle the quotes', () => { 179 | editor.setGrammar(atom.grammars.selectGrammar('test.json')) 180 | editor.setText('{invalid: true}') 181 | editor.setCursorBufferPosition([0, 4]) 182 | toggleQuotes(editor) 183 | expect(editor.getText()).toBe('{invalid: true}') 184 | }) 185 | }) 186 | }) 187 | 188 | describe('when handling escaped characters', () => { 189 | it('ignores them if they do not match the previous quote character', () => { 190 | editor.setText(`'\\\\ \\" \\a'`) 191 | editor.setCursorBufferPosition([0, 2]) 192 | toggleQuotes(editor) 193 | expect(editor.getText()).toBe(`"\\\\ \\" \\a"`) 194 | }) 195 | 196 | it('unescapes any escaped previous quote characters', () => { 197 | editor.setText(`'don\\'t can\\'t'`) 198 | editor.setCursorBufferPosition([0, 1]) 199 | toggleQuotes(editor) 200 | expect(editor.getText()).toBe(`"don't can't"`) 201 | }) 202 | 203 | it('escapes any unescaped next quote characters', () => { 204 | editor.setText(`'"Hello world"'`) 205 | editor.setCursorBufferPosition([0, 1]) 206 | toggleQuotes(editor) 207 | expect(editor.getText()).toBe(`"\\"Hello world\\""`) 208 | }) 209 | 210 | it('counts escapes correctly', () => { 211 | editor.setText(`'\\\\\\''`) // escaped \ + escaped ' 212 | editor.setCursorBufferPosition([0, 1]) 213 | toggleQuotes(editor) 214 | expect(editor.getText()).toBe(`"\\\\'"`) 215 | 216 | editor.setText(`'\\\\"'`) // escaped \ + regular " 217 | editor.setCursorBufferPosition([0, 1]) 218 | toggleQuotes(editor) 219 | expect(editor.getText()).toBe(`"\\\\\\""`) 220 | }) 221 | }) 222 | }) 223 | 224 | describe('toggleQuotes(editor) python', () => { 225 | let editor = null 226 | 227 | beforeEach(() => { 228 | waitsForPromise(() => { 229 | return atom.packages.activatePackage('language-python') 230 | }) 231 | 232 | waitsForPromise(() => { 233 | return atom.workspace.open() 234 | }) 235 | 236 | runs(() => { 237 | editor = atom.workspace.getActiveTextEditor() 238 | editor.setText( 239 | r`print(u"Hello World") 240 | print(r'')` 241 | ) 242 | editor.setGrammar(atom.grammars.selectGrammar('test.py')) 243 | }) 244 | }) 245 | 246 | describe('when cursor is inside a double quoted unicode string', () => { 247 | it('switches quotes to single excluding unicode character', () => { 248 | editor.setCursorBufferPosition([0, 16]) 249 | toggleQuotes(editor) 250 | expect(editor.lineTextForBufferRow(0)).toBe("print(u'Hello World')") 251 | expect(editor.getCursorBufferPosition()).toEqual([0, 16]) 252 | }) 253 | }) 254 | 255 | describe('when cursor is inside an empty single quoted raw string', () => { 256 | it('switches quotes to double', () => { 257 | editor.setCursorBufferPosition([1, 8]) 258 | toggleQuotes(editor) 259 | expect(editor.lineTextForBufferRow(1)).toBe('print(r"")') 260 | expect(editor.getCursorBufferPosition()).toEqual([1, 8]) 261 | }) 262 | }) 263 | }) 264 | 265 | it('activates when a command is triggered', () => { 266 | let activatePromise = atom.packages.activatePackage('toggle-quotes') 267 | 268 | waitsForPromise(() => { 269 | return atom.workspace.open() 270 | }) 271 | 272 | runs(() => { 273 | let editor = atom.workspace.getActiveTextEditor() 274 | atom.commands.dispatch(atom.views.getView(editor), 'toggle-quotes:toggle') 275 | }) 276 | 277 | waitsForPromise(() => { return activatePromise }) 278 | }) 279 | }) 280 | --------------------------------------------------------------------------------