├── .gitignore ├── README.md ├── api ├── .env.example ├── .gitignore ├── package-lock.json ├── package.json ├── src │ ├── constants.ts │ ├── entities │ │ ├── Todo.ts │ │ └── User.ts │ ├── index.ts │ ├── isAuth.ts │ └── types │ │ ├── env.d.ts │ │ └── extend-express.d.ts └── tsconfig.json └── extension ├── .eslintrc.json ├── .vscode ├── extensions.json ├── launch.json ├── settings.json └── tasks.json ├── .vscodeignore ├── CHANGELOG.md ├── README.md ├── build └── node-extension.webpack.config.js ├── media ├── checklist.svg ├── main.js ├── reset.css └── vscode.css ├── package-lock.json ├── package.json ├── rollup.config.js ├── src ├── HelloWorldPanel.ts ├── SidebarProvider.ts ├── TokenManager.ts ├── authenticate.ts ├── constants.ts ├── extension.ts └── getNonce.ts ├── tsconfig.json ├── vsc-extension-quickstart.md └── webviews ├── components ├── HelloWorld.svelte ├── Sidebar.svelte └── Todos.svelte ├── globals.d.ts ├── pages ├── HelloWorld.ts └── sidebar.ts ├── tsconfig.json └── types.ts /.gitignore: -------------------------------------------------------------------------------- 1 | out 2 | dist 3 | node_modules 4 | .vscode-test/ 5 | *.vsix 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vstodo 2 | 3 | code for https://www.youtube.com/watch?v=a5DX5pQ9p5M&t 4 | -------------------------------------------------------------------------------- /api/.env.example: -------------------------------------------------------------------------------- 1 | GITHUB_CLIENT_SECRET= 2 | GITHUB_CLIENT_ID= 3 | ACCESS_TOKEN_SECRET= -------------------------------------------------------------------------------- /api/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | .env -------------------------------------------------------------------------------- /api/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vstodo-api", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@sindresorhus/is": { 8 | "version": "0.14.0", 9 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", 10 | "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", 11 | "dev": true 12 | }, 13 | "@sqltools/formatter": { 14 | "version": "1.2.2", 15 | "resolved": "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.2.tgz", 16 | "integrity": "sha512-/5O7Fq6Vnv8L6ucmPjaWbVG1XkP4FO+w5glqfkIsq3Xw4oyNAdJddbnYodNDAfjVUvo/rrSCTom4kAND7T1o5Q==" 17 | }, 18 | "@szmarczak/http-timer": { 19 | "version": "1.1.2", 20 | "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", 21 | "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", 22 | "dev": true, 23 | "requires": { 24 | "defer-to-connect": "^1.0.1" 25 | } 26 | }, 27 | "@types/body-parser": { 28 | "version": "1.19.0", 29 | "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz", 30 | "integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==", 31 | "dev": true, 32 | "requires": { 33 | "@types/connect": "*", 34 | "@types/node": "*" 35 | } 36 | }, 37 | "@types/connect": { 38 | "version": "3.4.34", 39 | "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.34.tgz", 40 | "integrity": "sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ==", 41 | "dev": true, 42 | "requires": { 43 | "@types/node": "*" 44 | } 45 | }, 46 | "@types/cors": { 47 | "version": "2.8.9", 48 | "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.9.tgz", 49 | "integrity": "sha512-zurD1ibz21BRlAOIKP8yhrxlqKx6L9VCwkB5kMiP6nZAhoF5MvC7qS1qPA7nRcr1GJolfkQC7/EAL4hdYejLtg==", 50 | "dev": true 51 | }, 52 | "@types/express": { 53 | "version": "4.17.9", 54 | "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.9.tgz", 55 | "integrity": "sha512-SDzEIZInC4sivGIFY4Sz1GG6J9UObPwCInYJjko2jzOf/Imx/dlpume6Xxwj1ORL82tBbmN4cPDIDkLbWHk9hw==", 56 | "dev": true, 57 | "requires": { 58 | "@types/body-parser": "*", 59 | "@types/express-serve-static-core": "*", 60 | "@types/qs": "*", 61 | "@types/serve-static": "*" 62 | } 63 | }, 64 | "@types/express-serve-static-core": { 65 | "version": "4.17.17", 66 | "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.17.tgz", 67 | "integrity": "sha512-YYlVaCni5dnHc+bLZfY908IG1+x5xuibKZMGv8srKkvtul3wUuanYvpIj9GXXoWkQbaAdR+kgX46IETKUALWNQ==", 68 | "dev": true, 69 | "requires": { 70 | "@types/node": "*", 71 | "@types/qs": "*", 72 | "@types/range-parser": "*" 73 | } 74 | }, 75 | "@types/jsonwebtoken": { 76 | "version": "8.5.0", 77 | "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.0.tgz", 78 | "integrity": "sha512-9bVao7LvyorRGZCw0VmH/dr7Og+NdjYSsKAxB43OQoComFbBgsEpoR9JW6+qSq/ogwVBg8GI2MfAlk4SYI4OLg==", 79 | "dev": true, 80 | "requires": { 81 | "@types/node": "*" 82 | } 83 | }, 84 | "@types/mime": { 85 | "version": "2.0.3", 86 | "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.3.tgz", 87 | "integrity": "sha512-Jus9s4CDbqwocc5pOAnh8ShfrnMcPHuJYzVcSUU7lrh8Ni5HuIqX3oilL86p3dlTrk0LzHRCgA/GQ7uNCw6l2Q==", 88 | "dev": true 89 | }, 90 | "@types/node": { 91 | "version": "14.14.14", 92 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.14.tgz", 93 | "integrity": "sha512-UHnOPWVWV1z+VV8k6L1HhG7UbGBgIdghqF3l9Ny9ApPghbjICXkUJSd/b9gOgQfjM1r+37cipdw/HJ3F6ICEnQ==", 94 | "dev": true 95 | }, 96 | "@types/oauth": { 97 | "version": "0.9.1", 98 | "resolved": "https://registry.npmjs.org/@types/oauth/-/oauth-0.9.1.tgz", 99 | "integrity": "sha512-a1iY62/a3yhZ7qH7cNUsxoI3U/0Fe9+RnuFrpTKr+0WVOzbKlSLojShCKe20aOD1Sppv+i8Zlq0pLDuTJnwS4A==", 100 | "dev": true, 101 | "requires": { 102 | "@types/node": "*" 103 | } 104 | }, 105 | "@types/passport": { 106 | "version": "1.0.4", 107 | "resolved": "https://registry.npmjs.org/@types/passport/-/passport-1.0.4.tgz", 108 | "integrity": "sha512-h5OfAbfBBYSzjeU0GTuuqYEk9McTgWeGQql9g3gUw2/NNCfD7VgExVRYJVVeU13Twn202Mvk9BT0bUrl30sEgA==", 109 | "dev": true, 110 | "requires": { 111 | "@types/express": "*" 112 | } 113 | }, 114 | "@types/passport-github": { 115 | "version": "1.1.5", 116 | "resolved": "https://registry.npmjs.org/@types/passport-github/-/passport-github-1.1.5.tgz", 117 | "integrity": "sha512-BeWDdLRWfPpJcmT1XofY5r1Av//TcxBEgllY4LnArcYdGqbIIVLyHwR+8bIG+ZC4PwJ6W1trnVEG3EQ+5J+Jmw==", 118 | "dev": true, 119 | "requires": { 120 | "@types/express": "*", 121 | "@types/passport": "*", 122 | "@types/passport-oauth2": "*" 123 | } 124 | }, 125 | "@types/passport-oauth2": { 126 | "version": "1.4.9", 127 | "resolved": "https://registry.npmjs.org/@types/passport-oauth2/-/passport-oauth2-1.4.9.tgz", 128 | "integrity": "sha512-QP0q+NVQOaIu2r0e10QWkiUA0Ya5mOBHRJN0UrI+LolMLOP1/VN4EVIpJ3xVwFo+xqNFRoFvFwJhBvKnk7kpUA==", 129 | "dev": true, 130 | "requires": { 131 | "@types/express": "*", 132 | "@types/oauth": "*", 133 | "@types/passport": "*" 134 | } 135 | }, 136 | "@types/qs": { 137 | "version": "6.9.5", 138 | "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.5.tgz", 139 | "integrity": "sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ==", 140 | "dev": true 141 | }, 142 | "@types/range-parser": { 143 | "version": "1.2.3", 144 | "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", 145 | "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==", 146 | "dev": true 147 | }, 148 | "@types/serve-static": { 149 | "version": "1.13.8", 150 | "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.8.tgz", 151 | "integrity": "sha512-MoJhSQreaVoL+/hurAZzIm8wafFR6ajiTM1m4A0kv6AGeVBl4r4pOV8bGFrjjq1sGxDTnCoF8i22o0/aE5XCyA==", 152 | "dev": true, 153 | "requires": { 154 | "@types/mime": "*", 155 | "@types/node": "*" 156 | } 157 | }, 158 | "abbrev": { 159 | "version": "1.1.1", 160 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 161 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", 162 | "dev": true 163 | }, 164 | "accepts": { 165 | "version": "1.3.7", 166 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", 167 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", 168 | "requires": { 169 | "mime-types": "~2.1.24", 170 | "negotiator": "0.6.2" 171 | } 172 | }, 173 | "ansi-align": { 174 | "version": "3.0.0", 175 | "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", 176 | "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", 177 | "dev": true, 178 | "requires": { 179 | "string-width": "^3.0.0" 180 | }, 181 | "dependencies": { 182 | "string-width": { 183 | "version": "3.1.0", 184 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 185 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 186 | "dev": true, 187 | "requires": { 188 | "emoji-regex": "^7.0.1", 189 | "is-fullwidth-code-point": "^2.0.0", 190 | "strip-ansi": "^5.1.0" 191 | } 192 | } 193 | } 194 | }, 195 | "ansi-regex": { 196 | "version": "4.1.0", 197 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 198 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 199 | "dev": true 200 | }, 201 | "ansi-styles": { 202 | "version": "4.3.0", 203 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 204 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 205 | "requires": { 206 | "color-convert": "^2.0.1" 207 | } 208 | }, 209 | "any-promise": { 210 | "version": "1.3.0", 211 | "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", 212 | "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" 213 | }, 214 | "anymatch": { 215 | "version": "3.1.1", 216 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", 217 | "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", 218 | "dev": true, 219 | "requires": { 220 | "normalize-path": "^3.0.0", 221 | "picomatch": "^2.0.4" 222 | } 223 | }, 224 | "app-root-path": { 225 | "version": "3.0.0", 226 | "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.0.0.tgz", 227 | "integrity": "sha512-qMcx+Gy2UZynHjOHOIXPNvpf+9cjvk3cWrBBK7zg4gH9+clobJRb9NGzcT7mQTcV/6Gm/1WelUtqxVXnNlrwcw==" 228 | }, 229 | "argparse": { 230 | "version": "1.0.10", 231 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 232 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 233 | "requires": { 234 | "sprintf-js": "~1.0.2" 235 | } 236 | }, 237 | "array-flatten": { 238 | "version": "1.1.1", 239 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 240 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 241 | }, 242 | "balanced-match": { 243 | "version": "1.0.0", 244 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 245 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 246 | }, 247 | "base64-js": { 248 | "version": "1.5.1", 249 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 250 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" 251 | }, 252 | "base64url": { 253 | "version": "3.0.1", 254 | "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", 255 | "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" 256 | }, 257 | "binary-extensions": { 258 | "version": "2.1.0", 259 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", 260 | "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", 261 | "dev": true 262 | }, 263 | "body-parser": { 264 | "version": "1.19.0", 265 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", 266 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", 267 | "requires": { 268 | "bytes": "3.1.0", 269 | "content-type": "~1.0.4", 270 | "debug": "2.6.9", 271 | "depd": "~1.1.2", 272 | "http-errors": "1.7.2", 273 | "iconv-lite": "0.4.24", 274 | "on-finished": "~2.3.0", 275 | "qs": "6.7.0", 276 | "raw-body": "2.4.0", 277 | "type-is": "~1.6.17" 278 | } 279 | }, 280 | "boxen": { 281 | "version": "4.2.0", 282 | "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", 283 | "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", 284 | "dev": true, 285 | "requires": { 286 | "ansi-align": "^3.0.0", 287 | "camelcase": "^5.3.1", 288 | "chalk": "^3.0.0", 289 | "cli-boxes": "^2.2.0", 290 | "string-width": "^4.1.0", 291 | "term-size": "^2.1.0", 292 | "type-fest": "^0.8.1", 293 | "widest-line": "^3.1.0" 294 | } 295 | }, 296 | "brace-expansion": { 297 | "version": "1.1.11", 298 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 299 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 300 | "requires": { 301 | "balanced-match": "^1.0.0", 302 | "concat-map": "0.0.1" 303 | } 304 | }, 305 | "braces": { 306 | "version": "3.0.2", 307 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 308 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 309 | "dev": true, 310 | "requires": { 311 | "fill-range": "^7.0.1" 312 | } 313 | }, 314 | "buffer": { 315 | "version": "5.7.1", 316 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", 317 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", 318 | "requires": { 319 | "base64-js": "^1.3.1", 320 | "ieee754": "^1.1.13" 321 | } 322 | }, 323 | "buffer-equal-constant-time": { 324 | "version": "1.0.1", 325 | "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", 326 | "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" 327 | }, 328 | "buffer-writer": { 329 | "version": "2.0.0", 330 | "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", 331 | "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==" 332 | }, 333 | "bytes": { 334 | "version": "3.1.0", 335 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", 336 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" 337 | }, 338 | "cacheable-request": { 339 | "version": "6.1.0", 340 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", 341 | "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", 342 | "dev": true, 343 | "requires": { 344 | "clone-response": "^1.0.2", 345 | "get-stream": "^5.1.0", 346 | "http-cache-semantics": "^4.0.0", 347 | "keyv": "^3.0.0", 348 | "lowercase-keys": "^2.0.0", 349 | "normalize-url": "^4.1.0", 350 | "responselike": "^1.0.2" 351 | }, 352 | "dependencies": { 353 | "get-stream": { 354 | "version": "5.2.0", 355 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 356 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 357 | "dev": true, 358 | "requires": { 359 | "pump": "^3.0.0" 360 | } 361 | }, 362 | "lowercase-keys": { 363 | "version": "2.0.0", 364 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", 365 | "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", 366 | "dev": true 367 | } 368 | } 369 | }, 370 | "camelcase": { 371 | "version": "5.3.1", 372 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 373 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" 374 | }, 375 | "chalk": { 376 | "version": "3.0.0", 377 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", 378 | "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", 379 | "dev": true, 380 | "requires": { 381 | "ansi-styles": "^4.1.0", 382 | "supports-color": "^7.1.0" 383 | }, 384 | "dependencies": { 385 | "has-flag": { 386 | "version": "4.0.0", 387 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 388 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 389 | "dev": true 390 | }, 391 | "supports-color": { 392 | "version": "7.2.0", 393 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 394 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 395 | "dev": true, 396 | "requires": { 397 | "has-flag": "^4.0.0" 398 | } 399 | } 400 | } 401 | }, 402 | "chokidar": { 403 | "version": "3.4.3", 404 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", 405 | "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", 406 | "dev": true, 407 | "requires": { 408 | "anymatch": "~3.1.1", 409 | "braces": "~3.0.2", 410 | "fsevents": "~2.1.2", 411 | "glob-parent": "~5.1.0", 412 | "is-binary-path": "~2.1.0", 413 | "is-glob": "~4.0.1", 414 | "normalize-path": "~3.0.0", 415 | "readdirp": "~3.5.0" 416 | } 417 | }, 418 | "ci-info": { 419 | "version": "2.0.0", 420 | "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", 421 | "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", 422 | "dev": true 423 | }, 424 | "cli-boxes": { 425 | "version": "2.2.1", 426 | "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", 427 | "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", 428 | "dev": true 429 | }, 430 | "cli-highlight": { 431 | "version": "2.1.9", 432 | "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.9.tgz", 433 | "integrity": "sha512-t8RNIZgiI24i/mslZ8XT8o660RUj5ZbUJpEZrZa/BNekTzdC2LfMRAnt0Y7sgzNM4FGW5tmWg/YnbTH8o1eIOQ==", 434 | "requires": { 435 | "chalk": "^4.0.0", 436 | "highlight.js": "^10.0.0", 437 | "mz": "^2.4.0", 438 | "parse5": "^5.1.1", 439 | "parse5-htmlparser2-tree-adapter": "^6.0.0", 440 | "yargs": "^15.0.0" 441 | }, 442 | "dependencies": { 443 | "chalk": { 444 | "version": "4.1.0", 445 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", 446 | "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", 447 | "requires": { 448 | "ansi-styles": "^4.1.0", 449 | "supports-color": "^7.1.0" 450 | } 451 | }, 452 | "has-flag": { 453 | "version": "4.0.0", 454 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 455 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" 456 | }, 457 | "supports-color": { 458 | "version": "7.2.0", 459 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 460 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 461 | "requires": { 462 | "has-flag": "^4.0.0" 463 | } 464 | }, 465 | "yargs": { 466 | "version": "15.4.1", 467 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", 468 | "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", 469 | "requires": { 470 | "cliui": "^6.0.0", 471 | "decamelize": "^1.2.0", 472 | "find-up": "^4.1.0", 473 | "get-caller-file": "^2.0.1", 474 | "require-directory": "^2.1.1", 475 | "require-main-filename": "^2.0.0", 476 | "set-blocking": "^2.0.0", 477 | "string-width": "^4.2.0", 478 | "which-module": "^2.0.0", 479 | "y18n": "^4.0.0", 480 | "yargs-parser": "^18.1.2" 481 | } 482 | } 483 | } 484 | }, 485 | "cliui": { 486 | "version": "6.0.0", 487 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", 488 | "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", 489 | "requires": { 490 | "string-width": "^4.2.0", 491 | "strip-ansi": "^6.0.0", 492 | "wrap-ansi": "^6.2.0" 493 | }, 494 | "dependencies": { 495 | "ansi-regex": { 496 | "version": "5.0.0", 497 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 498 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" 499 | }, 500 | "strip-ansi": { 501 | "version": "6.0.0", 502 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 503 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 504 | "requires": { 505 | "ansi-regex": "^5.0.0" 506 | } 507 | } 508 | } 509 | }, 510 | "clone-response": { 511 | "version": "1.0.2", 512 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", 513 | "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", 514 | "dev": true, 515 | "requires": { 516 | "mimic-response": "^1.0.0" 517 | } 518 | }, 519 | "color-convert": { 520 | "version": "2.0.1", 521 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 522 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 523 | "requires": { 524 | "color-name": "~1.1.4" 525 | } 526 | }, 527 | "color-name": { 528 | "version": "1.1.4", 529 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 530 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 531 | }, 532 | "concat-map": { 533 | "version": "0.0.1", 534 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 535 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 536 | }, 537 | "configstore": { 538 | "version": "5.0.1", 539 | "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", 540 | "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", 541 | "dev": true, 542 | "requires": { 543 | "dot-prop": "^5.2.0", 544 | "graceful-fs": "^4.1.2", 545 | "make-dir": "^3.0.0", 546 | "unique-string": "^2.0.0", 547 | "write-file-atomic": "^3.0.0", 548 | "xdg-basedir": "^4.0.0" 549 | } 550 | }, 551 | "content-disposition": { 552 | "version": "0.5.3", 553 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", 554 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", 555 | "requires": { 556 | "safe-buffer": "5.1.2" 557 | } 558 | }, 559 | "content-type": { 560 | "version": "1.0.4", 561 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 562 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 563 | }, 564 | "cookie": { 565 | "version": "0.4.0", 566 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", 567 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" 568 | }, 569 | "cookie-signature": { 570 | "version": "1.0.6", 571 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 572 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 573 | }, 574 | "cors": { 575 | "version": "2.8.5", 576 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", 577 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", 578 | "requires": { 579 | "object-assign": "^4", 580 | "vary": "^1" 581 | } 582 | }, 583 | "crypto-random-string": { 584 | "version": "2.0.0", 585 | "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", 586 | "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", 587 | "dev": true 588 | }, 589 | "debug": { 590 | "version": "2.6.9", 591 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 592 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 593 | "requires": { 594 | "ms": "2.0.0" 595 | } 596 | }, 597 | "decamelize": { 598 | "version": "1.2.0", 599 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 600 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" 601 | }, 602 | "decompress-response": { 603 | "version": "3.3.0", 604 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", 605 | "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", 606 | "dev": true, 607 | "requires": { 608 | "mimic-response": "^1.0.0" 609 | } 610 | }, 611 | "deep-extend": { 612 | "version": "0.6.0", 613 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 614 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", 615 | "dev": true 616 | }, 617 | "defer-to-connect": { 618 | "version": "1.1.3", 619 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", 620 | "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", 621 | "dev": true 622 | }, 623 | "depd": { 624 | "version": "1.1.2", 625 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 626 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 627 | }, 628 | "destroy": { 629 | "version": "1.0.4", 630 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 631 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 632 | }, 633 | "dot-prop": { 634 | "version": "5.3.0", 635 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", 636 | "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", 637 | "dev": true, 638 | "requires": { 639 | "is-obj": "^2.0.0" 640 | } 641 | }, 642 | "dotenv": { 643 | "version": "8.2.0", 644 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", 645 | "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" 646 | }, 647 | "dotenv-safe": { 648 | "version": "8.2.0", 649 | "resolved": "https://registry.npmjs.org/dotenv-safe/-/dotenv-safe-8.2.0.tgz", 650 | "integrity": "sha512-uWwWWdUQkSs5a3mySDB22UtNwyEYi0JtEQu+vDzIqr9OjbDdC2Ip13PnSpi/fctqlYmzkxCeabiyCAOROuAIaA==", 651 | "requires": { 652 | "dotenv": "^8.2.0" 653 | } 654 | }, 655 | "duplexer3": { 656 | "version": "0.1.4", 657 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", 658 | "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", 659 | "dev": true 660 | }, 661 | "ecdsa-sig-formatter": { 662 | "version": "1.0.11", 663 | "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", 664 | "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", 665 | "requires": { 666 | "safe-buffer": "^5.0.1" 667 | } 668 | }, 669 | "ee-first": { 670 | "version": "1.1.1", 671 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 672 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 673 | }, 674 | "emoji-regex": { 675 | "version": "7.0.3", 676 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 677 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", 678 | "dev": true 679 | }, 680 | "encodeurl": { 681 | "version": "1.0.2", 682 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 683 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 684 | }, 685 | "end-of-stream": { 686 | "version": "1.4.4", 687 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 688 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 689 | "dev": true, 690 | "requires": { 691 | "once": "^1.4.0" 692 | } 693 | }, 694 | "escalade": { 695 | "version": "3.1.1", 696 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 697 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" 698 | }, 699 | "escape-goat": { 700 | "version": "2.1.1", 701 | "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", 702 | "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", 703 | "dev": true 704 | }, 705 | "escape-html": { 706 | "version": "1.0.3", 707 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 708 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 709 | }, 710 | "escape-string-regexp": { 711 | "version": "1.0.5", 712 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 713 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 714 | }, 715 | "esprima": { 716 | "version": "4.0.1", 717 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 718 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" 719 | }, 720 | "etag": { 721 | "version": "1.8.1", 722 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 723 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 724 | }, 725 | "express": { 726 | "version": "4.17.1", 727 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", 728 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", 729 | "requires": { 730 | "accepts": "~1.3.7", 731 | "array-flatten": "1.1.1", 732 | "body-parser": "1.19.0", 733 | "content-disposition": "0.5.3", 734 | "content-type": "~1.0.4", 735 | "cookie": "0.4.0", 736 | "cookie-signature": "1.0.6", 737 | "debug": "2.6.9", 738 | "depd": "~1.1.2", 739 | "encodeurl": "~1.0.2", 740 | "escape-html": "~1.0.3", 741 | "etag": "~1.8.1", 742 | "finalhandler": "~1.1.2", 743 | "fresh": "0.5.2", 744 | "merge-descriptors": "1.0.1", 745 | "methods": "~1.1.2", 746 | "on-finished": "~2.3.0", 747 | "parseurl": "~1.3.3", 748 | "path-to-regexp": "0.1.7", 749 | "proxy-addr": "~2.0.5", 750 | "qs": "6.7.0", 751 | "range-parser": "~1.2.1", 752 | "safe-buffer": "5.1.2", 753 | "send": "0.17.1", 754 | "serve-static": "1.14.1", 755 | "setprototypeof": "1.1.1", 756 | "statuses": "~1.5.0", 757 | "type-is": "~1.6.18", 758 | "utils-merge": "1.0.1", 759 | "vary": "~1.1.2" 760 | } 761 | }, 762 | "figlet": { 763 | "version": "1.5.0", 764 | "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.5.0.tgz", 765 | "integrity": "sha512-ZQJM4aifMpz6H19AW1VqvZ7l4pOE9p7i/3LyxgO2kp+PO/VcDYNqIHEMtkccqIhTXMKci4kjueJr/iCQEaT/Ww==" 766 | }, 767 | "fill-range": { 768 | "version": "7.0.1", 769 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 770 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 771 | "dev": true, 772 | "requires": { 773 | "to-regex-range": "^5.0.1" 774 | } 775 | }, 776 | "finalhandler": { 777 | "version": "1.1.2", 778 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", 779 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", 780 | "requires": { 781 | "debug": "2.6.9", 782 | "encodeurl": "~1.0.2", 783 | "escape-html": "~1.0.3", 784 | "on-finished": "~2.3.0", 785 | "parseurl": "~1.3.3", 786 | "statuses": "~1.5.0", 787 | "unpipe": "~1.0.0" 788 | } 789 | }, 790 | "find-up": { 791 | "version": "4.1.0", 792 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 793 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 794 | "requires": { 795 | "locate-path": "^5.0.0", 796 | "path-exists": "^4.0.0" 797 | } 798 | }, 799 | "forwarded": { 800 | "version": "0.1.2", 801 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", 802 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" 803 | }, 804 | "fresh": { 805 | "version": "0.5.2", 806 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 807 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 808 | }, 809 | "fs.realpath": { 810 | "version": "1.0.0", 811 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 812 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 813 | }, 814 | "fsevents": { 815 | "version": "2.1.3", 816 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", 817 | "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", 818 | "dev": true, 819 | "optional": true 820 | }, 821 | "get-caller-file": { 822 | "version": "2.0.5", 823 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 824 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" 825 | }, 826 | "get-stream": { 827 | "version": "4.1.0", 828 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", 829 | "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", 830 | "dev": true, 831 | "requires": { 832 | "pump": "^3.0.0" 833 | } 834 | }, 835 | "glob": { 836 | "version": "7.1.6", 837 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 838 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 839 | "requires": { 840 | "fs.realpath": "^1.0.0", 841 | "inflight": "^1.0.4", 842 | "inherits": "2", 843 | "minimatch": "^3.0.4", 844 | "once": "^1.3.0", 845 | "path-is-absolute": "^1.0.0" 846 | } 847 | }, 848 | "glob-parent": { 849 | "version": "5.1.1", 850 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", 851 | "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", 852 | "dev": true, 853 | "requires": { 854 | "is-glob": "^4.0.1" 855 | } 856 | }, 857 | "global-dirs": { 858 | "version": "2.1.0", 859 | "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", 860 | "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", 861 | "dev": true, 862 | "requires": { 863 | "ini": "1.3.7" 864 | } 865 | }, 866 | "got": { 867 | "version": "9.6.0", 868 | "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", 869 | "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", 870 | "dev": true, 871 | "requires": { 872 | "@sindresorhus/is": "^0.14.0", 873 | "@szmarczak/http-timer": "^1.1.2", 874 | "cacheable-request": "^6.0.0", 875 | "decompress-response": "^3.3.0", 876 | "duplexer3": "^0.1.4", 877 | "get-stream": "^4.1.0", 878 | "lowercase-keys": "^1.0.1", 879 | "mimic-response": "^1.0.1", 880 | "p-cancelable": "^1.0.0", 881 | "to-readable-stream": "^1.0.0", 882 | "url-parse-lax": "^3.0.0" 883 | } 884 | }, 885 | "graceful-fs": { 886 | "version": "4.2.4", 887 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", 888 | "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", 889 | "dev": true 890 | }, 891 | "has-ansi": { 892 | "version": "2.0.0", 893 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 894 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 895 | "requires": { 896 | "ansi-regex": "^2.0.0" 897 | }, 898 | "dependencies": { 899 | "ansi-regex": { 900 | "version": "2.1.1", 901 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 902 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" 903 | } 904 | } 905 | }, 906 | "has-flag": { 907 | "version": "3.0.0", 908 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 909 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 910 | "dev": true 911 | }, 912 | "has-yarn": { 913 | "version": "2.1.0", 914 | "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", 915 | "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", 916 | "dev": true 917 | }, 918 | "highlight.js": { 919 | "version": "10.4.1", 920 | "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.4.1.tgz", 921 | "integrity": "sha512-yR5lWvNz7c85OhVAEAeFhVCc/GV4C30Fjzc/rCP0aCWzc1UUOPUk55dK/qdwTZHBvMZo+eZ2jpk62ndX/xMFlg==" 922 | }, 923 | "http-cache-semantics": { 924 | "version": "4.1.0", 925 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", 926 | "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", 927 | "dev": true 928 | }, 929 | "http-errors": { 930 | "version": "1.7.2", 931 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", 932 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", 933 | "requires": { 934 | "depd": "~1.1.2", 935 | "inherits": "2.0.3", 936 | "setprototypeof": "1.1.1", 937 | "statuses": ">= 1.5.0 < 2", 938 | "toidentifier": "1.0.0" 939 | } 940 | }, 941 | "iconv-lite": { 942 | "version": "0.4.24", 943 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 944 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 945 | "requires": { 946 | "safer-buffer": ">= 2.1.2 < 3" 947 | } 948 | }, 949 | "ieee754": { 950 | "version": "1.2.1", 951 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 952 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" 953 | }, 954 | "ignore-by-default": { 955 | "version": "1.0.1", 956 | "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", 957 | "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", 958 | "dev": true 959 | }, 960 | "import-lazy": { 961 | "version": "2.1.0", 962 | "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", 963 | "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", 964 | "dev": true 965 | }, 966 | "imurmurhash": { 967 | "version": "0.1.4", 968 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 969 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 970 | "dev": true 971 | }, 972 | "inflight": { 973 | "version": "1.0.6", 974 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 975 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 976 | "requires": { 977 | "once": "^1.3.0", 978 | "wrappy": "1" 979 | } 980 | }, 981 | "inherits": { 982 | "version": "2.0.3", 983 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 984 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 985 | }, 986 | "ini": { 987 | "version": "1.3.7", 988 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", 989 | "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", 990 | "dev": true 991 | }, 992 | "ipaddr.js": { 993 | "version": "1.9.1", 994 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 995 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" 996 | }, 997 | "is-binary-path": { 998 | "version": "2.1.0", 999 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1000 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1001 | "dev": true, 1002 | "requires": { 1003 | "binary-extensions": "^2.0.0" 1004 | } 1005 | }, 1006 | "is-ci": { 1007 | "version": "2.0.0", 1008 | "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", 1009 | "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", 1010 | "dev": true, 1011 | "requires": { 1012 | "ci-info": "^2.0.0" 1013 | } 1014 | }, 1015 | "is-extglob": { 1016 | "version": "2.1.1", 1017 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1018 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 1019 | "dev": true 1020 | }, 1021 | "is-fullwidth-code-point": { 1022 | "version": "2.0.0", 1023 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 1024 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 1025 | "dev": true 1026 | }, 1027 | "is-glob": { 1028 | "version": "4.0.1", 1029 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 1030 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 1031 | "dev": true, 1032 | "requires": { 1033 | "is-extglob": "^2.1.1" 1034 | } 1035 | }, 1036 | "is-installed-globally": { 1037 | "version": "0.3.2", 1038 | "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", 1039 | "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", 1040 | "dev": true, 1041 | "requires": { 1042 | "global-dirs": "^2.0.1", 1043 | "is-path-inside": "^3.0.1" 1044 | } 1045 | }, 1046 | "is-npm": { 1047 | "version": "4.0.0", 1048 | "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", 1049 | "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", 1050 | "dev": true 1051 | }, 1052 | "is-number": { 1053 | "version": "7.0.0", 1054 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1055 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1056 | "dev": true 1057 | }, 1058 | "is-obj": { 1059 | "version": "2.0.0", 1060 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", 1061 | "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", 1062 | "dev": true 1063 | }, 1064 | "is-path-inside": { 1065 | "version": "3.0.2", 1066 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", 1067 | "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==", 1068 | "dev": true 1069 | }, 1070 | "is-typedarray": { 1071 | "version": "1.0.0", 1072 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 1073 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", 1074 | "dev": true 1075 | }, 1076 | "is-yarn-global": { 1077 | "version": "0.3.0", 1078 | "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", 1079 | "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", 1080 | "dev": true 1081 | }, 1082 | "js-yaml": { 1083 | "version": "3.14.1", 1084 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", 1085 | "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", 1086 | "requires": { 1087 | "argparse": "^1.0.7", 1088 | "esprima": "^4.0.0" 1089 | } 1090 | }, 1091 | "json-buffer": { 1092 | "version": "3.0.0", 1093 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", 1094 | "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", 1095 | "dev": true 1096 | }, 1097 | "jsonwebtoken": { 1098 | "version": "8.5.1", 1099 | "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", 1100 | "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", 1101 | "requires": { 1102 | "jws": "^3.2.2", 1103 | "lodash.includes": "^4.3.0", 1104 | "lodash.isboolean": "^3.0.3", 1105 | "lodash.isinteger": "^4.0.4", 1106 | "lodash.isnumber": "^3.0.3", 1107 | "lodash.isplainobject": "^4.0.6", 1108 | "lodash.isstring": "^4.0.1", 1109 | "lodash.once": "^4.0.0", 1110 | "ms": "^2.1.1", 1111 | "semver": "^5.6.0" 1112 | }, 1113 | "dependencies": { 1114 | "ms": { 1115 | "version": "2.1.3", 1116 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1117 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 1118 | } 1119 | } 1120 | }, 1121 | "jwa": { 1122 | "version": "1.4.1", 1123 | "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", 1124 | "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", 1125 | "requires": { 1126 | "buffer-equal-constant-time": "1.0.1", 1127 | "ecdsa-sig-formatter": "1.0.11", 1128 | "safe-buffer": "^5.0.1" 1129 | } 1130 | }, 1131 | "jws": { 1132 | "version": "3.2.2", 1133 | "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", 1134 | "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", 1135 | "requires": { 1136 | "jwa": "^1.4.1", 1137 | "safe-buffer": "^5.0.1" 1138 | } 1139 | }, 1140 | "keyv": { 1141 | "version": "3.1.0", 1142 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", 1143 | "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", 1144 | "dev": true, 1145 | "requires": { 1146 | "json-buffer": "3.0.0" 1147 | } 1148 | }, 1149 | "latest-version": { 1150 | "version": "5.1.0", 1151 | "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", 1152 | "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", 1153 | "dev": true, 1154 | "requires": { 1155 | "package-json": "^6.3.0" 1156 | } 1157 | }, 1158 | "locate-path": { 1159 | "version": "5.0.0", 1160 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 1161 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 1162 | "requires": { 1163 | "p-locate": "^4.1.0" 1164 | } 1165 | }, 1166 | "lodash.includes": { 1167 | "version": "4.3.0", 1168 | "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", 1169 | "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" 1170 | }, 1171 | "lodash.isboolean": { 1172 | "version": "3.0.3", 1173 | "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", 1174 | "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" 1175 | }, 1176 | "lodash.isinteger": { 1177 | "version": "4.0.4", 1178 | "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", 1179 | "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" 1180 | }, 1181 | "lodash.isnumber": { 1182 | "version": "3.0.3", 1183 | "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", 1184 | "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" 1185 | }, 1186 | "lodash.isplainobject": { 1187 | "version": "4.0.6", 1188 | "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", 1189 | "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" 1190 | }, 1191 | "lodash.isstring": { 1192 | "version": "4.0.1", 1193 | "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", 1194 | "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" 1195 | }, 1196 | "lodash.once": { 1197 | "version": "4.1.1", 1198 | "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", 1199 | "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" 1200 | }, 1201 | "lowercase-keys": { 1202 | "version": "1.0.1", 1203 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", 1204 | "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", 1205 | "dev": true 1206 | }, 1207 | "make-dir": { 1208 | "version": "3.1.0", 1209 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", 1210 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", 1211 | "dev": true, 1212 | "requires": { 1213 | "semver": "^6.0.0" 1214 | }, 1215 | "dependencies": { 1216 | "semver": { 1217 | "version": "6.3.0", 1218 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1219 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 1220 | "dev": true 1221 | } 1222 | } 1223 | }, 1224 | "media-typer": { 1225 | "version": "0.3.0", 1226 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 1227 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 1228 | }, 1229 | "merge-descriptors": { 1230 | "version": "1.0.1", 1231 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 1232 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 1233 | }, 1234 | "methods": { 1235 | "version": "1.1.2", 1236 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 1237 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 1238 | }, 1239 | "mime": { 1240 | "version": "1.6.0", 1241 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 1242 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 1243 | }, 1244 | "mime-db": { 1245 | "version": "1.44.0", 1246 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", 1247 | "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" 1248 | }, 1249 | "mime-types": { 1250 | "version": "2.1.27", 1251 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", 1252 | "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", 1253 | "requires": { 1254 | "mime-db": "1.44.0" 1255 | } 1256 | }, 1257 | "mimic-response": { 1258 | "version": "1.0.1", 1259 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 1260 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", 1261 | "dev": true 1262 | }, 1263 | "minimatch": { 1264 | "version": "3.0.4", 1265 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1266 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1267 | "requires": { 1268 | "brace-expansion": "^1.1.7" 1269 | } 1270 | }, 1271 | "minimist": { 1272 | "version": "1.2.5", 1273 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 1274 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 1275 | "dev": true 1276 | }, 1277 | "mkdirp": { 1278 | "version": "1.0.4", 1279 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", 1280 | "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" 1281 | }, 1282 | "ms": { 1283 | "version": "2.0.0", 1284 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1285 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 1286 | }, 1287 | "mz": { 1288 | "version": "2.7.0", 1289 | "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", 1290 | "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", 1291 | "requires": { 1292 | "any-promise": "^1.0.0", 1293 | "object-assign": "^4.0.1", 1294 | "thenify-all": "^1.0.0" 1295 | } 1296 | }, 1297 | "negotiator": { 1298 | "version": "0.6.2", 1299 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", 1300 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" 1301 | }, 1302 | "nodemon": { 1303 | "version": "2.0.6", 1304 | "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.6.tgz", 1305 | "integrity": "sha512-4I3YDSKXg6ltYpcnZeHompqac4E6JeAMpGm8tJnB9Y3T0ehasLa4139dJOcCrB93HHrUMsCrKtoAlXTqT5n4AQ==", 1306 | "dev": true, 1307 | "requires": { 1308 | "chokidar": "^3.2.2", 1309 | "debug": "^3.2.6", 1310 | "ignore-by-default": "^1.0.1", 1311 | "minimatch": "^3.0.4", 1312 | "pstree.remy": "^1.1.7", 1313 | "semver": "^5.7.1", 1314 | "supports-color": "^5.5.0", 1315 | "touch": "^3.1.0", 1316 | "undefsafe": "^2.0.3", 1317 | "update-notifier": "^4.1.0" 1318 | }, 1319 | "dependencies": { 1320 | "debug": { 1321 | "version": "3.2.7", 1322 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 1323 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 1324 | "dev": true, 1325 | "requires": { 1326 | "ms": "^2.1.1" 1327 | } 1328 | }, 1329 | "ms": { 1330 | "version": "2.1.3", 1331 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1332 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1333 | "dev": true 1334 | } 1335 | } 1336 | }, 1337 | "nopt": { 1338 | "version": "1.0.10", 1339 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", 1340 | "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", 1341 | "dev": true, 1342 | "requires": { 1343 | "abbrev": "1" 1344 | } 1345 | }, 1346 | "normalize-path": { 1347 | "version": "3.0.0", 1348 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1349 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1350 | "dev": true 1351 | }, 1352 | "normalize-url": { 1353 | "version": "4.5.0", 1354 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", 1355 | "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", 1356 | "dev": true 1357 | }, 1358 | "oauth": { 1359 | "version": "0.9.15", 1360 | "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", 1361 | "integrity": "sha1-vR/vr2hslrdUda7VGWQS/2DPucE=" 1362 | }, 1363 | "object-assign": { 1364 | "version": "4.1.1", 1365 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1366 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 1367 | }, 1368 | "on-finished": { 1369 | "version": "2.3.0", 1370 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 1371 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 1372 | "requires": { 1373 | "ee-first": "1.1.1" 1374 | } 1375 | }, 1376 | "once": { 1377 | "version": "1.4.0", 1378 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1379 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1380 | "requires": { 1381 | "wrappy": "1" 1382 | } 1383 | }, 1384 | "p-cancelable": { 1385 | "version": "1.1.0", 1386 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", 1387 | "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", 1388 | "dev": true 1389 | }, 1390 | "p-limit": { 1391 | "version": "2.3.0", 1392 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 1393 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 1394 | "requires": { 1395 | "p-try": "^2.0.0" 1396 | } 1397 | }, 1398 | "p-locate": { 1399 | "version": "4.1.0", 1400 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 1401 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 1402 | "requires": { 1403 | "p-limit": "^2.2.0" 1404 | } 1405 | }, 1406 | "p-try": { 1407 | "version": "2.2.0", 1408 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 1409 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" 1410 | }, 1411 | "package-json": { 1412 | "version": "6.5.0", 1413 | "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", 1414 | "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", 1415 | "dev": true, 1416 | "requires": { 1417 | "got": "^9.6.0", 1418 | "registry-auth-token": "^4.0.0", 1419 | "registry-url": "^5.0.0", 1420 | "semver": "^6.2.0" 1421 | }, 1422 | "dependencies": { 1423 | "semver": { 1424 | "version": "6.3.0", 1425 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1426 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 1427 | "dev": true 1428 | } 1429 | } 1430 | }, 1431 | "packet-reader": { 1432 | "version": "1.0.0", 1433 | "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", 1434 | "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" 1435 | }, 1436 | "parent-require": { 1437 | "version": "1.0.0", 1438 | "resolved": "https://registry.npmjs.org/parent-require/-/parent-require-1.0.0.tgz", 1439 | "integrity": "sha1-dGoWdjgIOoYLDu9nMssn7UbDKXc=" 1440 | }, 1441 | "parse5": { 1442 | "version": "5.1.1", 1443 | "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", 1444 | "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" 1445 | }, 1446 | "parse5-htmlparser2-tree-adapter": { 1447 | "version": "6.0.1", 1448 | "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", 1449 | "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", 1450 | "requires": { 1451 | "parse5": "^6.0.1" 1452 | }, 1453 | "dependencies": { 1454 | "parse5": { 1455 | "version": "6.0.1", 1456 | "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", 1457 | "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" 1458 | } 1459 | } 1460 | }, 1461 | "parseurl": { 1462 | "version": "1.3.3", 1463 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 1464 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 1465 | }, 1466 | "passport": { 1467 | "version": "0.4.1", 1468 | "resolved": "https://registry.npmjs.org/passport/-/passport-0.4.1.tgz", 1469 | "integrity": "sha512-IxXgZZs8d7uFSt3eqNjM9NQ3g3uQCW5avD8mRNoXV99Yig50vjuaez6dQK2qC0kVWPRTujxY0dWgGfT09adjYg==", 1470 | "requires": { 1471 | "passport-strategy": "1.x.x", 1472 | "pause": "0.0.1" 1473 | } 1474 | }, 1475 | "passport-github": { 1476 | "version": "1.1.0", 1477 | "resolved": "https://registry.npmjs.org/passport-github/-/passport-github-1.1.0.tgz", 1478 | "integrity": "sha1-jOHj/NYa11eOsd9ZWDnkrqEjVdQ=", 1479 | "requires": { 1480 | "passport-oauth2": "1.x.x" 1481 | } 1482 | }, 1483 | "passport-oauth2": { 1484 | "version": "1.5.0", 1485 | "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.5.0.tgz", 1486 | "integrity": "sha512-kqBt6vR/5VlCK8iCx1/KpY42kQ+NEHZwsSyt4Y6STiNjU+wWICG1i8ucc1FapXDGO15C5O5VZz7+7vRzrDPXXQ==", 1487 | "requires": { 1488 | "base64url": "3.x.x", 1489 | "oauth": "0.9.x", 1490 | "passport-strategy": "1.x.x", 1491 | "uid2": "0.0.x", 1492 | "utils-merge": "1.x.x" 1493 | } 1494 | }, 1495 | "passport-strategy": { 1496 | "version": "1.0.0", 1497 | "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", 1498 | "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=" 1499 | }, 1500 | "path-exists": { 1501 | "version": "4.0.0", 1502 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 1503 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" 1504 | }, 1505 | "path-is-absolute": { 1506 | "version": "1.0.1", 1507 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1508 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 1509 | }, 1510 | "path-to-regexp": { 1511 | "version": "0.1.7", 1512 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 1513 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 1514 | }, 1515 | "pause": { 1516 | "version": "0.0.1", 1517 | "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", 1518 | "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" 1519 | }, 1520 | "pg": { 1521 | "version": "8.5.1", 1522 | "resolved": "https://registry.npmjs.org/pg/-/pg-8.5.1.tgz", 1523 | "integrity": "sha512-9wm3yX9lCfjvA98ybCyw2pADUivyNWT/yIP4ZcDVpMN0og70BUWYEGXPCTAQdGTAqnytfRADb7NERrY1qxhIqw==", 1524 | "requires": { 1525 | "buffer-writer": "2.0.0", 1526 | "packet-reader": "1.0.0", 1527 | "pg-connection-string": "^2.4.0", 1528 | "pg-pool": "^3.2.2", 1529 | "pg-protocol": "^1.4.0", 1530 | "pg-types": "^2.1.0", 1531 | "pgpass": "1.x" 1532 | } 1533 | }, 1534 | "pg-connection-string": { 1535 | "version": "2.4.0", 1536 | "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.4.0.tgz", 1537 | "integrity": "sha512-3iBXuv7XKvxeMrIgym7njT+HlZkwZqqGX4Bu9cci8xHZNT+Um1gWKqCsAzcC0d95rcKMU5WBg6YRUcHyV0HZKQ==" 1538 | }, 1539 | "pg-int8": { 1540 | "version": "1.0.1", 1541 | "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", 1542 | "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==" 1543 | }, 1544 | "pg-pool": { 1545 | "version": "3.2.2", 1546 | "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.2.2.tgz", 1547 | "integrity": "sha512-ORJoFxAlmmros8igi608iVEbQNNZlp89diFVx6yV5v+ehmpMY9sK6QgpmgoXbmkNaBAx8cOOZh9g80kJv1ooyA==" 1548 | }, 1549 | "pg-protocol": { 1550 | "version": "1.4.0", 1551 | "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.4.0.tgz", 1552 | "integrity": "sha512-El+aXWcwG/8wuFICMQjM5ZSAm6OWiJicFdNYo+VY3QP+8vI4SvLIWVe51PppTzMhikUJR+PsyIFKqfdXPz/yxA==" 1553 | }, 1554 | "pg-types": { 1555 | "version": "2.2.0", 1556 | "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", 1557 | "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", 1558 | "requires": { 1559 | "pg-int8": "1.0.1", 1560 | "postgres-array": "~2.0.0", 1561 | "postgres-bytea": "~1.0.0", 1562 | "postgres-date": "~1.0.4", 1563 | "postgres-interval": "^1.1.0" 1564 | } 1565 | }, 1566 | "pgpass": { 1567 | "version": "1.0.4", 1568 | "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.4.tgz", 1569 | "integrity": "sha512-YmuA56alyBq7M59vxVBfPJrGSozru8QAdoNlWuW3cz8l+UX3cWge0vTvjKhsSHSJpo3Bom8/Mm6hf0TR5GY0+w==", 1570 | "requires": { 1571 | "split2": "^3.1.1" 1572 | } 1573 | }, 1574 | "picomatch": { 1575 | "version": "2.2.2", 1576 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", 1577 | "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", 1578 | "dev": true 1579 | }, 1580 | "postgres-array": { 1581 | "version": "2.0.0", 1582 | "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", 1583 | "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==" 1584 | }, 1585 | "postgres-bytea": { 1586 | "version": "1.0.0", 1587 | "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", 1588 | "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=" 1589 | }, 1590 | "postgres-date": { 1591 | "version": "1.0.7", 1592 | "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", 1593 | "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==" 1594 | }, 1595 | "postgres-interval": { 1596 | "version": "1.2.0", 1597 | "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", 1598 | "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", 1599 | "requires": { 1600 | "xtend": "^4.0.0" 1601 | } 1602 | }, 1603 | "prepend-http": { 1604 | "version": "2.0.0", 1605 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", 1606 | "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", 1607 | "dev": true 1608 | }, 1609 | "proxy-addr": { 1610 | "version": "2.0.6", 1611 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", 1612 | "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", 1613 | "requires": { 1614 | "forwarded": "~0.1.2", 1615 | "ipaddr.js": "1.9.1" 1616 | } 1617 | }, 1618 | "pstree.remy": { 1619 | "version": "1.1.8", 1620 | "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", 1621 | "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", 1622 | "dev": true 1623 | }, 1624 | "pump": { 1625 | "version": "3.0.0", 1626 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 1627 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 1628 | "dev": true, 1629 | "requires": { 1630 | "end-of-stream": "^1.1.0", 1631 | "once": "^1.3.1" 1632 | } 1633 | }, 1634 | "pupa": { 1635 | "version": "2.1.1", 1636 | "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", 1637 | "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", 1638 | "dev": true, 1639 | "requires": { 1640 | "escape-goat": "^2.0.0" 1641 | } 1642 | }, 1643 | "qs": { 1644 | "version": "6.7.0", 1645 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", 1646 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" 1647 | }, 1648 | "range-parser": { 1649 | "version": "1.2.1", 1650 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 1651 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 1652 | }, 1653 | "raw-body": { 1654 | "version": "2.4.0", 1655 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", 1656 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", 1657 | "requires": { 1658 | "bytes": "3.1.0", 1659 | "http-errors": "1.7.2", 1660 | "iconv-lite": "0.4.24", 1661 | "unpipe": "1.0.0" 1662 | } 1663 | }, 1664 | "rc": { 1665 | "version": "1.2.8", 1666 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", 1667 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 1668 | "dev": true, 1669 | "requires": { 1670 | "deep-extend": "^0.6.0", 1671 | "ini": "~1.3.0", 1672 | "minimist": "^1.2.0", 1673 | "strip-json-comments": "~2.0.1" 1674 | } 1675 | }, 1676 | "readable-stream": { 1677 | "version": "3.6.0", 1678 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 1679 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 1680 | "requires": { 1681 | "inherits": "^2.0.3", 1682 | "string_decoder": "^1.1.1", 1683 | "util-deprecate": "^1.0.1" 1684 | } 1685 | }, 1686 | "readdirp": { 1687 | "version": "3.5.0", 1688 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", 1689 | "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", 1690 | "dev": true, 1691 | "requires": { 1692 | "picomatch": "^2.2.1" 1693 | } 1694 | }, 1695 | "reflect-metadata": { 1696 | "version": "0.1.13", 1697 | "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", 1698 | "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" 1699 | }, 1700 | "registry-auth-token": { 1701 | "version": "4.2.1", 1702 | "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", 1703 | "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", 1704 | "dev": true, 1705 | "requires": { 1706 | "rc": "^1.2.8" 1707 | } 1708 | }, 1709 | "registry-url": { 1710 | "version": "5.1.0", 1711 | "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", 1712 | "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", 1713 | "dev": true, 1714 | "requires": { 1715 | "rc": "^1.2.8" 1716 | } 1717 | }, 1718 | "require-directory": { 1719 | "version": "2.1.1", 1720 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1721 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" 1722 | }, 1723 | "require-main-filename": { 1724 | "version": "2.0.0", 1725 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", 1726 | "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" 1727 | }, 1728 | "responselike": { 1729 | "version": "1.0.2", 1730 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", 1731 | "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", 1732 | "dev": true, 1733 | "requires": { 1734 | "lowercase-keys": "^1.0.0" 1735 | } 1736 | }, 1737 | "safe-buffer": { 1738 | "version": "5.1.2", 1739 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1740 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 1741 | }, 1742 | "safer-buffer": { 1743 | "version": "2.1.2", 1744 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1745 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1746 | }, 1747 | "sax": { 1748 | "version": "1.2.4", 1749 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", 1750 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" 1751 | }, 1752 | "semver": { 1753 | "version": "5.7.1", 1754 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 1755 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 1756 | }, 1757 | "semver-diff": { 1758 | "version": "3.1.1", 1759 | "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", 1760 | "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", 1761 | "dev": true, 1762 | "requires": { 1763 | "semver": "^6.3.0" 1764 | }, 1765 | "dependencies": { 1766 | "semver": { 1767 | "version": "6.3.0", 1768 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1769 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 1770 | "dev": true 1771 | } 1772 | } 1773 | }, 1774 | "send": { 1775 | "version": "0.17.1", 1776 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", 1777 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", 1778 | "requires": { 1779 | "debug": "2.6.9", 1780 | "depd": "~1.1.2", 1781 | "destroy": "~1.0.4", 1782 | "encodeurl": "~1.0.2", 1783 | "escape-html": "~1.0.3", 1784 | "etag": "~1.8.1", 1785 | "fresh": "0.5.2", 1786 | "http-errors": "~1.7.2", 1787 | "mime": "1.6.0", 1788 | "ms": "2.1.1", 1789 | "on-finished": "~2.3.0", 1790 | "range-parser": "~1.2.1", 1791 | "statuses": "~1.5.0" 1792 | }, 1793 | "dependencies": { 1794 | "ms": { 1795 | "version": "2.1.1", 1796 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", 1797 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" 1798 | } 1799 | } 1800 | }, 1801 | "serve-static": { 1802 | "version": "1.14.1", 1803 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", 1804 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", 1805 | "requires": { 1806 | "encodeurl": "~1.0.2", 1807 | "escape-html": "~1.0.3", 1808 | "parseurl": "~1.3.3", 1809 | "send": "0.17.1" 1810 | } 1811 | }, 1812 | "set-blocking": { 1813 | "version": "2.0.0", 1814 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 1815 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" 1816 | }, 1817 | "setprototypeof": { 1818 | "version": "1.1.1", 1819 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", 1820 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" 1821 | }, 1822 | "sha.js": { 1823 | "version": "2.4.11", 1824 | "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", 1825 | "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", 1826 | "requires": { 1827 | "inherits": "^2.0.1", 1828 | "safe-buffer": "^5.0.1" 1829 | } 1830 | }, 1831 | "signal-exit": { 1832 | "version": "3.0.3", 1833 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", 1834 | "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", 1835 | "dev": true 1836 | }, 1837 | "split2": { 1838 | "version": "3.2.2", 1839 | "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", 1840 | "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", 1841 | "requires": { 1842 | "readable-stream": "^3.0.0" 1843 | } 1844 | }, 1845 | "sprintf-js": { 1846 | "version": "1.0.3", 1847 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 1848 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" 1849 | }, 1850 | "statuses": { 1851 | "version": "1.5.0", 1852 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 1853 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" 1854 | }, 1855 | "string-width": { 1856 | "version": "4.2.0", 1857 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", 1858 | "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", 1859 | "requires": { 1860 | "emoji-regex": "^8.0.0", 1861 | "is-fullwidth-code-point": "^3.0.0", 1862 | "strip-ansi": "^6.0.0" 1863 | }, 1864 | "dependencies": { 1865 | "ansi-regex": { 1866 | "version": "5.0.0", 1867 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 1868 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" 1869 | }, 1870 | "emoji-regex": { 1871 | "version": "8.0.0", 1872 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1873 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 1874 | }, 1875 | "is-fullwidth-code-point": { 1876 | "version": "3.0.0", 1877 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1878 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" 1879 | }, 1880 | "strip-ansi": { 1881 | "version": "6.0.0", 1882 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 1883 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 1884 | "requires": { 1885 | "ansi-regex": "^5.0.0" 1886 | } 1887 | } 1888 | } 1889 | }, 1890 | "string_decoder": { 1891 | "version": "1.3.0", 1892 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 1893 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 1894 | "requires": { 1895 | "safe-buffer": "~5.2.0" 1896 | }, 1897 | "dependencies": { 1898 | "safe-buffer": { 1899 | "version": "5.2.1", 1900 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1901 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 1902 | } 1903 | } 1904 | }, 1905 | "strip-ansi": { 1906 | "version": "5.2.0", 1907 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 1908 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 1909 | "dev": true, 1910 | "requires": { 1911 | "ansi-regex": "^4.1.0" 1912 | } 1913 | }, 1914 | "strip-json-comments": { 1915 | "version": "2.0.1", 1916 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 1917 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 1918 | "dev": true 1919 | }, 1920 | "supports-color": { 1921 | "version": "5.5.0", 1922 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1923 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1924 | "dev": true, 1925 | "requires": { 1926 | "has-flag": "^3.0.0" 1927 | } 1928 | }, 1929 | "term-size": { 1930 | "version": "2.2.1", 1931 | "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", 1932 | "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", 1933 | "dev": true 1934 | }, 1935 | "thenify": { 1936 | "version": "3.3.1", 1937 | "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", 1938 | "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", 1939 | "requires": { 1940 | "any-promise": "^1.0.0" 1941 | } 1942 | }, 1943 | "thenify-all": { 1944 | "version": "1.6.0", 1945 | "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", 1946 | "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", 1947 | "requires": { 1948 | "thenify": ">= 3.1.0 < 4" 1949 | } 1950 | }, 1951 | "to-readable-stream": { 1952 | "version": "1.0.0", 1953 | "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", 1954 | "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", 1955 | "dev": true 1956 | }, 1957 | "to-regex-range": { 1958 | "version": "5.0.1", 1959 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1960 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1961 | "dev": true, 1962 | "requires": { 1963 | "is-number": "^7.0.0" 1964 | } 1965 | }, 1966 | "toidentifier": { 1967 | "version": "1.0.0", 1968 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", 1969 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" 1970 | }, 1971 | "touch": { 1972 | "version": "3.1.0", 1973 | "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", 1974 | "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", 1975 | "dev": true, 1976 | "requires": { 1977 | "nopt": "~1.0.10" 1978 | } 1979 | }, 1980 | "tslib": { 1981 | "version": "1.14.1", 1982 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 1983 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" 1984 | }, 1985 | "type-fest": { 1986 | "version": "0.8.1", 1987 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", 1988 | "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", 1989 | "dev": true 1990 | }, 1991 | "type-is": { 1992 | "version": "1.6.18", 1993 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 1994 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 1995 | "requires": { 1996 | "media-typer": "0.3.0", 1997 | "mime-types": "~2.1.24" 1998 | } 1999 | }, 2000 | "typedarray-to-buffer": { 2001 | "version": "3.1.5", 2002 | "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", 2003 | "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", 2004 | "dev": true, 2005 | "requires": { 2006 | "is-typedarray": "^1.0.0" 2007 | } 2008 | }, 2009 | "typeorm": { 2010 | "version": "0.2.29", 2011 | "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.2.29.tgz", 2012 | "integrity": "sha512-ih1vrTe3gEAGKRcWlcsTRxTL7gNjacQE498wVGuJ3ZRujtMqPZlbAWuC7xDzWCRjQnkZYNwZQeG9UgKfxSHB5g==", 2013 | "requires": { 2014 | "@sqltools/formatter": "1.2.2", 2015 | "app-root-path": "^3.0.0", 2016 | "buffer": "^5.5.0", 2017 | "chalk": "^4.1.0", 2018 | "cli-highlight": "^2.1.4", 2019 | "debug": "^4.1.1", 2020 | "dotenv": "^8.2.0", 2021 | "glob": "^7.1.6", 2022 | "js-yaml": "^3.14.0", 2023 | "mkdirp": "^1.0.4", 2024 | "reflect-metadata": "^0.1.13", 2025 | "sha.js": "^2.4.11", 2026 | "tslib": "^1.13.0", 2027 | "xml2js": "^0.4.23", 2028 | "yargonaut": "^1.1.2", 2029 | "yargs": "^16.0.3" 2030 | }, 2031 | "dependencies": { 2032 | "chalk": { 2033 | "version": "4.1.0", 2034 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", 2035 | "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", 2036 | "requires": { 2037 | "ansi-styles": "^4.1.0", 2038 | "supports-color": "^7.1.0" 2039 | } 2040 | }, 2041 | "debug": { 2042 | "version": "4.3.1", 2043 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", 2044 | "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", 2045 | "requires": { 2046 | "ms": "2.1.2" 2047 | } 2048 | }, 2049 | "has-flag": { 2050 | "version": "4.0.0", 2051 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2052 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" 2053 | }, 2054 | "ms": { 2055 | "version": "2.1.2", 2056 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2057 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 2058 | }, 2059 | "supports-color": { 2060 | "version": "7.2.0", 2061 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2062 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2063 | "requires": { 2064 | "has-flag": "^4.0.0" 2065 | } 2066 | } 2067 | } 2068 | }, 2069 | "typescript": { 2070 | "version": "4.1.3", 2071 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.3.tgz", 2072 | "integrity": "sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg==", 2073 | "dev": true 2074 | }, 2075 | "uid2": { 2076 | "version": "0.0.3", 2077 | "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.3.tgz", 2078 | "integrity": "sha1-SDEm4Rd03y9xuLY53NeZw3YWK4I=" 2079 | }, 2080 | "undefsafe": { 2081 | "version": "2.0.3", 2082 | "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", 2083 | "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", 2084 | "dev": true, 2085 | "requires": { 2086 | "debug": "^2.2.0" 2087 | } 2088 | }, 2089 | "unique-string": { 2090 | "version": "2.0.0", 2091 | "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", 2092 | "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", 2093 | "dev": true, 2094 | "requires": { 2095 | "crypto-random-string": "^2.0.0" 2096 | } 2097 | }, 2098 | "unpipe": { 2099 | "version": "1.0.0", 2100 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 2101 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 2102 | }, 2103 | "update-notifier": { 2104 | "version": "4.1.3", 2105 | "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", 2106 | "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", 2107 | "dev": true, 2108 | "requires": { 2109 | "boxen": "^4.2.0", 2110 | "chalk": "^3.0.0", 2111 | "configstore": "^5.0.1", 2112 | "has-yarn": "^2.1.0", 2113 | "import-lazy": "^2.1.0", 2114 | "is-ci": "^2.0.0", 2115 | "is-installed-globally": "^0.3.1", 2116 | "is-npm": "^4.0.0", 2117 | "is-yarn-global": "^0.3.0", 2118 | "latest-version": "^5.0.0", 2119 | "pupa": "^2.0.1", 2120 | "semver-diff": "^3.1.1", 2121 | "xdg-basedir": "^4.0.0" 2122 | } 2123 | }, 2124 | "url-parse-lax": { 2125 | "version": "3.0.0", 2126 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", 2127 | "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", 2128 | "dev": true, 2129 | "requires": { 2130 | "prepend-http": "^2.0.0" 2131 | } 2132 | }, 2133 | "util-deprecate": { 2134 | "version": "1.0.2", 2135 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2136 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 2137 | }, 2138 | "utils-merge": { 2139 | "version": "1.0.1", 2140 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 2141 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 2142 | }, 2143 | "vary": { 2144 | "version": "1.1.2", 2145 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 2146 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 2147 | }, 2148 | "which-module": { 2149 | "version": "2.0.0", 2150 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", 2151 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" 2152 | }, 2153 | "widest-line": { 2154 | "version": "3.1.0", 2155 | "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", 2156 | "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", 2157 | "dev": true, 2158 | "requires": { 2159 | "string-width": "^4.0.0" 2160 | } 2161 | }, 2162 | "wrap-ansi": { 2163 | "version": "6.2.0", 2164 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", 2165 | "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", 2166 | "requires": { 2167 | "ansi-styles": "^4.0.0", 2168 | "string-width": "^4.1.0", 2169 | "strip-ansi": "^6.0.0" 2170 | }, 2171 | "dependencies": { 2172 | "ansi-regex": { 2173 | "version": "5.0.0", 2174 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 2175 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" 2176 | }, 2177 | "strip-ansi": { 2178 | "version": "6.0.0", 2179 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 2180 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 2181 | "requires": { 2182 | "ansi-regex": "^5.0.0" 2183 | } 2184 | } 2185 | } 2186 | }, 2187 | "wrappy": { 2188 | "version": "1.0.2", 2189 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2190 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 2191 | }, 2192 | "write-file-atomic": { 2193 | "version": "3.0.3", 2194 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", 2195 | "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", 2196 | "dev": true, 2197 | "requires": { 2198 | "imurmurhash": "^0.1.4", 2199 | "is-typedarray": "^1.0.0", 2200 | "signal-exit": "^3.0.2", 2201 | "typedarray-to-buffer": "^3.1.5" 2202 | } 2203 | }, 2204 | "xdg-basedir": { 2205 | "version": "4.0.0", 2206 | "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", 2207 | "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", 2208 | "dev": true 2209 | }, 2210 | "xml2js": { 2211 | "version": "0.4.23", 2212 | "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", 2213 | "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", 2214 | "requires": { 2215 | "sax": ">=0.6.0", 2216 | "xmlbuilder": "~11.0.0" 2217 | } 2218 | }, 2219 | "xmlbuilder": { 2220 | "version": "11.0.1", 2221 | "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", 2222 | "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" 2223 | }, 2224 | "xtend": { 2225 | "version": "4.0.2", 2226 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 2227 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" 2228 | }, 2229 | "y18n": { 2230 | "version": "4.0.1", 2231 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", 2232 | "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==" 2233 | }, 2234 | "yargonaut": { 2235 | "version": "1.1.4", 2236 | "resolved": "https://registry.npmjs.org/yargonaut/-/yargonaut-1.1.4.tgz", 2237 | "integrity": "sha512-rHgFmbgXAAzl+1nngqOcwEljqHGG9uUZoPjsdZEs1w5JW9RXYzrSvH/u70C1JE5qFi0qjsdhnUX/dJRpWqitSA==", 2238 | "requires": { 2239 | "chalk": "^1.1.1", 2240 | "figlet": "^1.1.1", 2241 | "parent-require": "^1.0.0" 2242 | }, 2243 | "dependencies": { 2244 | "ansi-regex": { 2245 | "version": "2.1.1", 2246 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 2247 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" 2248 | }, 2249 | "ansi-styles": { 2250 | "version": "2.2.1", 2251 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 2252 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" 2253 | }, 2254 | "chalk": { 2255 | "version": "1.1.3", 2256 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 2257 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 2258 | "requires": { 2259 | "ansi-styles": "^2.2.1", 2260 | "escape-string-regexp": "^1.0.2", 2261 | "has-ansi": "^2.0.0", 2262 | "strip-ansi": "^3.0.0", 2263 | "supports-color": "^2.0.0" 2264 | } 2265 | }, 2266 | "strip-ansi": { 2267 | "version": "3.0.1", 2268 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 2269 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 2270 | "requires": { 2271 | "ansi-regex": "^2.0.0" 2272 | } 2273 | }, 2274 | "supports-color": { 2275 | "version": "2.0.0", 2276 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 2277 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" 2278 | } 2279 | } 2280 | }, 2281 | "yargs": { 2282 | "version": "16.2.0", 2283 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 2284 | "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 2285 | "requires": { 2286 | "cliui": "^7.0.2", 2287 | "escalade": "^3.1.1", 2288 | "get-caller-file": "^2.0.5", 2289 | "require-directory": "^2.1.1", 2290 | "string-width": "^4.2.0", 2291 | "y18n": "^5.0.5", 2292 | "yargs-parser": "^20.2.2" 2293 | }, 2294 | "dependencies": { 2295 | "ansi-regex": { 2296 | "version": "5.0.0", 2297 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 2298 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" 2299 | }, 2300 | "cliui": { 2301 | "version": "7.0.4", 2302 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 2303 | "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 2304 | "requires": { 2305 | "string-width": "^4.2.0", 2306 | "strip-ansi": "^6.0.0", 2307 | "wrap-ansi": "^7.0.0" 2308 | } 2309 | }, 2310 | "strip-ansi": { 2311 | "version": "6.0.0", 2312 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 2313 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 2314 | "requires": { 2315 | "ansi-regex": "^5.0.0" 2316 | } 2317 | }, 2318 | "wrap-ansi": { 2319 | "version": "7.0.0", 2320 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 2321 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 2322 | "requires": { 2323 | "ansi-styles": "^4.0.0", 2324 | "string-width": "^4.1.0", 2325 | "strip-ansi": "^6.0.0" 2326 | } 2327 | }, 2328 | "y18n": { 2329 | "version": "5.0.5", 2330 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", 2331 | "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==" 2332 | }, 2333 | "yargs-parser": { 2334 | "version": "20.2.4", 2335 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", 2336 | "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" 2337 | } 2338 | } 2339 | }, 2340 | "yargs-parser": { 2341 | "version": "18.1.3", 2342 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", 2343 | "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", 2344 | "requires": { 2345 | "camelcase": "^5.0.0", 2346 | "decamelize": "^1.2.0" 2347 | } 2348 | } 2349 | } 2350 | } 2351 | -------------------------------------------------------------------------------- /api/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vstodo-api", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "watch": "tsc -w", 8 | "dev": "nodemon dist/index.js" 9 | }, 10 | "keywords": [], 11 | "author": "", 12 | "license": "ISC", 13 | "dependencies": { 14 | "cors": "^2.8.5", 15 | "dotenv-safe": "^8.2.0", 16 | "express": "^4.17.1", 17 | "jsonwebtoken": "^8.5.1", 18 | "passport": "^0.4.1", 19 | "passport-github": "^1.1.0", 20 | "pg": "^8.5.1", 21 | "reflect-metadata": "^0.1.13", 22 | "typeorm": "^0.2.29" 23 | }, 24 | "devDependencies": { 25 | "@types/cors": "^2.8.9", 26 | "@types/express": "^4.17.9", 27 | "@types/jsonwebtoken": "^8.5.0", 28 | "@types/node": "^14.14.14", 29 | "@types/passport": "^1.0.4", 30 | "@types/passport-github": "^1.1.5", 31 | "nodemon": "^2.0.6", 32 | "typescript": "^4.1.3" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /api/src/constants.ts: -------------------------------------------------------------------------------- 1 | export const __prod__ = process.env.NODE_ENV === "production"; 2 | -------------------------------------------------------------------------------- /api/src/entities/Todo.ts: -------------------------------------------------------------------------------- 1 | import { 2 | BaseEntity, 3 | Column, 4 | Entity, 5 | JoinColumn, 6 | ManyToOne, 7 | PrimaryGeneratedColumn, 8 | } from "typeorm"; 9 | import { User } from "./User"; 10 | 11 | @Entity() 12 | export class Todo extends BaseEntity { 13 | @PrimaryGeneratedColumn() 14 | id: number; 15 | 16 | @Column("text") 17 | text: string; 18 | 19 | @Column("boolean", { default: false }) 20 | completed: boolean; 21 | 22 | @Column() 23 | creatorId: number; 24 | 25 | @ManyToOne(() => User, (u) => u.todos) 26 | @JoinColumn({ name: "creatorId" }) 27 | creator: Promise; 28 | } 29 | -------------------------------------------------------------------------------- /api/src/entities/User.ts: -------------------------------------------------------------------------------- 1 | import { 2 | BaseEntity, 3 | Column, 4 | Entity, 5 | OneToMany, 6 | PrimaryGeneratedColumn, 7 | } from "typeorm"; 8 | import { Todo } from "./Todo"; 9 | 10 | @Entity() 11 | export class User extends BaseEntity { 12 | @PrimaryGeneratedColumn() 13 | id: number; 14 | 15 | @Column("text", { nullable: true }) 16 | name: string; 17 | 18 | @Column("text", { unique: true }) 19 | githubId: string; 20 | 21 | @OneToMany(() => Todo, (t) => t.creator) 22 | todos: Promise; 23 | } 24 | -------------------------------------------------------------------------------- /api/src/index.ts: -------------------------------------------------------------------------------- 1 | import "reflect-metadata"; 2 | require("dotenv-safe").config(); 3 | import express from "express"; 4 | import { createConnection } from "typeorm"; 5 | import { __prod__ } from "./constants"; 6 | import { join } from "path"; 7 | import { User } from "./entities/User"; 8 | import { Strategy as GitHubStrategy } from "passport-github"; 9 | import passport from "passport"; 10 | import jwt from "jsonwebtoken"; 11 | import cors from "cors"; 12 | import { Todo } from "./entities/Todo"; 13 | import { isAuth } from "./isAuth"; 14 | 15 | const main = async () => { 16 | await createConnection({ 17 | type: "postgres", 18 | database: "vstodo", 19 | entities: [join(__dirname, "./entities/*.*")], 20 | logging: !__prod__, 21 | synchronize: !__prod__, 22 | }); 23 | 24 | // const user = await User.create({ name: "bob" }).save(); 25 | 26 | const app = express(); 27 | passport.serializeUser((user: any, done) => { 28 | done(null, user.accessToken); 29 | }); 30 | app.use(cors({ origin: "*" })); 31 | app.use(passport.initialize()); 32 | app.use(express.json()); 33 | 34 | passport.use( 35 | new GitHubStrategy( 36 | { 37 | clientID: process.env.GITHUB_CLIENT_ID, 38 | clientSecret: process.env.GITHUB_CLIENT_SECRET, 39 | callbackURL: "http://localhost:3002/auth/github/callback", 40 | }, 41 | async (_, __, profile, cb) => { 42 | let user = await User.findOne({ where: { githubId: profile.id } }); 43 | if (user) { 44 | user.name = profile.displayName; 45 | await user.save(); 46 | } else { 47 | user = await User.create({ 48 | name: profile.displayName, 49 | githubId: profile.id, 50 | }).save(); 51 | } 52 | cb(null, { 53 | accessToken: jwt.sign( 54 | { userId: user.id }, 55 | process.env.ACCESS_TOKEN_SECRET, 56 | { 57 | expiresIn: "1y", 58 | } 59 | ), 60 | }); 61 | } 62 | ) 63 | ); 64 | 65 | app.get("/auth/github", passport.authenticate("github", { session: false })); 66 | 67 | app.get( 68 | "/auth/github/callback", 69 | passport.authenticate("github", { session: false }), 70 | (req: any, res) => { 71 | res.redirect(`http://localhost:54321/auth/${req.user.accessToken}`); 72 | } 73 | ); 74 | 75 | app.get("/todo", isAuth, async (req, res) => { 76 | const todos = await Todo.find({ 77 | where: { creatorId: req.userId }, 78 | order: { id: "DESC" }, 79 | }); 80 | 81 | res.send({ todos }); 82 | }); 83 | 84 | app.post("/todo", isAuth, async (req, res) => { 85 | const todo = await Todo.create({ 86 | text: req.body.text, 87 | creatorId: req.userId, 88 | }).save(); 89 | res.send({ todo }); 90 | }); 91 | 92 | app.put("/todo", isAuth, async (req, res) => { 93 | const todo = await Todo.findOne(req.body.id); 94 | if (!todo) { 95 | res.send({ todo: null }); 96 | return; 97 | } 98 | if (todo.creatorId !== req.userId) { 99 | throw new Error("not authorized"); 100 | } 101 | todo.completed = !todo.completed; 102 | await todo.save(); 103 | res.send({ todo }); 104 | }); 105 | 106 | app.get("/me", async (req, res) => { 107 | // Bearer 120jdklowqjed021901 108 | const authHeader = req.headers.authorization; 109 | if (!authHeader) { 110 | res.send({ user: null }); 111 | return; 112 | } 113 | 114 | const token = authHeader.split(" ")[1]; 115 | if (!token) { 116 | res.send({ user: null }); 117 | return; 118 | } 119 | 120 | let userId = ""; 121 | 122 | try { 123 | const payload: any = jwt.verify(token, process.env.ACCESS_TOKEN_SECRET); 124 | userId = payload.userId; 125 | } catch (err) { 126 | res.send({ user: null }); 127 | return; 128 | } 129 | 130 | if (!userId) { 131 | res.send({ user: null }); 132 | return; 133 | } 134 | 135 | const user = await User.findOne(userId); 136 | 137 | res.send({ user }); 138 | }); 139 | 140 | app.get("/", (_req, res) => { 141 | res.send("hello"); 142 | }); 143 | app.listen(3002, () => { 144 | console.log("listening on localhost:3002"); 145 | }); 146 | }; 147 | 148 | main(); 149 | -------------------------------------------------------------------------------- /api/src/isAuth.ts: -------------------------------------------------------------------------------- 1 | import { RequestHandler } from "express"; 2 | import jwt from "jsonwebtoken"; 3 | 4 | export const isAuth: RequestHandler<{}, any, any, {}> = (req, _, next) => { 5 | const authHeader = req.headers.authorization; 6 | if (!authHeader) { 7 | throw new Error("not authenticated"); 8 | } 9 | 10 | const token = authHeader.split(" ")[1]; 11 | if (!token) { 12 | throw new Error("not authenticated"); 13 | } 14 | 15 | try { 16 | const payload: any = jwt.verify(token, process.env.ACCESS_TOKEN_SECRET); 17 | req.userId = payload.userId; 18 | next(); 19 | return; 20 | } catch {} 21 | 22 | throw new Error("not authenticated"); 23 | }; 24 | -------------------------------------------------------------------------------- /api/src/types/env.d.ts: -------------------------------------------------------------------------------- 1 | declare namespace NodeJS { 2 | export interface ProcessEnv { 3 | GITHUB_CLIENT_SECRET: string; 4 | GITHUB_CLIENT_ID: string; 5 | ACCESS_TOKEN_SECRET: string; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /api/src/types/extend-express.d.ts: -------------------------------------------------------------------------------- 1 | declare namespace Express { 2 | export interface Request { 3 | userId: number; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /api/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es6", 4 | "module": "commonjs", 5 | "lib": [ 6 | "dom", 7 | "es6", 8 | "es2017", 9 | "esnext.asynciterable" 10 | ], 11 | "sourceMap": true, 12 | "outDir": "./dist", 13 | "moduleResolution": "node", 14 | "removeComments": true, 15 | "noImplicitAny": true, 16 | "strictNullChecks": true, 17 | "strictFunctionTypes": true, 18 | "noImplicitThis": true, 19 | "noUnusedLocals": true, 20 | "noUnusedParameters": true, 21 | "noImplicitReturns": true, 22 | "noFallthroughCasesInSwitch": true, 23 | "allowSyntheticDefaultImports": true, 24 | "esModuleInterop": true, 25 | "emitDecoratorMetadata": true, 26 | "experimentalDecorators": true, 27 | "resolveJsonModule": true, 28 | "baseUrl": "." 29 | }, 30 | "exclude": [ 31 | "node_modules" 32 | ], 33 | "include": [ 34 | "./src/**/*.tsx", 35 | "./src/**/*.ts" 36 | ] 37 | } -------------------------------------------------------------------------------- /extension/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "parser": "@typescript-eslint/parser", 4 | "parserOptions": { 5 | "ecmaVersion": 6, 6 | "sourceType": "module" 7 | }, 8 | "plugins": [ 9 | "@typescript-eslint" 10 | ], 11 | "rules": { 12 | "@typescript-eslint/naming-convention": "warn", 13 | "@typescript-eslint/semi": "warn", 14 | "curly": "warn", 15 | "eqeqeq": "warn", 16 | "no-throw-literal": "warn", 17 | "semi": "off" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /extension/.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 | "eamodio.tsl-problem-matcher" 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /extension/.vscode/launch.json: -------------------------------------------------------------------------------- 1 | // A launch configuration that compiles the extension and then opens it 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": "Run Extension", 10 | "type": "extensionHost", 11 | "request": "launch", 12 | "args": [ 13 | "--extensionDevelopmentPath=${workspaceFolder}" 14 | ], 15 | "outFiles": [ 16 | "${workspaceFolder}/dist/**/*.js" 17 | ], 18 | }, 19 | { 20 | "name": "Extension Tests", 21 | "type": "extensionHost", 22 | "request": "launch", 23 | "args": [ 24 | "--extensionDevelopmentPath=${workspaceFolder}", 25 | "--extensionTestsPath=${workspaceFolder}/out/test/suite/index" 26 | ], 27 | "outFiles": [ 28 | "${workspaceFolder}/out/test/**/*.js" 29 | ], 30 | "preLaunchTask": "npm: test-watch" 31 | } 32 | ] 33 | } 34 | -------------------------------------------------------------------------------- /extension/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | // Place your settings in this file to overwrite default and user settings. 2 | { 3 | "files.exclude": { 4 | "out": false // set this to true to hide the "out" folder with the compiled JS files 5 | }, 6 | "search.exclude": { 7 | "out": true // set this to false to include "out" folder in search results 8 | }, 9 | // Turn off tsc task auto detection since we have the necessary tasks as npm scripts 10 | "typescript.tsc.autoDetect": "off" 11 | } -------------------------------------------------------------------------------- /extension/.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | // See https://go.microsoft.com/fwlink/?LinkId=733558 2 | // for the documentation about the tasks.json format 3 | { 4 | "version": "2.0.0", 5 | "tasks": [ 6 | ] 7 | } -------------------------------------------------------------------------------- /extension/.vscodeignore: -------------------------------------------------------------------------------- 1 | .vscode/** 2 | .vscode-test/** 3 | out/** 4 | src/** 5 | .gitignore 6 | .yarnrc 7 | vsc-extension-quickstart.md 8 | **/tsconfig.json 9 | **/.eslintrc.json 10 | **/*.map 11 | **/*.ts 12 | -------------------------------------------------------------------------------- /extension/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | All notable changes to the "vstodo" extension will be documented in this file. 4 | 5 | Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. 6 | 7 | ## [Unreleased] 8 | 9 | - Initial release -------------------------------------------------------------------------------- /extension/README.md: -------------------------------------------------------------------------------- 1 | # vstodo README 2 | 3 | This is the README for your extension "vstodo". After writing up a brief description, we recommend including the following sections. 4 | 5 | ## Features 6 | 7 | Describe specific features of your extension including screenshots of your extension in action. Image paths are relative to this README file. 8 | 9 | For example if there is an image subfolder under your extension project workspace: 10 | 11 | \!\[feature X\]\(images/feature-x.png\) 12 | 13 | > Tip: Many popular extensions utilize animations. This is an excellent way to show off your extension! We recommend short, focused animations that are easy to follow. 14 | 15 | ## Requirements 16 | 17 | If you have any requirements or dependencies, add a section describing those and how to install and configure them. 18 | 19 | ## Extension Settings 20 | 21 | Include if your extension adds any VS Code settings through the `contributes.configuration` extension point. 22 | 23 | For example: 24 | 25 | This extension contributes the following settings: 26 | 27 | * `myExtension.enable`: enable/disable this extension 28 | * `myExtension.thing`: set to `blah` to do something 29 | 30 | ## Known Issues 31 | 32 | Calling out known issues can help limit users opening duplicate issues against your extension. 33 | 34 | ## Release Notes 35 | 36 | Users appreciate release notes as you update your extension. 37 | 38 | ### 1.0.0 39 | 40 | Initial release of ... 41 | 42 | ### 1.0.1 43 | 44 | Fixed issue #. 45 | 46 | ### 1.1.0 47 | 48 | Added features X, Y, and Z. 49 | 50 | ----------------------------------------------------------------------------------------------------------- 51 | 52 | ## Working with Markdown 53 | 54 | **Note:** You can author your README using Visual Studio Code. Here are some useful editor keyboard shortcuts: 55 | 56 | * Split the editor (`Cmd+\` on macOS or `Ctrl+\` on Windows and Linux) 57 | * Toggle preview (`Shift+CMD+V` on macOS or `Shift+Ctrl+V` on Windows and Linux) 58 | * Press `Ctrl+Space` (Windows, Linux) or `Cmd+Space` (macOS) to see a list of Markdown snippets 59 | 60 | ### For more information 61 | 62 | * [Visual Studio Code's Markdown Support](http://code.visualstudio.com/docs/languages/markdown) 63 | * [Markdown Syntax Reference](https://help.github.com/articles/markdown-basics/) 64 | 65 | **Enjoy!** 66 | -------------------------------------------------------------------------------- /extension/build/node-extension.webpack.config.js: -------------------------------------------------------------------------------- 1 | //@ts-check 2 | 3 | 'use strict'; 4 | 5 | const path = require('path'); 6 | 7 | /**@type {import('webpack').Configuration}*/ 8 | const config = { 9 | target: 'node', // vscode extensions run in a Node.js-context 📖 -> https://webpack.js.org/configuration/node/ 10 | mode: 'none', // this leaves the source code as close as possible to the original (when packaging we set this to 'production') 11 | 12 | entry: './src/extension.ts', // the entry point of this extension, 📖 -> https://webpack.js.org/configuration/entry-context/ 13 | output: { 14 | // the bundle is stored in the 'dist' folder (check package.json), 📖 -> https://webpack.js.org/configuration/output/ 15 | path: path.resolve(__dirname, '..', 'dist'), 16 | filename: 'extension.js', 17 | libraryTarget: 'commonjs2' 18 | }, 19 | devtool: 'nosources-source-map', 20 | externals: { 21 | vscode: 'commonjs vscode' // the vscode-module is created on-the-fly and must be excluded. Add other modules that cannot be webpack'ed, 📖 -> https://webpack.js.org/configuration/externals/ 22 | }, 23 | resolve: { 24 | // support reading TypeScript and JavaScript files, 📖 -> https://github.com/TypeStrong/ts-loader 25 | extensions: ['.ts', '.js'] 26 | }, 27 | module: { 28 | rules: [ 29 | { 30 | test: /\.ts$/, 31 | exclude: /node_modules/, 32 | use: [ 33 | { 34 | loader: 'ts-loader' 35 | } 36 | ] 37 | } 38 | ] 39 | } 40 | }; 41 | module.exports = config; -------------------------------------------------------------------------------- /extension/media/checklist.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /extension/media/main.js: -------------------------------------------------------------------------------- 1 | // This script will be run within the webview itself 2 | // It cannot access the main VS Code APIs directly. 3 | (function () { 4 | const vscode = acquireVsCodeApi(); 5 | 6 | console.log("hello there from javascript"); 7 | })(); 8 | -------------------------------------------------------------------------------- /extension/media/reset.css: -------------------------------------------------------------------------------- 1 | html { 2 | box-sizing: border-box; 3 | font-size: 13px; 4 | } 5 | 6 | *, 7 | *:before, 8 | *:after { 9 | box-sizing: inherit; 10 | } 11 | 12 | body, 13 | h1, 14 | h2, 15 | h3, 16 | h4, 17 | h5, 18 | h6, 19 | p, 20 | ol, 21 | ul { 22 | margin: 0; 23 | padding: 0; 24 | font-weight: normal; 25 | } 26 | 27 | img { 28 | max-width: 100%; 29 | height: auto; 30 | } 31 | -------------------------------------------------------------------------------- /extension/media/vscode.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --container-paddding: 20px; 3 | --input-padding-vertical: 6px; 4 | --input-padding-horizontal: 4px; 5 | --input-margin-vertical: 4px; 6 | --input-margin-horizontal: 0; 7 | } 8 | 9 | body { 10 | padding: 0 var(--container-paddding); 11 | color: var(--vscode-foreground); 12 | font-size: var(--vscode-font-size); 13 | font-weight: var(--vscode-font-weight); 14 | font-family: var(--vscode-font-family); 15 | background-color: var(--vscode-editor-background); 16 | } 17 | 18 | ol, 19 | ul { 20 | padding-left: var(--container-paddding); 21 | } 22 | 23 | body > *, 24 | form > * { 25 | margin-block-start: var(--input-margin-vertical); 26 | margin-block-end: var(--input-margin-vertical); 27 | } 28 | 29 | *:focus { 30 | outline-color: var(--vscode-focusBorder) !important; 31 | } 32 | 33 | a { 34 | color: var(--vscode-textLink-foreground); 35 | } 36 | 37 | a:hover, 38 | a:active { 39 | color: var(--vscode-textLink-activeForeground); 40 | } 41 | 42 | code { 43 | font-size: var(--vscode-editor-font-size); 44 | font-family: var(--vscode-editor-font-family); 45 | } 46 | 47 | button { 48 | border: none; 49 | padding: var(--input-padding-vertical) var(--input-padding-horizontal); 50 | width: 100%; 51 | text-align: center; 52 | outline: 1px solid transparent; 53 | outline-offset: 2px !important; 54 | color: var(--vscode-button-foreground); 55 | background: var(--vscode-button-background); 56 | } 57 | 58 | button:hover { 59 | cursor: pointer; 60 | background: var(--vscode-button-hoverBackground); 61 | } 62 | 63 | button:focus { 64 | outline-color: var(--vscode-focusBorder); 65 | } 66 | 67 | button.secondary { 68 | color: var(--vscode-button-secondaryForeground); 69 | background: var(--vscode-button-secondaryBackground); 70 | } 71 | 72 | button.secondary:hover { 73 | background: var(--vscode-button-secondaryHoverBackground); 74 | } 75 | 76 | input:not([type="checkbox"]), 77 | textarea { 78 | display: block; 79 | width: 100%; 80 | border: none; 81 | font-family: var(--vscode-font-family); 82 | padding: var(--input-padding-vertical) var(--input-padding-horizontal); 83 | color: var(--vscode-input-foreground); 84 | outline-color: var(--vscode-input-border); 85 | background-color: var(--vscode-input-background); 86 | } 87 | 88 | input::placeholder, 89 | textarea::placeholder { 90 | color: var(--vscode-input-placeholderForeground); 91 | } 92 | -------------------------------------------------------------------------------- /extension/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vstodo", 3 | "displayName": "VSTodo", 4 | "description": "Keeping track of stuff", 5 | "version": "0.0.1", 6 | "engines": { 7 | "vscode": "^1.52.0" 8 | }, 9 | "categories": [ 10 | "Other" 11 | ], 12 | "activationEvents": [ 13 | "onCommand:vstodo.helloWorld", 14 | "onCommand:vstodo.askQuestion", 15 | "onCommand:vstodo.refresh", 16 | "onCommand:vstodo.addTodo", 17 | "onCommand:vstodo.authenticate", 18 | "onView:vstodo-sidebar" 19 | ], 20 | "main": "./dist/extension.js", 21 | "contributes": { 22 | "viewsContainers": { 23 | "activitybar": [ 24 | { 25 | "id": "vstodo-sidebar-view", 26 | "title": "VSTodo", 27 | "icon": "media/checklist.svg" 28 | } 29 | ] 30 | }, 31 | "views": { 32 | "vstodo-sidebar-view": [ 33 | { 34 | "type": "webview", 35 | "id": "vstodo-sidebar", 36 | "name": "VSTodo", 37 | "icon": "media/checklist.svg", 38 | "contextualTitle": "VSTodo" 39 | } 40 | ] 41 | }, 42 | "commands": [ 43 | { 44 | "command": "vstodo.helloWorld", 45 | "title": "Hello World" 46 | }, 47 | { 48 | "command": "vstodo.askQuestion", 49 | "category": "VSTodo", 50 | "title": "Ask Question" 51 | }, 52 | { 53 | "command": "vstodo.refresh", 54 | "category": "VSTodo", 55 | "title": "Refresh" 56 | }, 57 | { 58 | "command": "vstodo.addTodo", 59 | "category": "VSTodo", 60 | "title": "Add Todo From Selection" 61 | }, 62 | { 63 | "command": "vstodo.authenticate", 64 | "category": "VSTodo", 65 | "title": "Authenticate" 66 | } 67 | ] 68 | }, 69 | "scripts": { 70 | "vscode:prepublish": "npm run package", 71 | "compile": "webpack --config ./build/node-extension.webpack.config.js", 72 | "watch": "concurrently \"rollup -c -w\" \"webpack --watch --config ./build/node-extension.webpack.config.js\"", 73 | "package": "webpack --mode production --devtool hidden-source-map --config ./build/node-extension.webpack.config.js", 74 | "test-compile": "tsc -p ./", 75 | "test-watch": "tsc -watch -p ./", 76 | "pretest": "npm run test-compile && npm run lint", 77 | "lint": "eslint src --ext ts", 78 | "test": "node ./out/test/runTest.js" 79 | }, 80 | "devDependencies": { 81 | "@rollup/plugin-commonjs": "^17.0.0", 82 | "@rollup/plugin-node-resolve": "^11.0.1", 83 | "@rollup/plugin-typescript": "^8.1.0", 84 | "@tsconfig/svelte": "^1.0.10", 85 | "@types/glob": "^7.1.3", 86 | "@types/mocha": "^8.0.4", 87 | "@types/node": "^12.11.7", 88 | "@types/polka": "^0.5.1", 89 | "@types/vscode": "^1.52.0", 90 | "@typescript-eslint/eslint-plugin": "^4.9.0", 91 | "@typescript-eslint/parser": "^4.9.0", 92 | "concurrently": "^5.3.0", 93 | "eslint": "^7.15.0", 94 | "glob": "^7.1.6", 95 | "mocha": "^8.1.3", 96 | "rollup": "^2.3.4", 97 | "rollup-plugin-svelte": "^6.0.0", 98 | "rollup-plugin-terser": "^7.0.2", 99 | "svelte": "^3.31.0", 100 | "svelte-check": "^1.1.23", 101 | "svelte-preprocess": "^4.6.1", 102 | "ts-loader": "^8.0.11", 103 | "typescript": "^4.1.2", 104 | "vscode-test": "^1.4.1", 105 | "webpack": "^5.10.0", 106 | "webpack-cli": "^4.2.0" 107 | }, 108 | "dependencies": { 109 | "polka": "^0.5.2" 110 | } 111 | } 112 | -------------------------------------------------------------------------------- /extension/rollup.config.js: -------------------------------------------------------------------------------- 1 | import svelte from "rollup-plugin-svelte"; 2 | import resolve from "@rollup/plugin-node-resolve"; 3 | import commonjs from "@rollup/plugin-commonjs"; 4 | import { terser } from "rollup-plugin-terser"; 5 | import sveltePreprocess from "svelte-preprocess"; 6 | import typescript from "@rollup/plugin-typescript"; 7 | import path from "path"; 8 | import fs from "fs"; 9 | 10 | const production = !process.env.ROLLUP_WATCH; 11 | 12 | export default fs 13 | .readdirSync(path.join(__dirname, "webviews", "pages")) 14 | .map((input) => { 15 | const name = input.split(".")[0]; 16 | return { 17 | input: "webviews/pages/" + input, 18 | output: { 19 | sourcemap: true, 20 | format: "iife", 21 | name: "app", 22 | file: "out/compiled/" + name + ".js", 23 | }, 24 | plugins: [ 25 | svelte({ 26 | // enable run-time checks when not in production 27 | dev: !production, 28 | // we'll extract any component CSS out into 29 | // a separate file - better for performance 30 | css: (css) => { 31 | css.write(name + ".css"); 32 | }, 33 | preprocess: sveltePreprocess(), 34 | }), 35 | 36 | // If you have external dependencies installed from 37 | // npm, you'll most likely need these plugins. In 38 | // some cases you'll need additional configuration - 39 | // consult the documentation for details: 40 | // https://github.com/rollup/plugins/tree/master/packages/commonjs 41 | resolve({ 42 | browser: true, 43 | dedupe: ["svelte"], 44 | }), 45 | commonjs(), 46 | typescript({ 47 | tsconfig: "webviews/tsconfig.json", 48 | sourceMap: !production, 49 | inlineSources: !production, 50 | }), 51 | 52 | // In dev mode, call `npm run start` once 53 | // the bundle has been generated 54 | // !production && serve(), 55 | 56 | // Watch the `public` directory and refresh the 57 | // browser on changes when not in production 58 | // !production && livereload("public"), 59 | 60 | // If we're building for production (npm run build 61 | // instead of npm run dev), minify 62 | production && terser(), 63 | ], 64 | watch: { 65 | clearScreen: false, 66 | }, 67 | }; 68 | }); 69 | -------------------------------------------------------------------------------- /extension/src/HelloWorldPanel.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from "vscode"; 2 | import { getNonce } from "./getNonce"; 3 | 4 | export class HelloWorldPanel { 5 | /** 6 | * Track the currently panel. Only allow a single panel to exist at a time. 7 | */ 8 | public static currentPanel: HelloWorldPanel | undefined; 9 | 10 | public static readonly viewType = "hello-world"; 11 | 12 | private readonly _panel: vscode.WebviewPanel; 13 | private readonly _extensionUri: vscode.Uri; 14 | private _disposables: vscode.Disposable[] = []; 15 | 16 | public static createOrShow(extensionUri: vscode.Uri) { 17 | const column = vscode.window.activeTextEditor 18 | ? vscode.window.activeTextEditor.viewColumn 19 | : undefined; 20 | 21 | // If we already have a panel, show it. 22 | if (HelloWorldPanel.currentPanel) { 23 | HelloWorldPanel.currentPanel._panel.reveal(column); 24 | HelloWorldPanel.currentPanel._update(); 25 | return; 26 | } 27 | 28 | // Otherwise, create a new panel. 29 | const panel = vscode.window.createWebviewPanel( 30 | HelloWorldPanel.viewType, 31 | "HelloWorld", 32 | column || vscode.ViewColumn.One, 33 | { 34 | // Enable javascript in the webview 35 | enableScripts: true, 36 | 37 | // And restrict the webview to only loading content from our extension's `media` directory. 38 | localResourceRoots: [ 39 | vscode.Uri.joinPath(extensionUri, "media"), 40 | vscode.Uri.joinPath(extensionUri, "out/compiled"), 41 | ], 42 | } 43 | ); 44 | 45 | HelloWorldPanel.currentPanel = new HelloWorldPanel(panel, extensionUri); 46 | } 47 | 48 | public static kill() { 49 | HelloWorldPanel.currentPanel?.dispose(); 50 | HelloWorldPanel.currentPanel = undefined; 51 | } 52 | 53 | public static revive(panel: vscode.WebviewPanel, extensionUri: vscode.Uri) { 54 | HelloWorldPanel.currentPanel = new HelloWorldPanel(panel, extensionUri); 55 | } 56 | 57 | private constructor(panel: vscode.WebviewPanel, extensionUri: vscode.Uri) { 58 | this._panel = panel; 59 | this._extensionUri = extensionUri; 60 | 61 | // Set the webview's initial html content 62 | this._update(); 63 | 64 | // Listen for when the panel is disposed 65 | // This happens when the user closes the panel or when the panel is closed programatically 66 | this._panel.onDidDispose(() => this.dispose(), null, this._disposables); 67 | 68 | // // Handle messages from the webview 69 | // this._panel.webview.onDidReceiveMessage( 70 | // (message) => { 71 | // switch (message.command) { 72 | // case "alert": 73 | // vscode.window.showErrorMessage(message.text); 74 | // return; 75 | // } 76 | // }, 77 | // null, 78 | // this._disposables 79 | // ); 80 | } 81 | 82 | public dispose() { 83 | HelloWorldPanel.currentPanel = undefined; 84 | 85 | // Clean up our resources 86 | this._panel.dispose(); 87 | 88 | while (this._disposables.length) { 89 | const x = this._disposables.pop(); 90 | if (x) { 91 | x.dispose(); 92 | } 93 | } 94 | } 95 | 96 | private async _update() { 97 | const webview = this._panel.webview; 98 | 99 | this._panel.webview.html = this._getHtmlForWebview(webview); 100 | webview.onDidReceiveMessage(async (data) => { 101 | switch (data.type) { 102 | case "onInfo": { 103 | if (!data.value) { 104 | return; 105 | } 106 | vscode.window.showInformationMessage(data.value); 107 | break; 108 | } 109 | case "onError": { 110 | if (!data.value) { 111 | return; 112 | } 113 | vscode.window.showErrorMessage(data.value); 114 | break; 115 | } 116 | // case "tokens": { 117 | // await Util.globalState.update(accessTokenKey, data.accessToken); 118 | // await Util.globalState.update(refreshTokenKey, data.refreshToken); 119 | // break; 120 | // } 121 | } 122 | }); 123 | } 124 | 125 | private _getHtmlForWebview(webview: vscode.Webview) { 126 | // // And the uri we use to load this script in the webview 127 | const scriptUri = webview.asWebviewUri( 128 | vscode.Uri.joinPath(this._extensionUri, "out/compiled", "HelloWorld.js") 129 | ); 130 | 131 | // Uri to load styles into webview 132 | const stylesResetUri = webview.asWebviewUri( 133 | vscode.Uri.joinPath(this._extensionUri, "media", "reset.css") 134 | ); 135 | const stylesMainUri = webview.asWebviewUri( 136 | vscode.Uri.joinPath(this._extensionUri, "media", "vscode.css") 137 | ); 138 | // const cssUri = webview.asWebviewUri( 139 | // vscode.Uri.joinPath(this._extensionUri, "out", "compiled/swiper.css") 140 | // ); 141 | 142 | // // Use a nonce to only allow specific scripts to be run 143 | const nonce = getNonce(); 144 | 145 | return ` 146 | 147 | 148 | 149 | 153 | 154 | 155 | 156 | 157 | 159 | 160 | 161 | 162 | 106 | 107 | 108 | 109 | 110 | `; 111 | } 112 | } 113 | -------------------------------------------------------------------------------- /extension/src/TokenManager.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from "vscode"; 2 | 3 | const KEY = "vstodotoken"; 4 | 5 | export class TokenManager { 6 | static globalState: vscode.Memento; 7 | 8 | static setToken(token: string) { 9 | return this.globalState.update(KEY, token); 10 | } 11 | 12 | static getToken(): string | undefined { 13 | return this.globalState.get(KEY); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /extension/src/authenticate.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from "vscode"; 2 | import { apiBaseUrl } from "./constants"; 3 | import * as polka from "polka"; 4 | import { TokenManager } from "./TokenManager"; 5 | 6 | export const authenticate = (fn: () => void) => { 7 | const app = polka(); 8 | 9 | app.get(`/auth/:token`, async (req, res) => { 10 | const { token } = req.params; 11 | if (!token) { 12 | res.end(`

something went wrong

`); 13 | return; 14 | } 15 | 16 | await TokenManager.setToken(token); 17 | fn(); 18 | 19 | res.end(`

auth was successful, you can close this now

`); 20 | 21 | (app as any).server.close(); 22 | }); 23 | 24 | app.listen(54321, (err: Error) => { 25 | if (err) { 26 | vscode.window.showErrorMessage(err.message); 27 | } else { 28 | vscode.commands.executeCommand( 29 | "vscode.open", 30 | vscode.Uri.parse(`${apiBaseUrl}/auth/github`) 31 | ); 32 | } 33 | }); 34 | }; 35 | -------------------------------------------------------------------------------- /extension/src/constants.ts: -------------------------------------------------------------------------------- 1 | export const apiBaseUrl = "http://localhost:3002"; 2 | -------------------------------------------------------------------------------- /extension/src/extension.ts: -------------------------------------------------------------------------------- 1 | // The module 'vscode' contains the VS Code extensibility API 2 | // Import the module and reference it with the alias vscode in your code below 3 | import * as vscode from "vscode"; 4 | import { authenticate } from "./authenticate"; 5 | import { HelloWorldPanel } from "./HelloWorldPanel"; 6 | import { SidebarProvider } from "./SidebarProvider"; 7 | import { TokenManager } from "./TokenManager"; 8 | 9 | export function activate(context: vscode.ExtensionContext) { 10 | TokenManager.globalState = context.globalState; 11 | 12 | const sidebarProvider = new SidebarProvider(context.extensionUri); 13 | 14 | const item = vscode.window.createStatusBarItem( 15 | vscode.StatusBarAlignment.Right 16 | ); 17 | item.text = "$(beaker) Add Todo"; 18 | item.command = "vstodo.addTodo"; 19 | item.show(); 20 | 21 | context.subscriptions.push( 22 | vscode.window.registerWebviewViewProvider("vstodo-sidebar", sidebarProvider) 23 | ); 24 | 25 | context.subscriptions.push( 26 | vscode.commands.registerCommand("vstodo.addTodo", () => { 27 | const { activeTextEditor } = vscode.window; 28 | 29 | if (!activeTextEditor) { 30 | vscode.window.showInformationMessage("No active text editor"); 31 | return; 32 | } 33 | 34 | const text = activeTextEditor.document.getText( 35 | activeTextEditor.selection 36 | ); 37 | 38 | sidebarProvider._view?.webview.postMessage({ 39 | type: "new-todo", 40 | value: text, 41 | }); 42 | }) 43 | ); 44 | 45 | context.subscriptions.push( 46 | vscode.commands.registerCommand("vstodo.helloWorld", () => { 47 | vscode.window.showInformationMessage( 48 | "token value is: " + TokenManager.getToken() 49 | ); 50 | // HelloWorldPanel.createOrShow(context.extensionUri); 51 | }) 52 | ); 53 | 54 | context.subscriptions.push( 55 | vscode.commands.registerCommand("vstodo.authenticate", () => { 56 | try { 57 | authenticate(); 58 | } catch (err) { 59 | console.log(err); 60 | } 61 | }) 62 | ); 63 | 64 | context.subscriptions.push( 65 | vscode.commands.registerCommand("vstodo.refresh", async () => { 66 | // HelloWorldPanel.kill(); 67 | // HelloWorldPanel.createOrShow(context.extensionUri); 68 | await vscode.commands.executeCommand("workbench.action.closeSidebar"); 69 | await vscode.commands.executeCommand( 70 | "workbench.view.extension.vstodo-sidebar-view" 71 | ); 72 | // setTimeout(() => { 73 | // vscode.commands.executeCommand( 74 | // "workbench.action.webview.openDeveloperTools" 75 | // ); 76 | // }, 500); 77 | }) 78 | ); 79 | 80 | context.subscriptions.push( 81 | vscode.commands.registerCommand("vstodo.askQuestion", async () => { 82 | const answer = await vscode.window.showInformationMessage( 83 | "How was your day?", 84 | "good", 85 | "bad" 86 | ); 87 | 88 | if (answer === "bad") { 89 | vscode.window.showInformationMessage("Sorry to hear that"); 90 | } else { 91 | console.log({ answer }); 92 | } 93 | }) 94 | ); 95 | } 96 | 97 | // this method is called when your extension is deactivated 98 | export function deactivate() {} 99 | -------------------------------------------------------------------------------- /extension/src/getNonce.ts: -------------------------------------------------------------------------------- 1 | export function getNonce() { 2 | let text = ""; 3 | const possible = 4 | "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; 5 | for (let i = 0; i < 32; i++) { 6 | text += possible.charAt(Math.floor(Math.random() * possible.length)); 7 | } 8 | return text; 9 | } 10 | -------------------------------------------------------------------------------- /extension/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es6", 5 | "outDir": "out", 6 | "lib": [ 7 | "es6" 8 | ], 9 | "sourceMap": true, 10 | "rootDir": "src", 11 | "allowSyntheticDefaultImports": true, 12 | "strict": true /* enable all strict type-checking options */ 13 | /* Additional Checks */ 14 | // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ 15 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ 16 | // "noUnusedParameters": true, /* Report errors on unused parameters. */ 17 | }, 18 | "exclude": [ 19 | "node_modules", 20 | ".vscode-test", 21 | "webviews" 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /extension/vsc-extension-quickstart.md: -------------------------------------------------------------------------------- 1 | # Welcome to your VS Code Extension 2 | 3 | ## What's in the folder 4 | 5 | * This folder contains all of the files necessary for your extension. 6 | * `package.json` - this is the manifest file in which you declare your extension and command. 7 | * The sample plugin registers a command and defines its title and command name. With this information VS Code can show the command in the command palette. It doesn’t yet need to load the plugin. 8 | * `src/extension.ts` - this is the main file where you will provide the implementation of your command. 9 | * The file exports one function, `activate`, which is called the very first time your extension is activated (in this case by executing the command). Inside the `activate` function we call `registerCommand`. 10 | * We pass the function containing the implementation of the command as the second parameter to `registerCommand`. 11 | 12 | ## Get up and running straight away 13 | 14 | * Press `F5` to open a new window with your extension loaded. 15 | * Run your command from the command palette by pressing (`Ctrl+Shift+P` or `Cmd+Shift+P` on Mac) and typing `Hello World`. 16 | * Set breakpoints in your code inside `src/extension.ts` to debug your extension. 17 | * Find output from your extension in the debug console. 18 | 19 | ## Make changes 20 | 21 | * You can relaunch the extension from the debug toolbar after changing code in `src/extension.ts`. 22 | * You can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes. 23 | 24 | 25 | ## Explore the API 26 | 27 | * You can open the full set of our API when you open the file `node_modules/@types/vscode/index.d.ts`. 28 | 29 | ## Run tests 30 | 31 | * Open the debug viewlet (`Ctrl+Shift+D` or `Cmd+Shift+D` on Mac) and from the launch configuration dropdown pick `Extension Tests`. 32 | * Press `F5` to run the tests in a new window with your extension loaded. 33 | * See the output of the test result in the debug console. 34 | * Make changes to `src/test/suite/extension.test.ts` or create new test files inside the `test/suite` folder. 35 | * The provided test runner will only consider files matching the name pattern `**.test.ts`. 36 | * You can create folders inside the `test` folder to structure your tests any way you want. 37 | 38 | ## Go further 39 | 40 | * Reduce the extension size and improve the startup time by [bundling your extension](https://code.visualstudio.com/api/working-with-extensions/bundling-extension). 41 | * [Publish your extension](https://code.visualstudio.com/api/working-with-extensions/publishing-extension) on the VSCode extension marketplace. 42 | * Automate builds by setting up [Continuous Integration](https://code.visualstudio.com/api/working-with-extensions/continuous-integration). 43 | -------------------------------------------------------------------------------- /extension/webviews/components/HelloWorld.svelte: -------------------------------------------------------------------------------- 1 | 3 | 4 |

Hello131231

5 | -------------------------------------------------------------------------------- /extension/webviews/components/Sidebar.svelte: -------------------------------------------------------------------------------- 1 | 35 | 36 | {#if loading} 37 |
loading...
38 | {:else if user} 39 | {#if page === 'todos'} 40 | 41 | 45 | {:else} 46 |
Contact me here: adlkfjjqioefeqio
47 | 51 | {/if} 52 | 58 | {:else} 59 | 63 | {/if} 64 | -------------------------------------------------------------------------------- /extension/webviews/components/Todos.svelte: -------------------------------------------------------------------------------- 1 | 44 | 45 | 50 | 51 |
Hello: {user.name}
52 | 53 |
{ 55 | addTodo(text); 56 | text = ''; 57 | }}> 58 | 59 |
60 | 61 |
    62 | {#each todos as todo (todo.id)} 63 |
  • { 66 | todo.completed = !todo.completed; 67 | const response = await fetch(`${apiBaseUrl}/todo`, { 68 | method: 'PUT', 69 | body: JSON.stringify({ 70 | id: todo.id, 71 | }), 72 | headers: { 73 | 'content-type': 'application/json', 74 | authorization: `Bearer ${accessToken}`, 75 | }, 76 | }); 77 | console.log(await response.json()); 78 | }}> 79 | {todo.text} 80 |
  • 81 | {/each} 82 |
83 | -------------------------------------------------------------------------------- /extension/webviews/globals.d.ts: -------------------------------------------------------------------------------- 1 | import * as _vscode from "vscode"; 2 | 3 | declare global { 4 | const tsvscode: { 5 | postMessage: ({ type: string, value: any }) => void; 6 | getState: () => any; 7 | setState: (state: any) => void; 8 | }; 9 | const apiBaseUrl: string; 10 | } 11 | -------------------------------------------------------------------------------- /extension/webviews/pages/HelloWorld.ts: -------------------------------------------------------------------------------- 1 | import App from "../components/HelloWorld.svelte"; 2 | 3 | const app = new App({ 4 | target: document.body, 5 | }); 6 | 7 | export default app; 8 | -------------------------------------------------------------------------------- /extension/webviews/pages/sidebar.ts: -------------------------------------------------------------------------------- 1 | import App from "../components/Sidebar.svelte"; 2 | 3 | const app = new App({ 4 | target: document.body, 5 | }); 6 | 7 | export default app; 8 | -------------------------------------------------------------------------------- /extension/webviews/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@tsconfig/svelte/tsconfig.json", 3 | "include": ["./**/*", ], 4 | "exclude": ["../node_modules/*"], 5 | "compilerOptions": {"strict": true, } 6 | } -------------------------------------------------------------------------------- /extension/webviews/types.ts: -------------------------------------------------------------------------------- 1 | export type User = { 2 | id: string; 3 | name: string; 4 | githubId: string; 5 | }; 6 | --------------------------------------------------------------------------------