├── .eslintrc.json ├── .github └── FUNDING.yml ├── .gitignore ├── .opensource └── project.json ├── .vscode ├── extensions.json ├── launch.json └── settings.json ├── .vscodeignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── images └── firebase.png ├── jsconfig.json ├── package-lock.json ├── package.json └── snippets └── snippets.json /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": false, 4 | "commonjs": true, 5 | "es6": true, 6 | "node": true 7 | }, 8 | "parserOptions": { 9 | "ecmaFeatures": { 10 | "jsx": true 11 | }, 12 | "sourceType": "module" 13 | }, 14 | "rules": { 15 | "no-const-assign": "warn", 16 | "no-this-before-super": "warn", 17 | "no-undef": "warn", 18 | "no-unreachable": "warn", 19 | "no-unused-vars": "warn", 20 | "constructor-super": "warn", 21 | "valid-typeof": "warn" 22 | } 23 | } -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | patreon: peterhaddad 4 | 5 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .vscode-test/ 3 | *.vsix 4 | test 5 | -------------------------------------------------------------------------------- /.opensource/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "firebase-firestore-snippets", 3 | "platforms": ["Web"], 4 | "content": "README.md", 5 | "related": ["firebase/firebase-js-sdk"], 6 | "pages": [], 7 | "tabs": [] 8 | } -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | // See http://go.microsoft.com/fwlink/?LinkId=827846 3 | // for the documentation about the extensions.json format 4 | "recommendations": [ 5 | "dbaeumer.vscode-eslint" 6 | ] 7 | } -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | // A launch configuration that launches the extension inside a new window 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | { 6 | "version": "0.2.0", 7 | "configurations": [ 8 | { 9 | "name": "Extension", 10 | "type": "extensionHost", 11 | "request": "launch", 12 | "runtimeExecutable": "${execPath}", 13 | "args": [ 14 | "--extensionDevelopmentPath=${workspaceFolder}" 15 | ] 16 | }, 17 | { 18 | "name": "Extension Tests", 19 | "type": "extensionHost", 20 | "request": "launch", 21 | "runtimeExecutable": "${execPath}", 22 | "args": [ 23 | "--extensionDevelopmentPath=${workspaceFolder}", 24 | "--extensionTestsPath=${workspaceFolder}/test" 25 | ] 26 | } 27 | ] 28 | } -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | // Place your settings in this file to overwrite default and user settings. 2 | { 3 | } -------------------------------------------------------------------------------- /.vscodeignore: -------------------------------------------------------------------------------- 1 | .vscode/** 2 | .vscode-test/** 3 | test/** 4 | .gitignore 5 | jsconfig.json 6 | vsc-extension-quickstart.md 7 | .eslintrc.json 8 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | All notable changes to the "firebase-firestore-snippets" extension will be documented in this file. 3 | 4 | Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. 5 | 6 | ## [Unreleased] 7 | - Initial release -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Charalampos Karypidis 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Firebase 2 | ## VS Code Firebase and Firestore snippets 3 | ------------------- 4 | [![Version](https://vsmarketplacebadge.apphb.com/version-short/peterhdd.firebase-firestore-snippets.svg)](https://marketplace.visualstudio.com/items?itemName=peterhdd.firebase-firestore-snippets) 5 | [![Installs](https://vsmarketplacebadge.apphb.com/installs/peterhdd.firebase-firestore-snippets.svg)](https://marketplace.visualstudio.com/items?itemName=peterhdd.firebase-firestore-snippets) 6 | [![Downloads](https://vsmarketplacebadge.apphb.com/downloads-short/peterhdd.firebase-firestore-snippets.svg)](https://marketplace.visualstudio.com/items?itemName=peterhdd.firebase-firestore-snippets) 7 | 8 | ## Supported Languages 9 | * JavaScript (.js) 10 | * TypeScript (.ts) 11 | * JavaScript React (.jsx) 12 | * TypeScript React (.tsx) 13 | * Html (.html) 14 | * Vue (.vue) 15 | 16 | ## Snippets 17 | 18 | ### Firebase 19 | | Trigger | Description | 20 | | -------: | ------ | 21 | | `fireconfig` | Configure Firebase | 22 | | `firereference` | Get a reference to the firebase service | 23 | | `fireset` | Set data to the firebase database | 24 | | `fireretrieve` | Retrieve data from firebase | 25 | | `fireretrieveloop` | Retrieve data and loop inside the direct children | 26 | | `fireval` | Using `val()` method to retrieve the data inside a listener | 27 | | `fireretrieveonce` | Retrieve data once | 28 | | `firekey` | Create a key and simultaneously retrieve the key | 29 | | `fireupdate` | Updating specific fields | 30 | | `fireremove` | Remove data at a certain location | 31 | | `firetransaction` | firebase transactions | 32 | | `fireorderBychild` | Order results by the value of a specified child key or nested child path | 33 | | `fireorderByvalue` | Order results by child values | 34 | | `fireorderBykey` | Order results by child keys | 35 | | `firelimittofirst` | Sets the maximum number of items to return from the end of the ordered list of results | 36 | | `firelimittolast` | Sets the maximum number of items to return from the beginning of the ordered list of results | 37 | | `firestartAt` | Return items greater than or equal to the specified key or value, depending on the order-by method chosen | 38 | | `fireendat` | Return items less than or equal to the specified key or value, depending on the order-by method chosen | 39 | | `fireequalto` | Return items equal to the specified key or value, depending on the order-by method chosen | 40 | | `fireexists` | Returns true if this dataSnapshot contains any data | 41 | | `firehaschild` | Returns true if this datasnapshot contains the specified child | 42 | | `firehaschildren` | Returns true is this datasnapshot contains any children | 43 | | `firenumchildren` | Returns the number of child properties of this datasnapshot | 44 | | `firedetach` | Removing a listener | 45 | | `firestorageref` |Get a reference to the storage service, which is used to create references in your storage bucket | 46 | | `firestoragechildref` | Create a reference to a location lower in the tree, say `images.jpg` | 47 | | `firestorageurlref` | Create a reference from a Google Cloud Storage URI or https url | 48 | | `firestoragedownloadfile` | Getting the download file from firebase storage | 49 | | `firestoragedeletefile` | Delete a file | 50 | | `firesignupemail` | Authenticate a new user using email and password | 51 | | `firesigninemail` | Sign in an existing user | 52 | | `fireauthstate` | Attach an observer using onAuthStateChanged to retrieve user infomration | 53 | | `firecurrentuser` | Retrieves the currently logged in user | 54 | | `fireuserprofile` | Retrieves the user information | 55 | | `fireupdateprofile` | Updates the user profile | 56 | | `fireproviderinfo` | Retrieves information from sign in provider | 57 | | `fireupdateemail` | Set a user email address, the user must have signed in recently| 58 | | `fireemailverify` | Send an email verification to the user | 59 | | `firesetpass` | Set a user password, the user must have signed in recently | 60 | | `firepassreset` | Send a password reset email to a user | 61 | | `firedeleteuser` | Delete a user account with the delete method | 62 | | `firesignout` | Sign out the user | 63 | | `firegoogleinstance` | Get instance of the google provider | 64 | | `fireprovidersignin` | Sign in with google | 65 | | `firefacebookinstance` | Get instance of facebook provider | 66 | | `firetwitterinstance` | Get instance of twitter provider | 67 | | `firegithubinstance` | Get instance of github provider | 68 | | `firecustomauth` | Sign in the user using custom authentication | 69 | | `fireanonymously` | Sign in the user anonymously | 70 | 71 | ### Firestore 72 | | Trigger | Description | 73 | | -------: | ------- | 74 | | `initializefirestore` | Initialize Cloud Firestore through Firebase | 75 | | `adddatafirestore` | Creating a new collection and document in firestore | 76 | | `setdatafirestore` | Creates or overwrite a single document, use the `set()` method | 77 | | `readdatafirestore` | Read data from a collection in firestore | 78 | | `referencefirestore` | Add firestore reference | 79 | | `updatefirestore` | Update the document in firestore | 80 | | `deletedocfirestore` | Delete a document in firestore | 81 | | `deletefieldfirestore` | Delete a field in firestore document | 82 | | `wherefirestore` | where query in firestore | 83 | | `arraycontainsfirestore` | Using `array-contains` it filters based on array value | 84 | | `limitfirestore` | Retrieves the first three value of the field | 85 | | `ordermultifirestore` | Order by multiple fields in firestore | 86 | | `realtimeupdatefirestore` | Listens for realtime changes on a document using `onSnapshot` | 87 | |`arrayunionfieldfirestore`| Adds an element to an array field| 88 | `arrayremovefieldfirestore`| Remove an element from array field| 89 | |`incrementfieldfirestore`| Increment or decrement a numeric field value| 90 | 91 | -------------------------------------------------------------------------------- /images/firebase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PeterHdd/firebase-firestore-snippets/0adc7b67afe3deaadad7d85363cd9227ad61c336/images/firebase.png -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es6", 5 | "checkJs": true, /* Typecheck .js files. */ 6 | "lib": [ 7 | "es6" 8 | ] 9 | }, 10 | "exclude": [ 11 | "node_modules" 12 | ] 13 | } -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "firebase-firestore-snippets", 3 | "version": "0.0.5", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@types/mocha": { 8 | "version": "2.2.48", 9 | "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.48.tgz", 10 | "integrity": "sha512-nlK/iyETgafGli8Zh9zJVCTicvU3iajSkRwOh3Hhiva598CMqNJ4NcVCGMTGKpGpTYj/9R8RLzS9NAykSSCqGw==", 11 | "dev": true 12 | }, 13 | "@types/node": { 14 | "version": "7.0.69", 15 | "resolved": "https://registry.npmjs.org/@types/node/-/node-7.0.69.tgz", 16 | "integrity": "sha512-S5NC8HV6HnRipg8nC0j30TPl7ktXjRTKqgyINLNe8K/64UJUI8Lq0sRopXC0hProsV2F5ibj8IqPkl1xpGggrw==", 17 | "dev": true 18 | }, 19 | "acorn": { 20 | "version": "5.7.1", 21 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz", 22 | "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==", 23 | "dev": true 24 | }, 25 | "acorn-jsx": { 26 | "version": "3.0.1", 27 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", 28 | "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", 29 | "dev": true, 30 | "requires": { 31 | "acorn": "^3.0.4" 32 | }, 33 | "dependencies": { 34 | "acorn": { 35 | "version": "3.3.0", 36 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", 37 | "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", 38 | "dev": true 39 | } 40 | } 41 | }, 42 | "agent-base": { 43 | "version": "4.3.0", 44 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", 45 | "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", 46 | "dev": true, 47 | "requires": { 48 | "es6-promisify": "^5.0.0" 49 | } 50 | }, 51 | "ajv": { 52 | "version": "5.5.2", 53 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", 54 | "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", 55 | "dev": true, 56 | "requires": { 57 | "co": "^4.6.0", 58 | "fast-deep-equal": "^1.0.0", 59 | "fast-json-stable-stringify": "^2.0.0", 60 | "json-schema-traverse": "^0.3.0" 61 | } 62 | }, 63 | "ajv-keywords": { 64 | "version": "2.1.1", 65 | "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", 66 | "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", 67 | "dev": true 68 | }, 69 | "ansi-escapes": { 70 | "version": "3.1.0", 71 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", 72 | "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", 73 | "dev": true 74 | }, 75 | "ansi-regex": { 76 | "version": "2.1.1", 77 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 78 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 79 | "dev": true 80 | }, 81 | "ansi-styles": { 82 | "version": "2.2.1", 83 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 84 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", 85 | "dev": true 86 | }, 87 | "argparse": { 88 | "version": "1.0.10", 89 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 90 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 91 | "dev": true, 92 | "requires": { 93 | "sprintf-js": "~1.0.2" 94 | } 95 | }, 96 | "array-union": { 97 | "version": "1.0.2", 98 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", 99 | "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", 100 | "dev": true, 101 | "requires": { 102 | "array-uniq": "^1.0.1" 103 | } 104 | }, 105 | "array-uniq": { 106 | "version": "1.0.3", 107 | "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", 108 | "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", 109 | "dev": true 110 | }, 111 | "arrify": { 112 | "version": "1.0.1", 113 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", 114 | "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", 115 | "dev": true 116 | }, 117 | "asn1": { 118 | "version": "0.2.4", 119 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", 120 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", 121 | "dev": true, 122 | "requires": { 123 | "safer-buffer": "~2.1.0" 124 | } 125 | }, 126 | "assert-plus": { 127 | "version": "1.0.0", 128 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 129 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 130 | "dev": true 131 | }, 132 | "asynckit": { 133 | "version": "0.4.0", 134 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 135 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", 136 | "dev": true 137 | }, 138 | "aws-sign2": { 139 | "version": "0.7.0", 140 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 141 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", 142 | "dev": true 143 | }, 144 | "aws4": { 145 | "version": "1.9.1", 146 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", 147 | "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==", 148 | "dev": true 149 | }, 150 | "babel-code-frame": { 151 | "version": "6.26.0", 152 | "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", 153 | "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", 154 | "dev": true, 155 | "requires": { 156 | "chalk": "^1.1.3", 157 | "esutils": "^2.0.2", 158 | "js-tokens": "^3.0.2" 159 | }, 160 | "dependencies": { 161 | "chalk": { 162 | "version": "1.1.3", 163 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 164 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 165 | "dev": true, 166 | "requires": { 167 | "ansi-styles": "^2.2.1", 168 | "escape-string-regexp": "^1.0.2", 169 | "has-ansi": "^2.0.0", 170 | "strip-ansi": "^3.0.0", 171 | "supports-color": "^2.0.0" 172 | } 173 | }, 174 | "strip-ansi": { 175 | "version": "3.0.1", 176 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 177 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 178 | "dev": true, 179 | "requires": { 180 | "ansi-regex": "^2.0.0" 181 | } 182 | } 183 | } 184 | }, 185 | "balanced-match": { 186 | "version": "1.0.0", 187 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 188 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 189 | "dev": true 190 | }, 191 | "bcrypt-pbkdf": { 192 | "version": "1.0.2", 193 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 194 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 195 | "dev": true, 196 | "requires": { 197 | "tweetnacl": "^0.14.3" 198 | } 199 | }, 200 | "brace-expansion": { 201 | "version": "1.1.11", 202 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 203 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 204 | "dev": true, 205 | "requires": { 206 | "balanced-match": "^1.0.0", 207 | "concat-map": "0.0.1" 208 | } 209 | }, 210 | "browser-stdout": { 211 | "version": "1.3.1", 212 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", 213 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", 214 | "dev": true 215 | }, 216 | "buffer-from": { 217 | "version": "1.1.1", 218 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 219 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", 220 | "dev": true 221 | }, 222 | "caller-path": { 223 | "version": "0.1.0", 224 | "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", 225 | "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", 226 | "dev": true, 227 | "requires": { 228 | "callsites": "^0.2.0" 229 | } 230 | }, 231 | "callsites": { 232 | "version": "0.2.0", 233 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", 234 | "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", 235 | "dev": true 236 | }, 237 | "caseless": { 238 | "version": "0.12.0", 239 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 240 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", 241 | "dev": true 242 | }, 243 | "chalk": { 244 | "version": "2.4.1", 245 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", 246 | "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", 247 | "dev": true, 248 | "requires": { 249 | "ansi-styles": "^3.2.1", 250 | "escape-string-regexp": "^1.0.5", 251 | "supports-color": "^5.3.0" 252 | }, 253 | "dependencies": { 254 | "ansi-styles": { 255 | "version": "3.2.1", 256 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 257 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 258 | "dev": true, 259 | "requires": { 260 | "color-convert": "^1.9.0" 261 | } 262 | }, 263 | "supports-color": { 264 | "version": "5.4.0", 265 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", 266 | "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", 267 | "dev": true, 268 | "requires": { 269 | "has-flag": "^3.0.0" 270 | } 271 | } 272 | } 273 | }, 274 | "chardet": { 275 | "version": "0.4.2", 276 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", 277 | "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", 278 | "dev": true 279 | }, 280 | "circular-json": { 281 | "version": "0.3.3", 282 | "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", 283 | "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", 284 | "dev": true 285 | }, 286 | "cli-cursor": { 287 | "version": "2.1.0", 288 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", 289 | "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", 290 | "dev": true, 291 | "requires": { 292 | "restore-cursor": "^2.0.0" 293 | } 294 | }, 295 | "cli-width": { 296 | "version": "2.2.0", 297 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", 298 | "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", 299 | "dev": true 300 | }, 301 | "co": { 302 | "version": "4.6.0", 303 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 304 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", 305 | "dev": true 306 | }, 307 | "color-convert": { 308 | "version": "1.9.2", 309 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", 310 | "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", 311 | "dev": true, 312 | "requires": { 313 | "color-name": "1.1.1" 314 | } 315 | }, 316 | "color-name": { 317 | "version": "1.1.1", 318 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", 319 | "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=", 320 | "dev": true 321 | }, 322 | "combined-stream": { 323 | "version": "1.0.8", 324 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 325 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 326 | "dev": true, 327 | "requires": { 328 | "delayed-stream": "~1.0.0" 329 | } 330 | }, 331 | "commander": { 332 | "version": "2.15.1", 333 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", 334 | "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", 335 | "dev": true 336 | }, 337 | "concat-map": { 338 | "version": "0.0.1", 339 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 340 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 341 | "dev": true 342 | }, 343 | "concat-stream": { 344 | "version": "1.6.2", 345 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 346 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 347 | "dev": true, 348 | "requires": { 349 | "buffer-from": "^1.0.0", 350 | "inherits": "^2.0.3", 351 | "readable-stream": "^2.2.2", 352 | "typedarray": "^0.0.6" 353 | } 354 | }, 355 | "core-util-is": { 356 | "version": "1.0.2", 357 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 358 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 359 | "dev": true 360 | }, 361 | "cross-spawn": { 362 | "version": "5.1.0", 363 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", 364 | "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", 365 | "dev": true, 366 | "requires": { 367 | "lru-cache": "^4.0.1", 368 | "shebang-command": "^1.2.0", 369 | "which": "^1.2.9" 370 | } 371 | }, 372 | "dashdash": { 373 | "version": "1.14.1", 374 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 375 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 376 | "dev": true, 377 | "requires": { 378 | "assert-plus": "^1.0.0" 379 | } 380 | }, 381 | "debug": { 382 | "version": "3.1.0", 383 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 384 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 385 | "dev": true, 386 | "requires": { 387 | "ms": "2.0.0" 388 | } 389 | }, 390 | "deep-is": { 391 | "version": "0.1.3", 392 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 393 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 394 | "dev": true 395 | }, 396 | "del": { 397 | "version": "2.2.2", 398 | "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", 399 | "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", 400 | "dev": true, 401 | "requires": { 402 | "globby": "^5.0.0", 403 | "is-path-cwd": "^1.0.0", 404 | "is-path-in-cwd": "^1.0.0", 405 | "object-assign": "^4.0.1", 406 | "pify": "^2.0.0", 407 | "pinkie-promise": "^2.0.0", 408 | "rimraf": "^2.2.8" 409 | } 410 | }, 411 | "delayed-stream": { 412 | "version": "1.0.0", 413 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 414 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", 415 | "dev": true 416 | }, 417 | "diff": { 418 | "version": "3.5.0", 419 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", 420 | "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", 421 | "dev": true 422 | }, 423 | "doctrine": { 424 | "version": "2.1.0", 425 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", 426 | "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", 427 | "dev": true, 428 | "requires": { 429 | "esutils": "^2.0.2" 430 | } 431 | }, 432 | "ecc-jsbn": { 433 | "version": "0.1.2", 434 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 435 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", 436 | "dev": true, 437 | "requires": { 438 | "jsbn": "~0.1.0", 439 | "safer-buffer": "^2.1.0" 440 | } 441 | }, 442 | "es6-promise": { 443 | "version": "4.2.8", 444 | "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", 445 | "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", 446 | "dev": true 447 | }, 448 | "es6-promisify": { 449 | "version": "5.0.0", 450 | "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", 451 | "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", 452 | "dev": true, 453 | "requires": { 454 | "es6-promise": "^4.0.3" 455 | } 456 | }, 457 | "escape-string-regexp": { 458 | "version": "1.0.5", 459 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 460 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 461 | "dev": true 462 | }, 463 | "eslint": { 464 | "version": "4.19.1", 465 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", 466 | "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", 467 | "dev": true, 468 | "requires": { 469 | "ajv": "^5.3.0", 470 | "babel-code-frame": "^6.22.0", 471 | "chalk": "^2.1.0", 472 | "concat-stream": "^1.6.0", 473 | "cross-spawn": "^5.1.0", 474 | "debug": "^3.1.0", 475 | "doctrine": "^2.1.0", 476 | "eslint-scope": "^3.7.1", 477 | "eslint-visitor-keys": "^1.0.0", 478 | "espree": "^3.5.4", 479 | "esquery": "^1.0.0", 480 | "esutils": "^2.0.2", 481 | "file-entry-cache": "^2.0.0", 482 | "functional-red-black-tree": "^1.0.1", 483 | "glob": "^7.1.2", 484 | "globals": "^11.0.1", 485 | "ignore": "^3.3.3", 486 | "imurmurhash": "^0.1.4", 487 | "inquirer": "^3.0.6", 488 | "is-resolvable": "^1.0.0", 489 | "js-yaml": "^3.9.1", 490 | "json-stable-stringify-without-jsonify": "^1.0.1", 491 | "levn": "^0.3.0", 492 | "lodash": "^4.17.4", 493 | "minimatch": "^3.0.2", 494 | "mkdirp": "^0.5.1", 495 | "natural-compare": "^1.4.0", 496 | "optionator": "^0.8.2", 497 | "path-is-inside": "^1.0.2", 498 | "pluralize": "^7.0.0", 499 | "progress": "^2.0.0", 500 | "regexpp": "^1.0.1", 501 | "require-uncached": "^1.0.3", 502 | "semver": "^5.3.0", 503 | "strip-ansi": "^4.0.0", 504 | "strip-json-comments": "~2.0.1", 505 | "table": "4.0.2", 506 | "text-table": "~0.2.0" 507 | }, 508 | "dependencies": { 509 | "js-yaml": { 510 | "version": "3.12.0", 511 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", 512 | "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", 513 | "dev": true, 514 | "requires": { 515 | "argparse": "^1.0.7", 516 | "esprima": "^4.0.0" 517 | } 518 | }, 519 | "lodash": { 520 | "version": "4.17.10", 521 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", 522 | "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", 523 | "dev": true 524 | } 525 | } 526 | }, 527 | "eslint-scope": { 528 | "version": "3.7.3", 529 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", 530 | "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", 531 | "dev": true, 532 | "requires": { 533 | "esrecurse": "^4.1.0", 534 | "estraverse": "^4.1.1" 535 | } 536 | }, 537 | "eslint-visitor-keys": { 538 | "version": "1.0.0", 539 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", 540 | "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", 541 | "dev": true 542 | }, 543 | "espree": { 544 | "version": "3.5.4", 545 | "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", 546 | "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", 547 | "dev": true, 548 | "requires": { 549 | "acorn": "^5.5.0", 550 | "acorn-jsx": "^3.0.0" 551 | } 552 | }, 553 | "esprima": { 554 | "version": "4.0.1", 555 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 556 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 557 | "dev": true 558 | }, 559 | "esquery": { 560 | "version": "1.0.1", 561 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", 562 | "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", 563 | "dev": true, 564 | "requires": { 565 | "estraverse": "^4.0.0" 566 | } 567 | }, 568 | "esrecurse": { 569 | "version": "4.2.1", 570 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", 571 | "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", 572 | "dev": true, 573 | "requires": { 574 | "estraverse": "^4.1.0" 575 | } 576 | }, 577 | "estraverse": { 578 | "version": "4.2.0", 579 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", 580 | "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", 581 | "dev": true 582 | }, 583 | "esutils": { 584 | "version": "2.0.2", 585 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", 586 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", 587 | "dev": true 588 | }, 589 | "extend": { 590 | "version": "3.0.2", 591 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 592 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", 593 | "dev": true 594 | }, 595 | "external-editor": { 596 | "version": "2.2.0", 597 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", 598 | "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", 599 | "dev": true, 600 | "requires": { 601 | "chardet": "^0.4.0", 602 | "iconv-lite": "^0.4.17", 603 | "tmp": "^0.0.33" 604 | } 605 | }, 606 | "extsprintf": { 607 | "version": "1.3.0", 608 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 609 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", 610 | "dev": true 611 | }, 612 | "fast-deep-equal": { 613 | "version": "1.1.0", 614 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", 615 | "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", 616 | "dev": true 617 | }, 618 | "fast-json-stable-stringify": { 619 | "version": "2.0.0", 620 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 621 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", 622 | "dev": true 623 | }, 624 | "fast-levenshtein": { 625 | "version": "2.0.6", 626 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 627 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 628 | "dev": true 629 | }, 630 | "figures": { 631 | "version": "2.0.0", 632 | "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", 633 | "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", 634 | "dev": true, 635 | "requires": { 636 | "escape-string-regexp": "^1.0.5" 637 | } 638 | }, 639 | "file-entry-cache": { 640 | "version": "2.0.0", 641 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", 642 | "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", 643 | "dev": true, 644 | "requires": { 645 | "flat-cache": "^1.2.1", 646 | "object-assign": "^4.0.1" 647 | } 648 | }, 649 | "flat-cache": { 650 | "version": "1.3.0", 651 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", 652 | "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", 653 | "dev": true, 654 | "requires": { 655 | "circular-json": "^0.3.1", 656 | "del": "^2.0.2", 657 | "graceful-fs": "^4.1.2", 658 | "write": "^0.2.1" 659 | } 660 | }, 661 | "forever-agent": { 662 | "version": "0.6.1", 663 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 664 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", 665 | "dev": true 666 | }, 667 | "form-data": { 668 | "version": "2.3.3", 669 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 670 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 671 | "dev": true, 672 | "requires": { 673 | "asynckit": "^0.4.0", 674 | "combined-stream": "^1.0.6", 675 | "mime-types": "^2.1.12" 676 | } 677 | }, 678 | "fs.realpath": { 679 | "version": "1.0.0", 680 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 681 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 682 | "dev": true 683 | }, 684 | "functional-red-black-tree": { 685 | "version": "1.0.1", 686 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 687 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 688 | "dev": true 689 | }, 690 | "getpass": { 691 | "version": "0.1.7", 692 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 693 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 694 | "dev": true, 695 | "requires": { 696 | "assert-plus": "^1.0.0" 697 | } 698 | }, 699 | "glob": { 700 | "version": "7.1.2", 701 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", 702 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", 703 | "dev": true, 704 | "requires": { 705 | "fs.realpath": "^1.0.0", 706 | "inflight": "^1.0.4", 707 | "inherits": "2", 708 | "minimatch": "^3.0.4", 709 | "once": "^1.3.0", 710 | "path-is-absolute": "^1.0.0" 711 | } 712 | }, 713 | "globals": { 714 | "version": "11.7.0", 715 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.7.0.tgz", 716 | "integrity": "sha512-K8BNSPySfeShBQXsahYB/AbbWruVOTyVpgoIDnl8odPpeSfP2J5QO2oLFFdl2j7GfDCtZj2bMKar2T49itTPCg==", 717 | "dev": true 718 | }, 719 | "globby": { 720 | "version": "5.0.0", 721 | "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", 722 | "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", 723 | "dev": true, 724 | "requires": { 725 | "array-union": "^1.0.1", 726 | "arrify": "^1.0.0", 727 | "glob": "^7.0.3", 728 | "object-assign": "^4.0.1", 729 | "pify": "^2.0.0", 730 | "pinkie-promise": "^2.0.0" 731 | } 732 | }, 733 | "graceful-fs": { 734 | "version": "4.1.11", 735 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 736 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", 737 | "dev": true 738 | }, 739 | "growl": { 740 | "version": "1.10.5", 741 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", 742 | "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", 743 | "dev": true 744 | }, 745 | "har-schema": { 746 | "version": "2.0.0", 747 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 748 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", 749 | "dev": true 750 | }, 751 | "har-validator": { 752 | "version": "5.1.3", 753 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", 754 | "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", 755 | "dev": true, 756 | "requires": { 757 | "ajv": "^6.5.5", 758 | "har-schema": "^2.0.0" 759 | }, 760 | "dependencies": { 761 | "ajv": { 762 | "version": "6.11.0", 763 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.11.0.tgz", 764 | "integrity": "sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA==", 765 | "dev": true, 766 | "requires": { 767 | "fast-deep-equal": "^3.1.1", 768 | "fast-json-stable-stringify": "^2.0.0", 769 | "json-schema-traverse": "^0.4.1", 770 | "uri-js": "^4.2.2" 771 | } 772 | }, 773 | "fast-deep-equal": { 774 | "version": "3.1.1", 775 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", 776 | "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", 777 | "dev": true 778 | }, 779 | "json-schema-traverse": { 780 | "version": "0.4.1", 781 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 782 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 783 | "dev": true 784 | } 785 | } 786 | }, 787 | "has-ansi": { 788 | "version": "2.0.0", 789 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 790 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 791 | "dev": true, 792 | "requires": { 793 | "ansi-regex": "^2.0.0" 794 | } 795 | }, 796 | "has-flag": { 797 | "version": "3.0.0", 798 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 799 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 800 | "dev": true 801 | }, 802 | "he": { 803 | "version": "1.1.1", 804 | "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", 805 | "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", 806 | "dev": true 807 | }, 808 | "http-proxy-agent": { 809 | "version": "2.1.0", 810 | "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", 811 | "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", 812 | "dev": true, 813 | "requires": { 814 | "agent-base": "4", 815 | "debug": "3.1.0" 816 | } 817 | }, 818 | "http-signature": { 819 | "version": "1.2.0", 820 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 821 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 822 | "dev": true, 823 | "requires": { 824 | "assert-plus": "^1.0.0", 825 | "jsprim": "^1.2.2", 826 | "sshpk": "^1.7.0" 827 | } 828 | }, 829 | "https-proxy-agent": { 830 | "version": "2.2.4", 831 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", 832 | "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", 833 | "dev": true, 834 | "requires": { 835 | "agent-base": "^4.3.0", 836 | "debug": "^3.1.0" 837 | } 838 | }, 839 | "iconv-lite": { 840 | "version": "0.4.23", 841 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", 842 | "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", 843 | "dev": true, 844 | "requires": { 845 | "safer-buffer": ">= 2.1.2 < 3" 846 | } 847 | }, 848 | "ignore": { 849 | "version": "3.3.10", 850 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", 851 | "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", 852 | "dev": true 853 | }, 854 | "imurmurhash": { 855 | "version": "0.1.4", 856 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 857 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 858 | "dev": true 859 | }, 860 | "inflight": { 861 | "version": "1.0.6", 862 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 863 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 864 | "dev": true, 865 | "requires": { 866 | "once": "^1.3.0", 867 | "wrappy": "1" 868 | } 869 | }, 870 | "inherits": { 871 | "version": "2.0.3", 872 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 873 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 874 | "dev": true 875 | }, 876 | "inquirer": { 877 | "version": "3.3.0", 878 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", 879 | "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", 880 | "dev": true, 881 | "requires": { 882 | "ansi-escapes": "^3.0.0", 883 | "chalk": "^2.0.0", 884 | "cli-cursor": "^2.1.0", 885 | "cli-width": "^2.0.0", 886 | "external-editor": "^2.0.4", 887 | "figures": "^2.0.0", 888 | "lodash": "^4.3.0", 889 | "mute-stream": "0.0.7", 890 | "run-async": "^2.2.0", 891 | "rx-lite": "^4.0.8", 892 | "rx-lite-aggregates": "^4.0.8", 893 | "string-width": "^2.1.0", 894 | "strip-ansi": "^4.0.0", 895 | "through": "^2.3.6" 896 | }, 897 | "dependencies": { 898 | "lodash": { 899 | "version": "4.17.10", 900 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", 901 | "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", 902 | "dev": true 903 | } 904 | } 905 | }, 906 | "is-fullwidth-code-point": { 907 | "version": "2.0.0", 908 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 909 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 910 | "dev": true 911 | }, 912 | "is-path-cwd": { 913 | "version": "1.0.0", 914 | "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", 915 | "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", 916 | "dev": true 917 | }, 918 | "is-path-in-cwd": { 919 | "version": "1.0.1", 920 | "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", 921 | "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", 922 | "dev": true, 923 | "requires": { 924 | "is-path-inside": "^1.0.0" 925 | } 926 | }, 927 | "is-path-inside": { 928 | "version": "1.0.1", 929 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", 930 | "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", 931 | "dev": true, 932 | "requires": { 933 | "path-is-inside": "^1.0.1" 934 | } 935 | }, 936 | "is-promise": { 937 | "version": "2.1.0", 938 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", 939 | "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", 940 | "dev": true 941 | }, 942 | "is-resolvable": { 943 | "version": "1.1.0", 944 | "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", 945 | "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", 946 | "dev": true 947 | }, 948 | "is-typedarray": { 949 | "version": "1.0.0", 950 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 951 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", 952 | "dev": true 953 | }, 954 | "isarray": { 955 | "version": "1.0.0", 956 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 957 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 958 | "dev": true 959 | }, 960 | "isexe": { 961 | "version": "2.0.0", 962 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 963 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 964 | "dev": true 965 | }, 966 | "isstream": { 967 | "version": "0.1.2", 968 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 969 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", 970 | "dev": true 971 | }, 972 | "js-tokens": { 973 | "version": "3.0.2", 974 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", 975 | "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", 976 | "dev": true 977 | }, 978 | "jsbn": { 979 | "version": "0.1.1", 980 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 981 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", 982 | "dev": true 983 | }, 984 | "json-schema": { 985 | "version": "0.2.3", 986 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 987 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", 988 | "dev": true 989 | }, 990 | "json-schema-traverse": { 991 | "version": "0.3.1", 992 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", 993 | "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", 994 | "dev": true 995 | }, 996 | "json-stable-stringify-without-jsonify": { 997 | "version": "1.0.1", 998 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 999 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 1000 | "dev": true 1001 | }, 1002 | "json-stringify-safe": { 1003 | "version": "5.0.1", 1004 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 1005 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", 1006 | "dev": true 1007 | }, 1008 | "jsprim": { 1009 | "version": "1.4.1", 1010 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 1011 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 1012 | "dev": true, 1013 | "requires": { 1014 | "assert-plus": "1.0.0", 1015 | "extsprintf": "1.3.0", 1016 | "json-schema": "0.2.3", 1017 | "verror": "1.10.0" 1018 | } 1019 | }, 1020 | "levn": { 1021 | "version": "0.3.0", 1022 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 1023 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", 1024 | "dev": true, 1025 | "requires": { 1026 | "prelude-ls": "~1.1.2", 1027 | "type-check": "~0.3.2" 1028 | } 1029 | }, 1030 | "lru-cache": { 1031 | "version": "4.1.3", 1032 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", 1033 | "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", 1034 | "dev": true, 1035 | "requires": { 1036 | "pseudomap": "^1.0.2", 1037 | "yallist": "^2.1.2" 1038 | } 1039 | }, 1040 | "mime-db": { 1041 | "version": "1.43.0", 1042 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", 1043 | "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==", 1044 | "dev": true 1045 | }, 1046 | "mime-types": { 1047 | "version": "2.1.26", 1048 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", 1049 | "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", 1050 | "dev": true, 1051 | "requires": { 1052 | "mime-db": "1.43.0" 1053 | } 1054 | }, 1055 | "mimic-fn": { 1056 | "version": "1.2.0", 1057 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", 1058 | "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", 1059 | "dev": true 1060 | }, 1061 | "minimatch": { 1062 | "version": "3.0.4", 1063 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1064 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1065 | "dev": true, 1066 | "requires": { 1067 | "brace-expansion": "^1.1.7" 1068 | } 1069 | }, 1070 | "minimist": { 1071 | "version": "0.0.8", 1072 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 1073 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 1074 | "dev": true 1075 | }, 1076 | "mkdirp": { 1077 | "version": "0.5.1", 1078 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 1079 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 1080 | "dev": true, 1081 | "requires": { 1082 | "minimist": "0.0.8" 1083 | } 1084 | }, 1085 | "mocha": { 1086 | "version": "5.2.0", 1087 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", 1088 | "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", 1089 | "dev": true, 1090 | "requires": { 1091 | "browser-stdout": "1.3.1", 1092 | "commander": "2.15.1", 1093 | "debug": "3.1.0", 1094 | "diff": "3.5.0", 1095 | "escape-string-regexp": "1.0.5", 1096 | "glob": "7.1.2", 1097 | "growl": "1.10.5", 1098 | "he": "1.1.1", 1099 | "minimatch": "3.0.4", 1100 | "mkdirp": "0.5.1", 1101 | "supports-color": "5.4.0" 1102 | }, 1103 | "dependencies": { 1104 | "supports-color": { 1105 | "version": "5.4.0", 1106 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", 1107 | "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", 1108 | "dev": true, 1109 | "requires": { 1110 | "has-flag": "^3.0.0" 1111 | } 1112 | } 1113 | } 1114 | }, 1115 | "ms": { 1116 | "version": "2.0.0", 1117 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1118 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 1119 | "dev": true 1120 | }, 1121 | "mute-stream": { 1122 | "version": "0.0.7", 1123 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", 1124 | "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", 1125 | "dev": true 1126 | }, 1127 | "natural-compare": { 1128 | "version": "1.4.0", 1129 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 1130 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 1131 | "dev": true 1132 | }, 1133 | "oauth-sign": { 1134 | "version": "0.9.0", 1135 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 1136 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", 1137 | "dev": true 1138 | }, 1139 | "object-assign": { 1140 | "version": "4.1.1", 1141 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1142 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 1143 | "dev": true 1144 | }, 1145 | "once": { 1146 | "version": "1.4.0", 1147 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1148 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1149 | "dev": true, 1150 | "requires": { 1151 | "wrappy": "1" 1152 | } 1153 | }, 1154 | "onetime": { 1155 | "version": "2.0.1", 1156 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", 1157 | "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", 1158 | "dev": true, 1159 | "requires": { 1160 | "mimic-fn": "^1.0.0" 1161 | } 1162 | }, 1163 | "optionator": { 1164 | "version": "0.8.2", 1165 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", 1166 | "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", 1167 | "dev": true, 1168 | "requires": { 1169 | "deep-is": "~0.1.3", 1170 | "fast-levenshtein": "~2.0.4", 1171 | "levn": "~0.3.0", 1172 | "prelude-ls": "~1.1.2", 1173 | "type-check": "~0.3.2", 1174 | "wordwrap": "~1.0.0" 1175 | } 1176 | }, 1177 | "os-tmpdir": { 1178 | "version": "1.0.2", 1179 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 1180 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", 1181 | "dev": true 1182 | }, 1183 | "path-is-absolute": { 1184 | "version": "1.0.1", 1185 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1186 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1187 | "dev": true 1188 | }, 1189 | "path-is-inside": { 1190 | "version": "1.0.2", 1191 | "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", 1192 | "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", 1193 | "dev": true 1194 | }, 1195 | "performance-now": { 1196 | "version": "2.1.0", 1197 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 1198 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", 1199 | "dev": true 1200 | }, 1201 | "pify": { 1202 | "version": "2.3.0", 1203 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 1204 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", 1205 | "dev": true 1206 | }, 1207 | "pinkie": { 1208 | "version": "2.0.4", 1209 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", 1210 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", 1211 | "dev": true 1212 | }, 1213 | "pinkie-promise": { 1214 | "version": "2.0.1", 1215 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", 1216 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", 1217 | "dev": true, 1218 | "requires": { 1219 | "pinkie": "^2.0.0" 1220 | } 1221 | }, 1222 | "pluralize": { 1223 | "version": "7.0.0", 1224 | "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", 1225 | "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", 1226 | "dev": true 1227 | }, 1228 | "prelude-ls": { 1229 | "version": "1.1.2", 1230 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 1231 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", 1232 | "dev": true 1233 | }, 1234 | "process-nextick-args": { 1235 | "version": "2.0.0", 1236 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", 1237 | "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", 1238 | "dev": true 1239 | }, 1240 | "progress": { 1241 | "version": "2.0.0", 1242 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", 1243 | "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", 1244 | "dev": true 1245 | }, 1246 | "pseudomap": { 1247 | "version": "1.0.2", 1248 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", 1249 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", 1250 | "dev": true 1251 | }, 1252 | "psl": { 1253 | "version": "1.7.0", 1254 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz", 1255 | "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==", 1256 | "dev": true 1257 | }, 1258 | "punycode": { 1259 | "version": "2.1.1", 1260 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 1261 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 1262 | "dev": true 1263 | }, 1264 | "qs": { 1265 | "version": "6.5.2", 1266 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 1267 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", 1268 | "dev": true 1269 | }, 1270 | "querystringify": { 1271 | "version": "2.1.1", 1272 | "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", 1273 | "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", 1274 | "dev": true 1275 | }, 1276 | "readable-stream": { 1277 | "version": "2.3.6", 1278 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 1279 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 1280 | "dev": true, 1281 | "requires": { 1282 | "core-util-is": "~1.0.0", 1283 | "inherits": "~2.0.3", 1284 | "isarray": "~1.0.0", 1285 | "process-nextick-args": "~2.0.0", 1286 | "safe-buffer": "~5.1.1", 1287 | "string_decoder": "~1.1.1", 1288 | "util-deprecate": "~1.0.1" 1289 | } 1290 | }, 1291 | "regexpp": { 1292 | "version": "1.1.0", 1293 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", 1294 | "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", 1295 | "dev": true 1296 | }, 1297 | "request": { 1298 | "version": "2.88.0", 1299 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", 1300 | "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", 1301 | "dev": true, 1302 | "requires": { 1303 | "aws-sign2": "~0.7.0", 1304 | "aws4": "^1.8.0", 1305 | "caseless": "~0.12.0", 1306 | "combined-stream": "~1.0.6", 1307 | "extend": "~3.0.2", 1308 | "forever-agent": "~0.6.1", 1309 | "form-data": "~2.3.2", 1310 | "har-validator": "~5.1.0", 1311 | "http-signature": "~1.2.0", 1312 | "is-typedarray": "~1.0.0", 1313 | "isstream": "~0.1.2", 1314 | "json-stringify-safe": "~5.0.1", 1315 | "mime-types": "~2.1.19", 1316 | "oauth-sign": "~0.9.0", 1317 | "performance-now": "^2.1.0", 1318 | "qs": "~6.5.2", 1319 | "safe-buffer": "^5.1.2", 1320 | "tough-cookie": "~2.4.3", 1321 | "tunnel-agent": "^0.6.0", 1322 | "uuid": "^3.3.2" 1323 | } 1324 | }, 1325 | "require-uncached": { 1326 | "version": "1.0.3", 1327 | "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", 1328 | "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", 1329 | "dev": true, 1330 | "requires": { 1331 | "caller-path": "^0.1.0", 1332 | "resolve-from": "^1.0.0" 1333 | } 1334 | }, 1335 | "requires-port": { 1336 | "version": "1.0.0", 1337 | "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", 1338 | "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", 1339 | "dev": true 1340 | }, 1341 | "resolve-from": { 1342 | "version": "1.0.1", 1343 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", 1344 | "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", 1345 | "dev": true 1346 | }, 1347 | "restore-cursor": { 1348 | "version": "2.0.0", 1349 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", 1350 | "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", 1351 | "dev": true, 1352 | "requires": { 1353 | "onetime": "^2.0.0", 1354 | "signal-exit": "^3.0.2" 1355 | } 1356 | }, 1357 | "rimraf": { 1358 | "version": "2.6.2", 1359 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", 1360 | "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", 1361 | "dev": true, 1362 | "requires": { 1363 | "glob": "^7.0.5" 1364 | } 1365 | }, 1366 | "run-async": { 1367 | "version": "2.3.0", 1368 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", 1369 | "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", 1370 | "dev": true, 1371 | "requires": { 1372 | "is-promise": "^2.1.0" 1373 | } 1374 | }, 1375 | "rx-lite": { 1376 | "version": "4.0.8", 1377 | "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", 1378 | "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", 1379 | "dev": true 1380 | }, 1381 | "rx-lite-aggregates": { 1382 | "version": "4.0.8", 1383 | "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", 1384 | "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", 1385 | "dev": true, 1386 | "requires": { 1387 | "rx-lite": "*" 1388 | } 1389 | }, 1390 | "safe-buffer": { 1391 | "version": "5.1.2", 1392 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1393 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 1394 | "dev": true 1395 | }, 1396 | "safer-buffer": { 1397 | "version": "2.1.2", 1398 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1399 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 1400 | "dev": true 1401 | }, 1402 | "semver": { 1403 | "version": "5.5.0", 1404 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", 1405 | "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", 1406 | "dev": true 1407 | }, 1408 | "shebang-command": { 1409 | "version": "1.2.0", 1410 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 1411 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 1412 | "dev": true, 1413 | "requires": { 1414 | "shebang-regex": "^1.0.0" 1415 | } 1416 | }, 1417 | "shebang-regex": { 1418 | "version": "1.0.0", 1419 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 1420 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", 1421 | "dev": true 1422 | }, 1423 | "signal-exit": { 1424 | "version": "3.0.2", 1425 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 1426 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", 1427 | "dev": true 1428 | }, 1429 | "slice-ansi": { 1430 | "version": "1.0.0", 1431 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", 1432 | "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", 1433 | "dev": true, 1434 | "requires": { 1435 | "is-fullwidth-code-point": "^2.0.0" 1436 | } 1437 | }, 1438 | "source-map": { 1439 | "version": "0.6.1", 1440 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1441 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1442 | "dev": true 1443 | }, 1444 | "source-map-support": { 1445 | "version": "0.5.16", 1446 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", 1447 | "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", 1448 | "dev": true, 1449 | "requires": { 1450 | "buffer-from": "^1.0.0", 1451 | "source-map": "^0.6.0" 1452 | } 1453 | }, 1454 | "sprintf-js": { 1455 | "version": "1.0.3", 1456 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 1457 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 1458 | "dev": true 1459 | }, 1460 | "sshpk": { 1461 | "version": "1.16.1", 1462 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", 1463 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", 1464 | "dev": true, 1465 | "requires": { 1466 | "asn1": "~0.2.3", 1467 | "assert-plus": "^1.0.0", 1468 | "bcrypt-pbkdf": "^1.0.0", 1469 | "dashdash": "^1.12.0", 1470 | "ecc-jsbn": "~0.1.1", 1471 | "getpass": "^0.1.1", 1472 | "jsbn": "~0.1.0", 1473 | "safer-buffer": "^2.0.2", 1474 | "tweetnacl": "~0.14.0" 1475 | } 1476 | }, 1477 | "string-width": { 1478 | "version": "2.1.1", 1479 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 1480 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 1481 | "dev": true, 1482 | "requires": { 1483 | "is-fullwidth-code-point": "^2.0.0", 1484 | "strip-ansi": "^4.0.0" 1485 | } 1486 | }, 1487 | "string_decoder": { 1488 | "version": "1.1.1", 1489 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 1490 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 1491 | "dev": true, 1492 | "requires": { 1493 | "safe-buffer": "~5.1.0" 1494 | } 1495 | }, 1496 | "strip-ansi": { 1497 | "version": "4.0.0", 1498 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 1499 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 1500 | "dev": true, 1501 | "requires": { 1502 | "ansi-regex": "^3.0.0" 1503 | }, 1504 | "dependencies": { 1505 | "ansi-regex": { 1506 | "version": "3.0.0", 1507 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 1508 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 1509 | "dev": true 1510 | } 1511 | } 1512 | }, 1513 | "strip-json-comments": { 1514 | "version": "2.0.1", 1515 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 1516 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 1517 | "dev": true 1518 | }, 1519 | "supports-color": { 1520 | "version": "2.0.0", 1521 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 1522 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", 1523 | "dev": true 1524 | }, 1525 | "table": { 1526 | "version": "4.0.2", 1527 | "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", 1528 | "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", 1529 | "dev": true, 1530 | "requires": { 1531 | "ajv": "^5.2.3", 1532 | "ajv-keywords": "^2.1.0", 1533 | "chalk": "^2.1.0", 1534 | "lodash": "^4.17.4", 1535 | "slice-ansi": "1.0.0", 1536 | "string-width": "^2.1.1" 1537 | }, 1538 | "dependencies": { 1539 | "lodash": { 1540 | "version": "4.17.10", 1541 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", 1542 | "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", 1543 | "dev": true 1544 | } 1545 | } 1546 | }, 1547 | "text-table": { 1548 | "version": "0.2.0", 1549 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 1550 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 1551 | "dev": true 1552 | }, 1553 | "through": { 1554 | "version": "2.3.8", 1555 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 1556 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 1557 | "dev": true 1558 | }, 1559 | "tmp": { 1560 | "version": "0.0.33", 1561 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 1562 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", 1563 | "dev": true, 1564 | "requires": { 1565 | "os-tmpdir": "~1.0.2" 1566 | } 1567 | }, 1568 | "tough-cookie": { 1569 | "version": "2.4.3", 1570 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", 1571 | "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", 1572 | "dev": true, 1573 | "requires": { 1574 | "psl": "^1.1.24", 1575 | "punycode": "^1.4.1" 1576 | }, 1577 | "dependencies": { 1578 | "punycode": { 1579 | "version": "1.4.1", 1580 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 1581 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", 1582 | "dev": true 1583 | } 1584 | } 1585 | }, 1586 | "tunnel-agent": { 1587 | "version": "0.6.0", 1588 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 1589 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 1590 | "dev": true, 1591 | "requires": { 1592 | "safe-buffer": "^5.0.1" 1593 | } 1594 | }, 1595 | "tweetnacl": { 1596 | "version": "0.14.5", 1597 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 1598 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", 1599 | "dev": true 1600 | }, 1601 | "type-check": { 1602 | "version": "0.3.2", 1603 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 1604 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", 1605 | "dev": true, 1606 | "requires": { 1607 | "prelude-ls": "~1.1.2" 1608 | } 1609 | }, 1610 | "typedarray": { 1611 | "version": "0.0.6", 1612 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 1613 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", 1614 | "dev": true 1615 | }, 1616 | "typescript": { 1617 | "version": "2.9.2", 1618 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", 1619 | "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", 1620 | "dev": true 1621 | }, 1622 | "uri-js": { 1623 | "version": "4.2.2", 1624 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", 1625 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", 1626 | "dev": true, 1627 | "requires": { 1628 | "punycode": "^2.1.0" 1629 | } 1630 | }, 1631 | "url-parse": { 1632 | "version": "1.4.7", 1633 | "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", 1634 | "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", 1635 | "dev": true, 1636 | "requires": { 1637 | "querystringify": "^2.1.1", 1638 | "requires-port": "^1.0.0" 1639 | } 1640 | }, 1641 | "util-deprecate": { 1642 | "version": "1.0.2", 1643 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1644 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 1645 | "dev": true 1646 | }, 1647 | "uuid": { 1648 | "version": "3.4.0", 1649 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", 1650 | "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", 1651 | "dev": true 1652 | }, 1653 | "verror": { 1654 | "version": "1.10.0", 1655 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 1656 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 1657 | "dev": true, 1658 | "requires": { 1659 | "assert-plus": "^1.0.0", 1660 | "core-util-is": "1.0.2", 1661 | "extsprintf": "^1.2.0" 1662 | } 1663 | }, 1664 | "vscode": { 1665 | "version": "1.1.36", 1666 | "resolved": "https://registry.npmjs.org/vscode/-/vscode-1.1.36.tgz", 1667 | "integrity": "sha512-cGFh9jmGLcTapCpPCKvn8aG/j9zVQ+0x5hzYJq5h5YyUXVGa1iamOaB2M2PZXoumQPES4qeAP1FwkI0b6tL4bQ==", 1668 | "dev": true, 1669 | "requires": { 1670 | "glob": "^7.1.2", 1671 | "mocha": "^5.2.0", 1672 | "request": "^2.88.0", 1673 | "semver": "^5.4.1", 1674 | "source-map-support": "^0.5.0", 1675 | "url-parse": "^1.4.4", 1676 | "vscode-test": "^0.4.1" 1677 | } 1678 | }, 1679 | "vscode-test": { 1680 | "version": "0.4.3", 1681 | "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-0.4.3.tgz", 1682 | "integrity": "sha512-EkMGqBSefZH2MgW65nY05rdRSko15uvzq4VAPM5jVmwYuFQKE7eikKXNJDRxL+OITXHB6pI+a3XqqD32Y3KC5w==", 1683 | "dev": true, 1684 | "requires": { 1685 | "http-proxy-agent": "^2.1.0", 1686 | "https-proxy-agent": "^2.2.1" 1687 | } 1688 | }, 1689 | "which": { 1690 | "version": "1.3.1", 1691 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 1692 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 1693 | "dev": true, 1694 | "requires": { 1695 | "isexe": "^2.0.0" 1696 | } 1697 | }, 1698 | "wordwrap": { 1699 | "version": "1.0.0", 1700 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", 1701 | "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", 1702 | "dev": true 1703 | }, 1704 | "wrappy": { 1705 | "version": "1.0.2", 1706 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1707 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1708 | "dev": true 1709 | }, 1710 | "write": { 1711 | "version": "0.2.1", 1712 | "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", 1713 | "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", 1714 | "dev": true, 1715 | "requires": { 1716 | "mkdirp": "^0.5.1" 1717 | } 1718 | }, 1719 | "yallist": { 1720 | "version": "2.1.2", 1721 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", 1722 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", 1723 | "dev": true 1724 | } 1725 | } 1726 | } 1727 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "firebase-firestore-snippets", 3 | "displayName": "Firebase/Firestore Snippets", 4 | "description": "Snippets for both Firebase and Firestore!", 5 | "version": "0.0.8", 6 | "publisher": "PeterHdd", 7 | "icon": "images/firebase.png", 8 | "license": "SEE LICENSE IN LICENSE.md", 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/PeterHdd/firebase-firestore-snippets" 12 | }, 13 | "galleryBanner": { 14 | "color": "#ed9421", 15 | "theme": "dark" 16 | }, 17 | "engines": { 18 | "vscode": "^1.20.0" 19 | }, 20 | "keywords": [ 21 | "firestore", 22 | "firebase", 23 | "firebase and firebase snippets", 24 | "snippets" 25 | ], 26 | "categories": [ 27 | "Snippets" 28 | ], 29 | "activationEvents": [ 30 | "onCommand:extension.sayHello" 31 | ], 32 | "main": "./extension", 33 | "contributes": { 34 | "snippets": [ 35 | { 36 | "language": "javascript", 37 | "path": "./snippets/snippets.json" 38 | }, 39 | { 40 | "language": "html", 41 | "path": "./snippets/snippets.json" 42 | }, 43 | { 44 | "language": "vue", 45 | "path": "./snippets/snippets.json" 46 | }, 47 | { 48 | "language": "typescript", 49 | "path": "./snippets/snippets.json" 50 | }, 51 | { 52 | "language": "javascriptreact", 53 | "path": "./snippets/snippets.json" 54 | }, 55 | { 56 | "language": "typescriptreact", 57 | "path": "./snippets/snippets.json" 58 | } 59 | ] 60 | }, 61 | "scripts": { 62 | "postinstall": "node ./node_modules/vscode/bin/install", 63 | "test": "node ./node_modules/vscode/bin/test" 64 | }, 65 | "devDependencies": { 66 | "@types/mocha": "^2.2.42", 67 | "@types/node": "^7.0.43", 68 | "eslint": "^4.11.0", 69 | "typescript": "^2.6.1", 70 | "vscode": "^1.1.36" 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /snippets/snippets.json: -------------------------------------------------------------------------------- 1 | { 2 | "firebase config":{ 3 | "prefix": "fireconfig", 4 | "body":[ 5 | "var config = {", 6 | "apiKey: ${1:apiKey},", 7 | "authDomain: ${2:projectId.firebaseapp.com},", 8 | "databaseURL: ${3:https://databaseName.firebaseio.com},", 9 | "storageBucket: ${4:bucket.appspot.com}", 10 | "};", 11 | "firebase.initializeApp(config);" 12 | ], 13 | "description":"Configure Firebase" 14 | }, 15 | 16 | "firebase reference":{ 17 | "prefix":"firereference", 18 | "body": "let ${1:database} = firebase.database();", 19 | "description":"Get a reference to the firebase service" 20 | }, 21 | 22 | "firebase set data":{ 23 | "prefix":"fireset", 24 | "body":[ 25 | "firebase.database().ref(${0:/* path */}).set({", 26 | "${1: /* attribute: value */}", 27 | "});" 28 | ], 29 | "description": "Set data to the firebase database" 30 | }, 31 | 32 | "firebase retrieve data":{ 33 | "prefix":"fireretrieve", 34 | "body":[ 35 | "firebase.database().ref(${0:/* path */}).on(${0:eventType},(${1:snapshot})=> {", 36 | "${2: /* handle read data */}", 37 | "console.log(${3: /* log data */})", 38 | " });" 39 | ], 40 | "description":"Retrieve data from firebase" 41 | }, 42 | 43 | "firebase retrieve and loop data":{ 44 | "prefix":"fireretrieveloop", 45 | "body":[ 46 | "firebase.database().ref(${0:/* path */}).on(${0:eventType},(${1:snapshot})=> {", 47 | "${1:snapshot}.forEach((${2:childSnapshot})=>{", 48 | "${3: /* handle read data */}", 49 | "console.log(${4: /* log data */})", 50 | " });", 51 | " });" 52 | ], 53 | "description": "Retrieve data and loop inside the direct children" 54 | }, 55 | 56 | "firebase val":{ 57 | "prefix":"fireval", 58 | "body": ["let ${0:names}=${1:snapshot}.val().${2:name}", 59 | "/* retrieve the name from the database */" 60 | ], 61 | "description":"Using val() method to retrieve the data inside a listener" 62 | }, 63 | 64 | "firebase retrieve once":{ 65 | "prefix":"fireretrieveonce", 66 | "body":[ 67 | "firebase.database().ref(${0:/* path */}).once(${0:eventType}).then((${1:snapshot})=> {", 68 | "${2: /* handle read data */}", 69 | "console.log(${3: /* log data */})", 70 | "});" 71 | ], 72 | "description": "Retrieve data once" 73 | }, 74 | 75 | "firebase create a key":{ 76 | "prefix":"firekey", 77 | "body": "let ${0:newPostKey} = firebase.database().ref().child(${1:/* path */}).push().key;", 78 | "description": "Create a key and simultaneously retrieve the key" 79 | }, 80 | "Firebase Update": { 81 | "prefix": "fireupdate", 82 | "body": "${1:ref}.update(${2: value} , ${0:/* onComplete */});", 83 | "description": "Updating specific fields" 84 | }, 85 | 86 | "Firebase Remove":{ 87 | "prefix":"fireremove", 88 | "body":"let ${0:ref} = firebase.database().ref().child(${1:/* path */}).remove();", 89 | "description": "Remove data at a certain location" 90 | }, 91 | 92 | "Firebase transactions": { 93 | "prefix": "firetransaction", 94 | "body": "firebase.database().ref().transaction(${2: updateFunction}, ${3:/* onComplete */}, ${0:/* do the required*/});", 95 | "description": "firebase transactions" 96 | }, 97 | 98 | "Firebase OrderByChild":{ 99 | "prefix":"fireorderBychild", 100 | "body": "let ${0:retrieveData} = firebase.database().ref(${1:/* path */}).orderByChild(${2: /* child key */});", 101 | "description": "Order results by the value of a specified child key or nested child path." 102 | 103 | }, 104 | 105 | "Firebase OrderByValue":{ 106 | "prefix":"fireorderByvalue", 107 | "body": "let ${0:retrieveData} = firebase.database().ref(${1:/* path */}).orderByValue();", 108 | "description": "Order results by child values." 109 | 110 | }, 111 | 112 | "Firebase OrderByKey":{ 113 | "prefix":"fireorderBykey", 114 | "body": "let ${0:retrieveData} = firebase.database().ref(${1:/* path */}).orderByKey();", 115 | "description": "Order results by child keys." 116 | 117 | }, 118 | 119 | "Firebase limitToFirst":{ 120 | "prefix":"firelimittofirst", 121 | "body":["let ${0:postsRef} = firebase.database().ref(${1:/* path */}).limitToFirst(${2:number});", 122 | "//can be used with one order-by method and multiple limit or range functions" 123 | ], 124 | "description": "Sets the maximum number of items to return from the end of the ordered list of results." 125 | }, 126 | 127 | "Firebase limitToLast":{ 128 | "prefix":"firelimittolast", 129 | "body":[ "let ${0:postsRef} = firebase.database().ref(${1:/* path */}).limitToLast(${2:number});", 130 | "//can be used with one order-by method and multiple limit or range functions" 131 | ], 132 | "description": "Sets the maximum number of items to return from the beginning of the ordered list of results." 133 | }, 134 | 135 | "Firebase startAt":{ 136 | "prefix":"firestartAt", 137 | "body":[ "let ${0:postsRef} = firebase.database().ref(${1:/* path */}).startAt(${2:number});", 138 | "//can be used with one order-by method and multiple limit or range functions" 139 | ], 140 | "description":"Return items greater than or equal to the specified key or value, depending on the order-by method chosen." 141 | }, 142 | 143 | "firebase endAt":{ 144 | "prefix":"fireendat", 145 | "body":[ "let ${0:postsRef} = firebase.database().ref(${1:/* path */}).endAt(${2:number});", 146 | "//can be used with one order-by method and multiple limit or range functions" 147 | 148 | ], 149 | "description":"Return items less than or equal to the specified key or value, depending on the order-by method chosen." 150 | }, 151 | 152 | "firebase equalTo":{ 153 | "prefix":"fireequalto", 154 | "body":[ "let ${0:postsRef} = firebase.database().ref(${1:/* path */}).orderByChild(${2: /* child key */}).equalTo(${3:value});", 155 | "//can be used with one order-by method and multiple limit or range functions" 156 | ], 157 | "description": "Return items equal to the specified key or value, depending on the order-by method chosen." 158 | }, 159 | 160 | "firebase exists":{ 161 | "prefix":"fireexists", 162 | "body": "let ${0:child} = ${1: snapshot}.exists();", 163 | "description": "Returns true if this dataSnapshot contains any data" 164 | }, 165 | 166 | "firebase hasChild":{ 167 | "prefix":"firehaschild", 168 | "body":" let ${0:hasName} = ${1:snapshot}.hasChild(${2:/* name */}); ", 169 | "description":"Returns true if this datasnapshot contains the specified child" 170 | }, 171 | 172 | "firebase hasChildren":{ 173 | "prefix":"firehaschildren", 174 | "body":" let ${0:datas} = ${1:snapshot}.hasChildren(); ", 175 | "description":" Returns true is this datasnapshot contains any children" 176 | }, 177 | 178 | "firebase numChildren":{ 179 | "prefix":"firenumchildren", 180 | "body":" let ${0:numOfChildren} = ${1:snapshot}.numChildren();", 181 | "description":" Returns the number of child properties of this datasnapshot" 182 | }, 183 | 184 | "firebase detach listener":{ 185 | "prefix":"firedetach", 186 | "body":"${0:ref}.off(${1:eventType}, ${2:callback /* optional, callback function that was passed to on */});", 187 | "description":"Removing a listener" 188 | }, 189 | 190 | "firebase storage reference":{ 191 | "prefix":"firestorageref", 192 | "body": "let ${0:storage} = firebase.storage();", 193 | "description":"Get a reference to the storage service, which is used to create references in your storage bucket." 194 | }, 195 | 196 | "firebase storage child reference":{ 197 | "prefix":"firestoragechildref", 198 | "body":[ "var ${0:storage} = firebase.storage();", 199 | "var ${1:storageRef} = ${0:storage}.ref();", 200 | "var ${2:imagesRef} = ${3:storageRef}.child(${4: /* image path */});" 201 | ], 202 | "description": "Create a reference to a location lower in the tree, say 'images.jpg." 203 | }, 204 | 205 | "firebase storage url reference":{ 206 | "prefix":"firestorageurlref", 207 | "body":"let ${0:gsReference} = storage.refFromURL(${1: /* gs:// or https:// */});", 208 | "description":"Create a reference from a Google Cloud Storage URI or https url." 209 | }, 210 | 211 | "firebase download file":{ 212 | "prefix":"firestoragedownloadfile", 213 | "body":[ "${0:storageRef}.child(${1:/* path */}).getDownloadURL().then(function(url) {", 214 | "// `url` is the download URL for 'images/stars.jpg'", 215 | "//Download using `XMLHttpRequest()`", 216 | "}).catch(function(error) {", 217 | "// Handle any errors", 218 | "});" 219 | ], 220 | "description":"Getting the download file from firebase storage." 221 | }, 222 | 223 | "firebase delete file":{ 224 | "prefix":"firestoragedeletefile", 225 | "body": ["${0:storageRef}.delete().then(function() {", 226 | "// File deleted successfully", 227 | "}).catch(function(error) {", 228 | "//An error occurred!", 229 | " });" 230 | ], 231 | "description":"Delete a file" 232 | }, 233 | 234 | "firebase sign up":{ 235 | "prefix":"firesignupemail", 236 | "body":[ 237 | "firebase.auth().createUserWithEmailAndPassword(${0:email}, ${1:password}).catch(function(error) {", 238 | "// Handle Errors here.", 239 | "let ${2:errorCode} = error.code;", 240 | "let ${3:errorMessage} = error.message;", 241 | "});" 242 | ], 243 | "description":"Authenticate a new user using email and password" 244 | }, 245 | 246 | "firebase sign in":{ 247 | "prefix":"firesigninemail", 248 | "body":[ 249 | "firebase.auth().signInWithEmailAndPassword(${0:email}, ${1:password}).catch(function(error) {", 250 | "// Handle Errors here.", 251 | "let ${2:errorCode} = error.code;", 252 | "let ${3:errorMessage} = error.message;", 253 | "});" 254 | ], 255 | "description":"Sign in an existing user" 256 | }, 257 | 258 | "firebase Auth State":{ 259 | "prefix":"fireauthstate", 260 | "body":["firebase.auth().onAuthStateChanged(function(${0:user}) {", 261 | "${1: /* user information */}", 262 | "});" 263 | 264 | ], 265 | "description": "Attach an observer using onAuthStateChanged to retrieve user infomration." 266 | }, 267 | 268 | "firebase Current User":{ 269 | "prefix":"firecurrentuser", 270 | "body":[ 271 | "firebase.auth().onAuthStateChanged(function(${0:user}) { //or use firebase.auth().currentUser;", 272 | "if (user) {", 273 | " // User is signed in.", 274 | "} else {", 275 | "// No user is signed in.", 276 | "}", 277 | "});" 278 | ], 279 | "description":"Retrieves the currently logged in user" 280 | }, 281 | 282 | "firebase user profile":{ 283 | "prefix":"fireuserprofile", 284 | "body":[ 285 | "var ${0:user} = firebase.auth().currentUser;", 286 | "var ${1:name}, ${2:email}, ${3:photoUrl}, ${4:uid}, ${5:emailVerified};", 287 | 288 | "if (${0:user} != null) {", 289 | "${4:uid} = user.uid;", 290 | "}" 291 | ], 292 | "description": "Retrieves the user information." 293 | }, 294 | 295 | "firebase Update Profile":{ 296 | "prefix":"fireupdateprofile", 297 | "body": "${0:user}.updateProfile({${1:displayName}:${2:name}});", 298 | "description":"Updates the user profile" 299 | }, 300 | 301 | 302 | "firebase provider information":{ 303 | "prefix":"fireproviderinfo", 304 | "body":["${0:user}.providerData.forEach(function (${1:profile}) {", 305 | "/* retrieve provider info */", 306 | "});" 307 | ], 308 | "description":"Retrieves information from sign in provider." 309 | }, 310 | 311 | "firebase user email":{ 312 | "prefix":"fireupdateemail", 313 | "body":[ 314 | "${0:user}.updateEmail(${1:email}).then(function() {", 315 | "// Update successful.", 316 | "}).catch(function(error) {", 317 | "// An error happened.", 318 | " });" 319 | 320 | ], 321 | "description":"Set a user email address, the user must have signed in recently." 322 | }, 323 | 324 | "firebase Send Email Verification":{ 325 | "prefix":"fireemailverify", 326 | "body":[ 327 | "${0:user}.sendEmailVerification().then(function() {", 328 | "// sent email.", 329 | "}).catch(function(error) {", 330 | "// An error happened.", 331 | " });" 332 | ], 333 | "description":"Send an email verification to the user." 334 | }, 335 | 336 | "firebase set password":{ 337 | "prefix":"firesetpass", 338 | "body":[ 339 | "let ${0:newPassword} = getASecureRandomPassword();", 340 | "${1:user}.updatePassword(${2:newpassword}).then(function() {", 341 | "// Update successful.", 342 | "}).catch(function(error) {", 343 | "// An error happened.", 344 | " });" 345 | ], 346 | "description":"Set a user password, the user must have signed in recently" 347 | }, 348 | 349 | "firebase password reset":{ 350 | "prefix":"firepassreset", 351 | "body":[ 352 | "${1:auth}.sendPasswordResetEmail(${2:email}).then(function() {", 353 | "// Email Sent.", 354 | "}).catch(function(error) {", 355 | "// An error happened.", 356 | " });" 357 | ], 358 | 359 | "description":"Send a password reset email to a user" 360 | }, 361 | 362 | "firebase delete user":{ 363 | "prefix":"firedeleteuser", 364 | "body":[ 365 | "let ${1:user} = firebase.auth().currentUser;", 366 | "${1:user}.delete().then(function() {", 367 | "// Update Deleted.", 368 | "}).catch(function(error) {", 369 | "// An error happened.", 370 | " });" 371 | ], 372 | 373 | "description":"Delete a user account with the delete method." 374 | }, 375 | 376 | "firebase sign out":{ 377 | "prefix":"firesignout", 378 | "body":[ 379 | "firebase.auth().signOut().then(function() {", 380 | "// Sign-out successful.", 381 | "}).catch(function(error) {", 382 | "// An error happened.", 383 | "});" 384 | ], 385 | "description":"Sign out the user." 386 | }, 387 | 388 | "firebase google instance":{ 389 | "prefix":"firegoogleinstance", 390 | "body": "let ${0:provider} = new firebase.auth.GoogleAuthProvider();", 391 | "description":"Get instance of the google provider." 392 | }, 393 | 394 | "firebase provider Sign in":{ 395 | "prefix":"fireprovidersignin", 396 | "body":"firebase.auth().signInWithRedirect(${0:provider}); //for google,facebook,twitter, and github", 397 | "description":"Sign in with google" 398 | }, 399 | "firebase facebook instance":{ 400 | "prefix":"firefacebookinstance", 401 | "body":"let ${0:provider} = new firebase.auth.FacebookAuthProvider();", 402 | "description":"Get instance of facebook provider" 403 | }, 404 | "firebase twitter instance":{ 405 | "prefix":"firetwitterinstance", 406 | "body":"let ${0:provider} = new firebase.auth.TwitterAuthProvider();", 407 | "description":"Get instance of twitter provider" 408 | }, 409 | "firebase github instance":{ 410 | "prefix":"firegithubinstance", 411 | "body":"let ${0:provider} = new firebase.auth.GithubAuthProvider();", 412 | "description":"Get instance of github provider" 413 | }, 414 | 415 | "firebase custom auth":{ 416 | "prefix":"firecustomauth", 417 | "body":[ 418 | "firebase.auth().signInWithCustomToken(${0:token}).catch(function(${1:error}) {", 419 | "// Handle Errors here.", 420 | "let ${2:errorCode} = error.code;", 421 | "let ${3:errorMessage} = error.message;", 422 | "// ...", 423 | "});" 424 | ], 425 | "description":"Sign in the user using custom authentication" 426 | }, 427 | "firebase anonymously":{ 428 | "prefix":"fireanonymously", 429 | "body":[ 430 | "firebase.auth().signInAnonymously().catch(function(error) {", 431 | "// Handle Errors here.", 432 | "let ${1:errorCode} = error.code;", 433 | "let ${2:errorMessage} = error.message;", 434 | "// ...", 435 | "});" 436 | ], 437 | "description":"Sign in the user anonymously" 438 | }, 439 | "firestore Initialize":{ 440 | "prefix":"initializefirestore", 441 | "body":"let ${0:db} = firebase.firestore();", 442 | "description":"Initialize Cloud Firestore through Firebase." 443 | }, 444 | "firestore add data":{ 445 | "prefix":"adddatafirestore", 446 | "body":[ 447 | "${0:db}.collection(${1:/* collection */}).add({ //add creates a unique id for you", 448 | "${2:attribute}: ${3:value}", 449 | "})", 450 | ".then(function(docRef) {", 451 | "${4: /* log data */}", 452 | "})", 453 | ".catch(function(error) {", 454 | "${5:/* error */}", 455 | "});" 456 | ], 457 | "description":"Creating a new collection and document in firestore." 458 | }, 459 | "firestore read data":{ 460 | "prefix":"readdatafirestore", 461 | "body":[ 462 | "${0:db}.collection(${1:/* collection_name */}).get().then((${2:querySnapshot}) => {", 463 | "${2:querySnapshot}.forEach((doc) => {", 464 | "${3:/* log the data */}", 465 | " });", 466 | " });" 467 | ], 468 | "description":"Read data from a collection in firestore" 469 | }, 470 | 471 | "firestore set data":{ 472 | "prefix":"setdatafirestore", 473 | "body":[ 474 | "${0:db}.collection(${1:/* collection_name */}).doc(${2:/* document_name */}).set({", 475 | "${3:attribute}: ${4:value}", 476 | " });" 477 | 478 | ], 479 | "description":"Creates or overwrite a single document, use the `set()` method" 480 | }, 481 | 482 | "firestore reference":{ 483 | "prefix":"referencefirestore", 484 | "body":"let ${0:docRef} = ${1:db}.collection(${2:/* collection_name */}).doc(${3: /* document_name */});", 485 | "description":"Add firestore reference" 486 | }, 487 | "firestore update document":{ 488 | "prefix":"updatefirestore", 489 | "body":[ 490 | "var ${0:ref} = ${1:db}.collection(${2:/* collection_name */}).doc(${3: /* document_name */});", 491 | "return ${0:ref}.update({", 492 | "${4:attribute}:${5:newValue}", 493 | "})", 494 | ".then(function() {", 495 | " })", 496 | " .catch(function(${6:error}) {", 497 | "// The document probably doesn't exist.", 498 | "console.error(${6:error});", 499 | " });" 500 | 501 | ], 502 | "description":"Update the document in firestore." 503 | }, 504 | 505 | "firestore delete document":{ 506 | "prefix":"deletedocfirestore", 507 | "body":[ 508 | "${0:db}.collection(${2:/* collection_name */}).doc(${3: /* document_name */}).delete().then(function() {", 509 | "${4:/* log the data */}", 510 | "}).catch(function(error) {", 511 | "console.error(${5:error});", 512 | "});" 513 | ], 514 | "description":"Delete a document in firestore" 515 | }, 516 | 517 | "firestore delete a field":{ 518 | "prefix":"deletefieldfirestore", 519 | "body":[ 520 | "let ${0:ref}= ${1:db}.collection(${2:/* collection_name */}).doc(${3: /* document_name */});", 521 | "let ${4:removeField} = ${5:ref}.update({", 522 | "${6:fieldName}: firebase.firestore.FieldValue.delete()", 523 | " });" 524 | ], 525 | "description":"Delete a field in firestore document." 526 | }, 527 | "firestore add an element to an array field":{ 528 | "prefix":"arrayunionfieldfirestore", 529 | "body":[ 530 | "let ${0:ref}= ${1:db}.collection(${2:/* collection_name */}).doc(${3: /* document_name */});", 531 | "let ${4:addField} = ${5:ref}.update({", 532 | "${6:fieldName}: firebase.firestore.FieldValue.arrayUnion(${7: /* field_name */})", 533 | " });" 534 | ], 535 | "description":"Add an element to an array field" 536 | }, 537 | "firestore remove an element from array field":{ 538 | "prefix":"arrayremovefieldfirestore", 539 | "body":[ 540 | "let ${0:ref}= ${1:db}.collection(${2:/* collection_name */}).doc(${3: /* document_name */});", 541 | "let ${4:removeField} = ${5:ref}.update({", 542 | "${6:fieldName}: firebase.firestore.FieldValue.arrayRemove(${7: /* field_name */})", 543 | " });" 544 | ], 545 | "description":"Remove an element from array field" 546 | }, 547 | "firestore increment numeric field":{ 548 | "prefix":"incrementfieldfirestore", 549 | "body":[ 550 | "let ${0:ref}= ${1:db}.collection(${2:/* collection_name */}).doc(${3: /* document_name */});", 551 | "let ${4:incrementField} = ${5:ref}.update({", 552 | "${6:fieldName}: firebase.firestore.FieldValue.increment(${7: /* number */})", 553 | " });" 554 | ], 555 | "description":"Increment or decrement a numeric field value" 556 | }, 557 | 558 | "firestore where query":{ 559 | "prefix":"wherefirestore", 560 | "body":[ 561 | "// Create a query against the collection.", 562 | "let ${1:query} = ${0:ref}.where(${2:/*field_name */}, ${3:/* == */}, ${4:/* value */});" 563 | 564 | ], 565 | "description":"where query in firestore" 566 | }, 567 | 568 | "firestore array contains":{ 569 | "prefix":"arraycontainsfirestore", 570 | "body":[ 571 | " ${0:ref}.where(${1:/* field name */}, ${2:array-contains}, ${3:/* value */})" 572 | ], 573 | "description":" Using `array-contains` it filters based on array value" 574 | 575 | }, 576 | 577 | "firestore limit":{ 578 | "prefix":"limitfirestore", 579 | "body": "${0:ref}.orderBy(${1:/* fieldname */}).limit(${2: /* number */});", 580 | "description": "Retrieves the first three value of the field." 581 | }, 582 | "firestore order multiple fields":{ 583 | "prefix":"ordermultifirestore", 584 | "body":[ 585 | "${0:ref}.orderBy(${1:/* fieldname */}).orderBy(${2: /* name */}, ${3: /* desc */});" 586 | ], 587 | "description":"Order by multiple fields in firestore." 588 | }, 589 | 590 | "firestore Listen to Changes":{ 591 | "prefix":"realtimeupdatefirestore", 592 | "body":[ 593 | "${0:db}.collection(${1:/* collection_name */}).doc(${2:/* collection_name */})", 594 | ".onSnapshot(function(${3:doc}) {", 595 | "console.log(${3:doc}.data());", 596 | " });" 597 | ], 598 | "description":"Listens for realtime changes on a document using `onSnapshot`" 599 | } 600 | 601 | } 602 | 603 | 604 | --------------------------------------------------------------------------------