├── .expo-shared
└── assets.json
├── .firebaserc
├── .gitignore
├── .watchmanconfig
├── App.js
├── README.md
├── app.json
├── assets
├── icon.png
└── splash.png
├── babel.config.js
├── firebase.json
├── functions
├── .gitignore
├── index.js
├── package.json
├── todos.js
└── yarn.lock
├── package.json
├── src
├── api.js
├── colors.js
├── components
│ ├── Header.js
│ └── TodoList.js
└── store
│ ├── actions.js
│ └── store.js
└── yarn.lock
/.expo-shared/assets.json:
--------------------------------------------------------------------------------
1 | {
2 | "f25c14ed382f3ad75b737a180b448856d9a619f75126054467df25dd9d114a09": true,
3 | "2499d383eaf540c7848d87d42a7640c2fe86976e7582caf0ba86b9a01d1b12b7": true
4 | }
--------------------------------------------------------------------------------
/.firebaserc:
--------------------------------------------------------------------------------
1 | {
2 | "projects": {
3 | "default": "redux-observable-todos"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/**/*
2 | .expo/*
3 | npm-debug.*
4 | *.jks
5 | *.p8
6 | *.p12
7 | *.key
8 | *.mobileprovision
9 | *.orig.*
10 | web-build/
11 | web-report/
12 |
--------------------------------------------------------------------------------
/.watchmanconfig:
--------------------------------------------------------------------------------
1 | {}
2 |
--------------------------------------------------------------------------------
/App.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { StyleSheet, Text, View } from "react-native";
3 | import { Provider } from "react-redux";
4 | import { store } from "./src/store/store";
5 | import Header from "./src/components/Header";
6 | import TodoList from "./src/components/TodoList";
7 |
8 | export default function App() {
9 | return (
10 |
11 |
12 |
13 |
14 |
15 |
16 | );
17 | }
18 |
19 | const styles = StyleSheet.create({
20 | container: {
21 | flex: 1,
22 | flexDirection: "column",
23 | alignItems: "stretch"
24 | },
25 | todoList: {
26 | flex: 1
27 | }
28 | });
29 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | > This code is published as part of the corresponding blog article at the [Toptal Engineering Blog](https://www.toptal.com/react-native/react-redux-rxjs-tutorial)
2 | >
3 | > Visit https://www.toptal.com/blog and subscribe to our newsletter to read more great posts!
4 |
5 |
6 |
7 |
8 |

9 |
10 |
11 |
12 |
13 | Redux Observable Todo
14 | ---------------------
15 |
16 | Sample todo app using redux-observable
17 |
--------------------------------------------------------------------------------
/app.json:
--------------------------------------------------------------------------------
1 | {
2 | "expo": {
3 | "name": "Redux Observable Todo",
4 | "slug": "redux-observable-todo",
5 | "privacy": "public",
6 | "sdkVersion": "34.0.0",
7 | "platforms": [
8 | "ios",
9 | "android"
10 | ],
11 | "version": "1.0.0",
12 | "orientation": "portrait",
13 | "icon": "./assets/icon.png",
14 | "splash": {
15 | "image": "./assets/splash.png",
16 | "resizeMode": "contain",
17 | "backgroundColor": "#ffffff"
18 | },
19 | "updates": {
20 | "fallbackToCacheTimeout": 0
21 | },
22 | "assetBundlePatterns": [
23 | "./assets/*"
24 | ],
25 | "ios": {
26 | "supportsTablet": true
27 | },
28 | "description": "Sample app for blog post \"Building reactive apps with Redux and Redux-Observable\"\nSource Code: https://github.com/sourabhv/redux-observable-todo",
29 | "githubUrl": "https://github.com/sourabhv/redux-observable-todo"
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/assets/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sourabhv/redux-observable-todo/4169c2af4f03b554bff075d237ef7f7d29a4abe2/assets/icon.png
--------------------------------------------------------------------------------
/assets/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sourabhv/redux-observable-todo/4169c2af4f03b554bff075d237ef7f7d29a4abe2/assets/splash.png
--------------------------------------------------------------------------------
/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = function(api) {
2 | api.cache(true);
3 | return {
4 | presets: ['babel-preset-expo'],
5 | };
6 | };
7 |
--------------------------------------------------------------------------------
/firebase.json:
--------------------------------------------------------------------------------
1 | {}
2 |
--------------------------------------------------------------------------------
/functions/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
--------------------------------------------------------------------------------
/functions/index.js:
--------------------------------------------------------------------------------
1 | const functions = require("firebase-functions");
2 | const admin = require("firebase-admin");
3 | admin.initializeApp();
4 | const express = require("express");
5 | const bodyParser = require("body-parser");
6 | const cors = require("cors")({ origin: true });
7 | const morgan = require("morgan");
8 | const todosRouter = require("./todos");
9 |
10 | const app = express();
11 | app.use(cors);
12 | app.use(bodyParser.urlencoded({ extended: false }));
13 | app.use(bodyParser.json());
14 | app.use(
15 | morgan(":method :url :status :res[content-length] - :response-time ms")
16 | );
17 |
18 | app.get("/user", (req, res) => {
19 | res.status(200).send({
20 | id: "123",
21 | name: "John Doe",
22 | email: "foo@example.com"
23 | });
24 | });
25 |
26 | app.use("/todo", todosRouter);
27 |
28 | exports.api = functions.https.onRequest(app);
29 |
--------------------------------------------------------------------------------
/functions/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "functions",
3 | "description": "Cloud Functions for Firebase",
4 | "scripts": {
5 | "serve": "firebase serve --only functions",
6 | "shell": "firebase functions:shell",
7 | "start": "npm run shell",
8 | "deploy": "firebase deploy --only functions",
9 | "logs": "firebase functions:log"
10 | },
11 | "engines": {
12 | "node": "10"
13 | },
14 | "dependencies": {
15 | "body-parser": "^1.19.0",
16 | "cors": "^2.8.5",
17 | "express": "^4.17.1",
18 | "firebase-admin": "^8.0.0",
19 | "firebase-functions": "^3.1.0",
20 | "moment": "^2.24.0",
21 | "morgan": "^1.9.1"
22 | },
23 | "devDependencies": {
24 | "firebase-functions-test": "^0.1.6"
25 | },
26 | "private": true
27 | }
28 |
--------------------------------------------------------------------------------
/functions/todos.js:
--------------------------------------------------------------------------------
1 | const functions = require("firebase-functions");
2 | const admin = require("firebase-admin");
3 | const { Router } = require("express");
4 |
5 | const todosRef = admin.firestore().collection("todos");
6 | const router = new Router();
7 |
8 | router.get("/", async (req, res) => {
9 | const todos = (await todosRef.get()).docs.map(doc => ({
10 | id: doc.id,
11 | ...doc.data()
12 | }));
13 | if (todos.length > 20) {
14 | await todosRef.doc(todos[0].id).delete();
15 | const remainingTodos = todos.slice(1);
16 | res.status(200).send({ todos: remainingTodos });
17 | } else {
18 | res.status(200).send({ todos });
19 | }
20 | });
21 |
22 | router.post("/", async (req, res) => {
23 | const doc = todosRef.doc();
24 | const data = {
25 | text: req.body.text,
26 | completed: !!req.body.completed || false
27 | };
28 | await doc.set(data);
29 |
30 | res.status(200).send({
31 | id: doc.id,
32 | ...data
33 | });
34 | });
35 |
36 | router.post("/:id/complete", async (req, res) => {
37 | const id = req.params.id;
38 | await todosRef.doc(id).update({ completed: true });
39 | const todo = (await todosRef.doc(id).get()).data();
40 | res.status(200).send({ id, ...todo });
41 | });
42 |
43 | module.exports = router;
44 |
--------------------------------------------------------------------------------
/functions/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@firebase/app-types@0.x":
6 | version "0.4.3"
7 | resolved "https://registry.yarnpkg.com/@firebase/app-types/-/app-types-0.4.3.tgz#80d2b6e5ee43ac99892329ab02301ee7ed82da45"
8 | integrity sha512-VU5c+ZjejvefLVH4cjiX3Hy1w9HYMv7TtZ1tF9ZmOqT4DSIU1a3VISWoo8///cGGffr5IirMO+Q/WZLI4p8VcA==
9 |
10 | "@firebase/database-types@0.4.3":
11 | version "0.4.3"
12 | resolved "https://registry.yarnpkg.com/@firebase/database-types/-/database-types-0.4.3.tgz#4ee4ada5544f3629fb451e216da8f917a80ae8cd"
13 | integrity sha512-21yCiJA2Tyt6dJYwWeB69MwoawBu5UWNtP6MAY0ugyRBHVdjAMHMYalPxCjZ46LAmhfim0+i8NXRadOFVS3hUA==
14 | dependencies:
15 | "@firebase/app-types" "0.x"
16 |
17 | "@firebase/database@^0.5.1":
18 | version "0.5.2"
19 | resolved "https://registry.yarnpkg.com/@firebase/database/-/database-0.5.2.tgz#9f480c64f7a16569ae8cf18ed82b22acf0ea0885"
20 | integrity sha512-LnXKRE1AmjlS+iRF7j8vx+Ni8x85CmLP5u5Pw5rDKhKLn2eTR1tJKD937mUeeGEtDHwR1rrrkLYOqRR2cSG3hQ==
21 | dependencies:
22 | "@firebase/database-types" "0.4.3"
23 | "@firebase/logger" "0.1.24"
24 | "@firebase/util" "0.2.27"
25 | faye-websocket "0.11.3"
26 | tslib "1.10.0"
27 |
28 | "@firebase/logger@0.1.24":
29 | version "0.1.24"
30 | resolved "https://registry.yarnpkg.com/@firebase/logger/-/logger-0.1.24.tgz#770468c9f6c910c0db6008f7dccad88bb1df06d6"
31 | integrity sha512-wPwhWCepEjWiTIqeC9U+7Hcw4XwezKPdXmyXbYSPiWNDcVekNgMPkntwSK+/2ufJO/1nMwAL2n6fL12oQG/PpQ==
32 |
33 | "@firebase/util@0.2.27":
34 | version "0.2.27"
35 | resolved "https://registry.yarnpkg.com/@firebase/util/-/util-0.2.27.tgz#6adac01023af835ed44379534b09fd1399f6f469"
36 | integrity sha512-kFlbWNX1OuLfHrDXZ5QLmNNiLtMyxzbBgMo1DY1tXMjKK1AMYsHnyjInA8esvO0SCDp5XN3Pt9EDlhY4sRiLsw==
37 | dependencies:
38 | tslib "1.10.0"
39 |
40 | "@google-cloud/common@^2.1.1":
41 | version "2.1.2"
42 | resolved "https://registry.yarnpkg.com/@google-cloud/common/-/common-2.1.2.tgz#cefab7522d652d4ee48ab4719e2fe2d6c117db4c"
43 | integrity sha512-VAjWRrTEgcGujj/MgTTAtjjzeDoQqs/FDT6DG7004QFZoJsSwBmx2vGpI5TJmCuxLWvhEc0Xs5AMOvhgt7FLSw==
44 | dependencies:
45 | "@google-cloud/projectify" "^1.0.0"
46 | "@google-cloud/promisify" "^1.0.0"
47 | arrify "^2.0.0"
48 | duplexify "^3.6.0"
49 | ent "^2.2.0"
50 | extend "^3.0.2"
51 | google-auth-library "^5.0.0"
52 | retry-request "^4.0.0"
53 | teeny-request "^5.2.1"
54 |
55 | "@google-cloud/firestore@^2.0.0":
56 | version "2.3.0"
57 | resolved "https://registry.yarnpkg.com/@google-cloud/firestore/-/firestore-2.3.0.tgz#079854c58fe43362595d5e54afd577bfc0059909"
58 | integrity sha512-U5t5QSn+mAx9cw5QiIISDIVzICjxZ2o2+Qs/824I7BU6HkcElgxddgTcACF1z1xl2ZXxmz6NSBWmMr23Uhcilg==
59 | dependencies:
60 | bun "^0.0.12"
61 | deep-equal "^1.0.1"
62 | functional-red-black-tree "^1.0.1"
63 | google-gax "^1.1.2"
64 | through2 "^3.0.0"
65 |
66 | "@google-cloud/paginator@^2.0.0":
67 | version "2.0.1"
68 | resolved "https://registry.yarnpkg.com/@google-cloud/paginator/-/paginator-2.0.1.tgz#89ca97933eecfdd7eaa07bd79ed01c9869c9531b"
69 | integrity sha512-HZ6UTGY/gHGNriD7OCikYWL/Eu0sTEur2qqse2w6OVsz+57se3nTkqH14JIPxtf0vlEJ8IJN5w3BdZ22pjCB8g==
70 | dependencies:
71 | arrify "^2.0.0"
72 | extend "^3.0.2"
73 |
74 | "@google-cloud/projectify@^1.0.0":
75 | version "1.0.1"
76 | resolved "https://registry.yarnpkg.com/@google-cloud/projectify/-/projectify-1.0.1.tgz#f654c2ea9de923294ec814ff07c42891abf2d143"
77 | integrity sha512-xknDOmsMgOYHksKc1GPbwDLsdej8aRNIA17SlSZgQdyrcC0lx0OGo4VZgYfwoEU1YS8oUxF9Y+6EzDOb0eB7Xg==
78 |
79 | "@google-cloud/promisify@^1.0.0":
80 | version "1.0.2"
81 | resolved "https://registry.yarnpkg.com/@google-cloud/promisify/-/promisify-1.0.2.tgz#e581aa79ff71fb6074acc1cc59e3d81bf84ce07b"
82 | integrity sha512-7WfV4R/3YV5T30WRZW0lqmvZy9hE2/p9MvpI34WuKa2Wz62mLu5XplGTFEMK6uTbJCLWUxTcZ4J4IyClKucE5g==
83 |
84 | "@google-cloud/storage@^3.0.2":
85 | version "3.2.1"
86 | resolved "https://registry.yarnpkg.com/@google-cloud/storage/-/storage-3.2.1.tgz#6701fbc91b95304e0da88c0f193b1800c9ba4159"
87 | integrity sha512-129EwPGej6bXzY1u5nja2aeMDew6DIHaJn7ZV6nteQ74LQQSNv2jKrqTlyhndBsAwpuwQAxeghPTCoFT/H8Frg==
88 | dependencies:
89 | "@google-cloud/common" "^2.1.1"
90 | "@google-cloud/paginator" "^2.0.0"
91 | "@google-cloud/promisify" "^1.0.0"
92 | arrify "^2.0.0"
93 | compressible "^2.0.12"
94 | concat-stream "^2.0.0"
95 | date-and-time "^0.9.0"
96 | duplexify "^3.5.0"
97 | extend "^3.0.2"
98 | gaxios "^2.0.1"
99 | gcs-resumable-upload "^2.0.0"
100 | hash-stream-validation "^0.2.1"
101 | mime "^2.2.0"
102 | mime-types "^2.0.8"
103 | onetime "^5.1.0"
104 | p-limit "^2.2.0"
105 | pumpify "^2.0.0"
106 | snakeize "^0.1.0"
107 | stream-events "^1.0.1"
108 | through2 "^3.0.0"
109 | xdg-basedir "^4.0.0"
110 |
111 | "@grpc/grpc-js@^0.5.2":
112 | version "0.5.3"
113 | resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-0.5.3.tgz#4896d6c598dcb37c6bd090e7d0e9fa3eaae18fe5"
114 | integrity sha512-doDzxjdN0IJihQJvjDkZun9bZp/TW2EKO5E4fNvw8634kU1eNqPnFtAmiEiIYptqJ9StC+zRo1mwrazhqI0k5A==
115 | dependencies:
116 | semver "^6.2.0"
117 |
118 | "@grpc/proto-loader@^0.5.1":
119 | version "0.5.2"
120 | resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.5.2.tgz#c84f83be962f518bc303ca2d5e6ef2239439786c"
121 | integrity sha512-eBKD/FPxQoY1x6QONW2nBd54QUEyzcFP9FenujmoeDPy1rutVSHki1s/wR68F6O1QfCNDx+ayBH1O2CVNMzyyw==
122 | dependencies:
123 | lodash.camelcase "^4.3.0"
124 | protobufjs "^6.8.6"
125 |
126 | "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
127 | version "1.1.2"
128 | resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf"
129 | integrity sha1-m4sMxmPWaafY9vXQiToU00jzD78=
130 |
131 | "@protobufjs/base64@^1.1.2":
132 | version "1.1.2"
133 | resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735"
134 | integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==
135 |
136 | "@protobufjs/codegen@^2.0.4":
137 | version "2.0.4"
138 | resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb"
139 | integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==
140 |
141 | "@protobufjs/eventemitter@^1.1.0":
142 | version "1.1.0"
143 | resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70"
144 | integrity sha1-NVy8mLr61ZePntCV85diHx0Ga3A=
145 |
146 | "@protobufjs/fetch@^1.1.0":
147 | version "1.1.0"
148 | resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45"
149 | integrity sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=
150 | dependencies:
151 | "@protobufjs/aspromise" "^1.1.1"
152 | "@protobufjs/inquire" "^1.1.0"
153 |
154 | "@protobufjs/float@^1.0.2":
155 | version "1.0.2"
156 | resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1"
157 | integrity sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=
158 |
159 | "@protobufjs/inquire@^1.1.0":
160 | version "1.1.0"
161 | resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089"
162 | integrity sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=
163 |
164 | "@protobufjs/path@^1.1.2":
165 | version "1.1.2"
166 | resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d"
167 | integrity sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=
168 |
169 | "@protobufjs/pool@^1.1.0":
170 | version "1.1.0"
171 | resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54"
172 | integrity sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=
173 |
174 | "@protobufjs/utf8@^1.1.0":
175 | version "1.1.0"
176 | resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570"
177 | integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=
178 |
179 | "@types/body-parser@*":
180 | version "1.17.1"
181 | resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.17.1.tgz#18fcf61768fb5c30ccc508c21d6fd2e8b3bf7897"
182 | integrity sha512-RoX2EZjMiFMjZh9lmYrwgoP9RTpAjSHiJxdp4oidAQVO02T7HER3xj9UKue5534ULWeqVEkujhWcyvUce+d68w==
183 | dependencies:
184 | "@types/connect" "*"
185 | "@types/node" "*"
186 |
187 | "@types/connect@*":
188 | version "3.4.32"
189 | resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.32.tgz#aa0e9616b9435ccad02bc52b5b454ffc2c70ba28"
190 | integrity sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==
191 | dependencies:
192 | "@types/node" "*"
193 |
194 | "@types/express-serve-static-core@*":
195 | version "4.16.9"
196 | resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.16.9.tgz#69e00643b0819b024bdede95ced3ff239bb54558"
197 | integrity sha512-GqpaVWR0DM8FnRUJYKlWgyARoBUAVfRIeVDZQKOttLFp5SmhhF9YFIYeTPwMd/AXfxlP7xVO2dj1fGu0Q+krKQ==
198 | dependencies:
199 | "@types/node" "*"
200 | "@types/range-parser" "*"
201 |
202 | "@types/express@^4.17.0":
203 | version "4.17.1"
204 | resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.1.tgz#4cf7849ae3b47125a567dfee18bfca4254b88c5c"
205 | integrity sha512-VfH/XCP0QbQk5B5puLqTLEeFgR8lfCJHZJKkInZ9mkYd+u8byX0kztXEQxEk4wZXJs8HI+7km2ALXjn4YKcX9w==
206 | dependencies:
207 | "@types/body-parser" "*"
208 | "@types/express-serve-static-core" "*"
209 | "@types/serve-static" "*"
210 |
211 | "@types/lodash@^4.14.104":
212 | version "4.14.138"
213 | resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.138.tgz#34f52640d7358230308344e579c15b378d91989e"
214 | integrity sha512-A4uJgHz4hakwNBdHNPdxOTkYmXNgmUAKLbXZ7PKGslgeV0Mb8P3BlbYfPovExek1qnod4pDfRbxuzcVs3dlFLg==
215 |
216 | "@types/long@^4.0.0":
217 | version "4.0.0"
218 | resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.0.tgz#719551d2352d301ac8b81db732acb6bdc28dbdef"
219 | integrity sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q==
220 |
221 | "@types/mime@*":
222 | version "2.0.1"
223 | resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.1.tgz#dc488842312a7f075149312905b5e3c0b054c79d"
224 | integrity sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==
225 |
226 | "@types/node@*":
227 | version "12.7.5"
228 | resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.5.tgz#e19436e7f8e9b4601005d73673b6dc4784ffcc2f"
229 | integrity sha512-9fq4jZVhPNW8r+UYKnxF1e2HkDWOWKM5bC2/7c9wPV835I0aOrVbS/Hw/pWPk2uKrNXQqg9Z959Kz+IYDd5p3w==
230 |
231 | "@types/node@^10.1.0":
232 | version "10.14.18"
233 | resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.18.tgz#b7d45fc950e6ffd7edc685e890d13aa7b8535dce"
234 | integrity sha512-ryO3Q3++yZC/+b8j8BdKd/dn9JlzlHBPdm80656xwYUdmPkpTGTjkAdt6BByiNupGPE8w0FhBgvYy/fX9hRNGQ==
235 |
236 | "@types/node@^8.0.53":
237 | version "8.10.54"
238 | resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.54.tgz#1c88eb253ac1210f1a5876953fb70f7cc4928402"
239 | integrity sha512-kaYyLYf6ICn6/isAyD4K1MyWWd5Q3JgH6bnMN089LUx88+s4W8GvK9Q6JMBVu5vsFFp7pMdSxdKmlBXwH/VFRg==
240 |
241 | "@types/range-parser@*":
242 | version "1.2.3"
243 | resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c"
244 | integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==
245 |
246 | "@types/serve-static@*":
247 | version "1.13.3"
248 | resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.3.tgz#eb7e1c41c4468272557e897e9171ded5e2ded9d1"
249 | integrity sha512-oprSwp094zOglVrXdlo/4bAHtKTAxX6VT8FOZlBKrmyLbNvE1zxZyJ6yikMVtHIvwP45+ZQGJn+FdXGKTozq0g==
250 | dependencies:
251 | "@types/express-serve-static-core" "*"
252 | "@types/mime" "*"
253 |
254 | abort-controller@^3.0.0:
255 | version "3.0.0"
256 | resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392"
257 | integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==
258 | dependencies:
259 | event-target-shim "^5.0.0"
260 |
261 | accepts@~1.3.7:
262 | version "1.3.7"
263 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
264 | integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==
265 | dependencies:
266 | mime-types "~2.1.24"
267 | negotiator "0.6.2"
268 |
269 | agent-base@4, agent-base@^4.3.0:
270 | version "4.3.0"
271 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee"
272 | integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==
273 | dependencies:
274 | es6-promisify "^5.0.0"
275 |
276 | array-flatten@1.1.1:
277 | version "1.1.1"
278 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
279 | integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
280 |
281 | arrify@^2.0.0:
282 | version "2.0.1"
283 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa"
284 | integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==
285 |
286 | base64-js@^1.3.0:
287 | version "1.3.1"
288 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"
289 | integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==
290 |
291 | basic-auth@~2.0.0:
292 | version "2.0.1"
293 | resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a"
294 | integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==
295 | dependencies:
296 | safe-buffer "5.1.2"
297 |
298 | bignumber.js@^7.0.0:
299 | version "7.2.1"
300 | resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-7.2.1.tgz#80c048759d826800807c4bfd521e50edbba57a5f"
301 | integrity sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==
302 |
303 | body-parser@1.19.0, body-parser@^1.19.0:
304 | version "1.19.0"
305 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a"
306 | integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==
307 | dependencies:
308 | bytes "3.1.0"
309 | content-type "~1.0.4"
310 | debug "2.6.9"
311 | depd "~1.1.2"
312 | http-errors "1.7.2"
313 | iconv-lite "0.4.24"
314 | on-finished "~2.3.0"
315 | qs "6.7.0"
316 | raw-body "2.4.0"
317 | type-is "~1.6.17"
318 |
319 | buffer-equal-constant-time@1.0.1:
320 | version "1.0.1"
321 | resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
322 | integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=
323 |
324 | buffer-from@^1.0.0:
325 | version "1.1.1"
326 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
327 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
328 |
329 | bun@^0.0.12:
330 | version "0.0.12"
331 | resolved "https://registry.yarnpkg.com/bun/-/bun-0.0.12.tgz#d54fae69f895557f275423bc14b404030b20a5fc"
332 | integrity sha512-Toms18J9DqnT+IfWkwxVTB2EaBprHvjlMWrTIsfX4xbu3ZBqVBwrERU0em1IgtRe04wT+wJxMlKHZok24hrcSQ==
333 | dependencies:
334 | readable-stream "~1.0.32"
335 |
336 | bytes@3.1.0:
337 | version "3.1.0"
338 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
339 | integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
340 |
341 | compressible@^2.0.12:
342 | version "2.0.17"
343 | resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.17.tgz#6e8c108a16ad58384a977f3a482ca20bff2f38c1"
344 | integrity sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==
345 | dependencies:
346 | mime-db ">= 1.40.0 < 2"
347 |
348 | concat-stream@^2.0.0:
349 | version "2.0.0"
350 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1"
351 | integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==
352 | dependencies:
353 | buffer-from "^1.0.0"
354 | inherits "^2.0.3"
355 | readable-stream "^3.0.2"
356 | typedarray "^0.0.6"
357 |
358 | configstore@^5.0.0:
359 | version "5.0.0"
360 | resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.0.tgz#37de662c7a49b5fe8dbcf8f6f5818d2d81ed852b"
361 | integrity sha512-eE/hvMs7qw7DlcB5JPRnthmrITuHMmACUJAp89v6PT6iOqzoLS7HRWhBtuHMlhNHo2AhUSA/3Dh1bKNJHcublQ==
362 | dependencies:
363 | dot-prop "^5.1.0"
364 | graceful-fs "^4.1.2"
365 | make-dir "^3.0.0"
366 | unique-string "^2.0.0"
367 | write-file-atomic "^3.0.0"
368 | xdg-basedir "^4.0.0"
369 |
370 | content-disposition@0.5.3:
371 | version "0.5.3"
372 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd"
373 | integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==
374 | dependencies:
375 | safe-buffer "5.1.2"
376 |
377 | content-type@~1.0.4:
378 | version "1.0.4"
379 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
380 | integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
381 |
382 | cookie-signature@1.0.6:
383 | version "1.0.6"
384 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
385 | integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw=
386 |
387 | cookie@0.4.0:
388 | version "0.4.0"
389 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba"
390 | integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==
391 |
392 | core-util-is@~1.0.0:
393 | version "1.0.2"
394 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
395 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
396 |
397 | cors@^2.8.5:
398 | version "2.8.5"
399 | resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29"
400 | integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==
401 | dependencies:
402 | object-assign "^4"
403 | vary "^1"
404 |
405 | crypto-random-string@^2.0.0:
406 | version "2.0.0"
407 | resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5"
408 | integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==
409 |
410 | date-and-time@^0.9.0:
411 | version "0.9.0"
412 | resolved "https://registry.yarnpkg.com/date-and-time/-/date-and-time-0.9.0.tgz#1524579e56dc07675c640b41735a7665c0659240"
413 | integrity sha512-4JybB6PbR+EebpFx/KyR5Ybl+TcdXMLIJkyYsCx3P4M4CWGMuDyFF19yh6TyasMAIF5lrsgIxiSHBXh2FFc7Fg==
414 |
415 | debug@2.6.9:
416 | version "2.6.9"
417 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
418 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
419 | dependencies:
420 | ms "2.0.0"
421 |
422 | debug@3.1.0:
423 | version "3.1.0"
424 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
425 | integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
426 | dependencies:
427 | ms "2.0.0"
428 |
429 | debug@^3.1.0:
430 | version "3.2.6"
431 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
432 | integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
433 | dependencies:
434 | ms "^2.1.1"
435 |
436 | debug@^4.1.1:
437 | version "4.1.1"
438 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
439 | integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
440 | dependencies:
441 | ms "^2.1.1"
442 |
443 | deep-equal@^1.0.1:
444 | version "1.1.0"
445 | resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.0.tgz#3103cdf8ab6d32cf4a8df7865458f2b8d33f3745"
446 | integrity sha512-ZbfWJq/wN1Z273o7mUSjILYqehAktR2NVoSrOukDkU9kg2v/Uv89yU4Cvz8seJeAmtN5oqiefKq8FPuXOboqLw==
447 | dependencies:
448 | is-arguments "^1.0.4"
449 | is-date-object "^1.0.1"
450 | is-regex "^1.0.4"
451 | object-is "^1.0.1"
452 | object-keys "^1.1.1"
453 | regexp.prototype.flags "^1.2.0"
454 |
455 | define-properties@^1.1.2:
456 | version "1.1.3"
457 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
458 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
459 | dependencies:
460 | object-keys "^1.0.12"
461 |
462 | depd@~1.1.2:
463 | version "1.1.2"
464 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
465 | integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
466 |
467 | destroy@~1.0.4:
468 | version "1.0.4"
469 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
470 | integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
471 |
472 | dicer@^0.3.0:
473 | version "0.3.0"
474 | resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.3.0.tgz#eacd98b3bfbf92e8ab5c2fdb71aaac44bb06b872"
475 | integrity sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==
476 | dependencies:
477 | streamsearch "0.1.2"
478 |
479 | dot-prop@^5.1.0:
480 | version "5.2.0"
481 | resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb"
482 | integrity sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==
483 | dependencies:
484 | is-obj "^2.0.0"
485 |
486 | duplexify@^3.5.0, duplexify@^3.6.0:
487 | version "3.7.1"
488 | resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"
489 | integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==
490 | dependencies:
491 | end-of-stream "^1.0.0"
492 | inherits "^2.0.1"
493 | readable-stream "^2.0.0"
494 | stream-shift "^1.0.0"
495 |
496 | duplexify@^4.1.1:
497 | version "4.1.1"
498 | resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.1.tgz#7027dc374f157b122a8ae08c2d3ea4d2d953aa61"
499 | integrity sha512-DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA==
500 | dependencies:
501 | end-of-stream "^1.4.1"
502 | inherits "^2.0.3"
503 | readable-stream "^3.1.1"
504 | stream-shift "^1.0.0"
505 |
506 | ecdsa-sig-formatter@1.0.11:
507 | version "1.0.11"
508 | resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf"
509 | integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==
510 | dependencies:
511 | safe-buffer "^5.0.1"
512 |
513 | ee-first@1.1.1:
514 | version "1.1.1"
515 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
516 | integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
517 |
518 | encodeurl@~1.0.2:
519 | version "1.0.2"
520 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
521 | integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
522 |
523 | end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1:
524 | version "1.4.1"
525 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
526 | integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==
527 | dependencies:
528 | once "^1.4.0"
529 |
530 | ent@^2.2.0:
531 | version "2.2.0"
532 | resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d"
533 | integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0=
534 |
535 | es6-promise@^4.0.3:
536 | version "4.2.8"
537 | resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a"
538 | integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==
539 |
540 | es6-promisify@^5.0.0:
541 | version "5.0.0"
542 | resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203"
543 | integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=
544 | dependencies:
545 | es6-promise "^4.0.3"
546 |
547 | escape-html@~1.0.3:
548 | version "1.0.3"
549 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
550 | integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
551 |
552 | etag@~1.8.1:
553 | version "1.8.1"
554 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
555 | integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
556 |
557 | event-target-shim@^5.0.0:
558 | version "5.0.1"
559 | resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789"
560 | integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==
561 |
562 | express@^4.17.1:
563 | version "4.17.1"
564 | resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134"
565 | integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==
566 | dependencies:
567 | accepts "~1.3.7"
568 | array-flatten "1.1.1"
569 | body-parser "1.19.0"
570 | content-disposition "0.5.3"
571 | content-type "~1.0.4"
572 | cookie "0.4.0"
573 | cookie-signature "1.0.6"
574 | debug "2.6.9"
575 | depd "~1.1.2"
576 | encodeurl "~1.0.2"
577 | escape-html "~1.0.3"
578 | etag "~1.8.1"
579 | finalhandler "~1.1.2"
580 | fresh "0.5.2"
581 | merge-descriptors "1.0.1"
582 | methods "~1.1.2"
583 | on-finished "~2.3.0"
584 | parseurl "~1.3.3"
585 | path-to-regexp "0.1.7"
586 | proxy-addr "~2.0.5"
587 | qs "6.7.0"
588 | range-parser "~1.2.1"
589 | safe-buffer "5.1.2"
590 | send "0.17.1"
591 | serve-static "1.14.1"
592 | setprototypeof "1.1.1"
593 | statuses "~1.5.0"
594 | type-is "~1.6.18"
595 | utils-merge "1.0.1"
596 | vary "~1.1.2"
597 |
598 | extend@^3.0.2:
599 | version "3.0.2"
600 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
601 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
602 |
603 | fast-text-encoding@^1.0.0:
604 | version "1.0.0"
605 | resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.0.tgz#3e5ce8293409cfaa7177a71b9ca84e1b1e6f25ef"
606 | integrity sha512-R9bHCvweUxxwkDwhjav5vxpFvdPGlVngtqmx4pIZfSUhM/Q4NiIUHB456BAf+Q1Nwu3HEZYONtu+Rya+af4jiQ==
607 |
608 | faye-websocket@0.11.3:
609 | version "0.11.3"
610 | resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e"
611 | integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==
612 | dependencies:
613 | websocket-driver ">=0.5.1"
614 |
615 | finalhandler@~1.1.2:
616 | version "1.1.2"
617 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
618 | integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==
619 | dependencies:
620 | debug "2.6.9"
621 | encodeurl "~1.0.2"
622 | escape-html "~1.0.3"
623 | on-finished "~2.3.0"
624 | parseurl "~1.3.3"
625 | statuses "~1.5.0"
626 | unpipe "~1.0.0"
627 |
628 | firebase-admin@^8.0.0:
629 | version "8.5.0"
630 | resolved "https://registry.yarnpkg.com/firebase-admin/-/firebase-admin-8.5.0.tgz#99d1a007edb1689c3012eca64968c93846d5e292"
631 | integrity sha512-rvgCj5Z1iFOT6K6uW37VRl4PKNpAcBFu/FIQ4Nl5bFnqbHSxf+QxzsqdsUtIxdqZU1yh2DTs2t+s5qORx/T9+g==
632 | dependencies:
633 | "@firebase/database" "^0.5.1"
634 | "@types/node" "^8.0.53"
635 | dicer "^0.3.0"
636 | jsonwebtoken "8.1.0"
637 | node-forge "0.7.4"
638 | optionalDependencies:
639 | "@google-cloud/firestore" "^2.0.0"
640 | "@google-cloud/storage" "^3.0.2"
641 |
642 | firebase-functions-test@^0.1.6:
643 | version "0.1.6"
644 | resolved "https://registry.yarnpkg.com/firebase-functions-test/-/firebase-functions-test-0.1.6.tgz#4c880e927c87fad32d5c6377e17b2cab9eda10bf"
645 | integrity sha512-sITLbQunI75gL690qFOq4mqxUEcdETEbY4HcLFawWVJC3PmlSFt81mhfZjJe45GJTt1+7xeowaHQx3jpnoPNpA==
646 | dependencies:
647 | "@types/lodash" "^4.14.104"
648 | lodash "^4.17.5"
649 |
650 | firebase-functions@^3.1.0:
651 | version "3.2.0"
652 | resolved "https://registry.yarnpkg.com/firebase-functions/-/firebase-functions-3.2.0.tgz#c4c01ea2f97aafb7aa45776eaff52a0f7f44678e"
653 | integrity sha512-v61CXYFSb53SdSSqwc/QhdBrR+H0bhwxSOIhKIYFFa2m5APUsuj8SrkAOBL2CfOJo3yk7+nuuWOtz16JFaXLxg==
654 | dependencies:
655 | "@types/express" "^4.17.0"
656 | cors "^2.8.5"
657 | express "^4.17.1"
658 | jsonwebtoken "^8.5.1"
659 | lodash "^4.17.14"
660 |
661 | forwarded@~0.1.2:
662 | version "0.1.2"
663 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
664 | integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=
665 |
666 | fresh@0.5.2:
667 | version "0.5.2"
668 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
669 | integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
670 |
671 | function-bind@^1.1.1:
672 | version "1.1.1"
673 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
674 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
675 |
676 | functional-red-black-tree@^1.0.1:
677 | version "1.0.1"
678 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
679 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
680 |
681 | gaxios@^2.0.0, gaxios@^2.0.1:
682 | version "2.0.1"
683 | resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-2.0.1.tgz#2ca1c9eb64c525d852048721316c138dddf40708"
684 | integrity sha512-c1NXovTxkgRJTIgB2FrFmOFg4YIV6N/bAa4f/FZ4jIw13Ql9ya/82x69CswvotJhbV3DiGnlTZwoq2NVXk2Irg==
685 | dependencies:
686 | abort-controller "^3.0.0"
687 | extend "^3.0.2"
688 | https-proxy-agent "^2.2.1"
689 | node-fetch "^2.3.0"
690 |
691 | gcp-metadata@^2.0.0:
692 | version "2.0.2"
693 | resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-2.0.2.tgz#6b391c531cdd0c1d1ebde35050fdaaf5462aa544"
694 | integrity sha512-dxPXBvjyfz5qFEBXzEwNmuZXwsGYfuASGYeg3CKZDaQRXdiWti9J3/Ezmtyon1OrCNpDO2YekyoSjEqMtsrcXw==
695 | dependencies:
696 | gaxios "^2.0.1"
697 | json-bigint "^0.3.0"
698 |
699 | gcs-resumable-upload@^2.0.0:
700 | version "2.2.5"
701 | resolved "https://registry.yarnpkg.com/gcs-resumable-upload/-/gcs-resumable-upload-2.2.5.tgz#13e832130eb8c12be6d80f4bdc6fc0c410f73ad1"
702 | integrity sha512-r98Hnxza8oYT21MzpziAB2thz3AURGz54+osWtczxGNxH7Fodb0HVUEtfqTwBS5vcf9RnKwR7c0EMaI8R39feg==
703 | dependencies:
704 | abort-controller "^3.0.0"
705 | configstore "^5.0.0"
706 | gaxios "^2.0.0"
707 | google-auth-library "^5.0.0"
708 | pumpify "^2.0.0"
709 | stream-events "^1.0.4"
710 |
711 | google-auth-library@^5.0.0:
712 | version "5.2.1"
713 | resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-5.2.1.tgz#3df7cb4186a24355184551837b24012cb1b31013"
714 | integrity sha512-p9vO6UcRIK/zD3PxoMijaUfFYu6tvzaQwvag1K/82O42NBeAnmllyQUgqaBhcAh9FzFAVlN4bQIaO8+prpE7Vg==
715 | dependencies:
716 | arrify "^2.0.0"
717 | base64-js "^1.3.0"
718 | fast-text-encoding "^1.0.0"
719 | gaxios "^2.0.0"
720 | gcp-metadata "^2.0.0"
721 | gtoken "^4.0.0"
722 | jws "^3.1.5"
723 | lru-cache "^5.0.0"
724 |
725 | google-gax@^1.1.2:
726 | version "1.5.2"
727 | resolved "https://registry.yarnpkg.com/google-gax/-/google-gax-1.5.2.tgz#996cf70778667cc22befbeae4b8a9d76fce0fabb"
728 | integrity sha512-NceyDzlw4mQz6qH3bDIuRtfDAZKehM96QpnPPJ3Hur7FA/gPzpzboUYwhfP6q5obSP4LuSSDhI/76Fu51/ljtg==
729 | dependencies:
730 | "@grpc/grpc-js" "^0.5.2"
731 | "@grpc/proto-loader" "^0.5.1"
732 | abort-controller "^3.0.0"
733 | duplexify "^3.6.0"
734 | google-auth-library "^5.0.0"
735 | is-stream-ended "^0.1.4"
736 | lodash.at "^4.6.0"
737 | lodash.has "^4.5.2"
738 | node-fetch "^2.6.0"
739 | protobufjs "^6.8.8"
740 | retry-request "^4.0.0"
741 | semver "^6.0.0"
742 | walkdir "^0.4.0"
743 |
744 | google-p12-pem@^2.0.0:
745 | version "2.0.2"
746 | resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-2.0.2.tgz#39cae8f6fcbe66a01f00be4ddf2d56b95926fa7b"
747 | integrity sha512-UfnEARfJKI6pbmC1hfFFm+UAcZxeIwTiEcHfqKe/drMsXD/ilnVjF7zgOGpHXyhuvX6jNJK3S8A0hOQjwtFxEw==
748 | dependencies:
749 | node-forge "^0.9.0"
750 |
751 | graceful-fs@^4.1.2:
752 | version "4.2.2"
753 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02"
754 | integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==
755 |
756 | gtoken@^4.0.0:
757 | version "4.0.0"
758 | resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-4.0.0.tgz#42b63a935a03a61eedf0ec14f74f6875bad627bd"
759 | integrity sha512-XaRCfHJxhj06LmnWNBzVTAr85NfAErq0W1oabkdqwbq3uL/QTB1kyvGog361Uu2FMG/8e3115sIy/97Rnd4GjQ==
760 | dependencies:
761 | gaxios "^2.0.0"
762 | google-p12-pem "^2.0.0"
763 | jws "^3.1.5"
764 | mime "^2.2.0"
765 |
766 | has@^1.0.1:
767 | version "1.0.3"
768 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
769 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
770 | dependencies:
771 | function-bind "^1.1.1"
772 |
773 | hash-stream-validation@^0.2.1:
774 | version "0.2.1"
775 | resolved "https://registry.yarnpkg.com/hash-stream-validation/-/hash-stream-validation-0.2.1.tgz#ecc9b997b218be5bb31298628bb807869b73dcd1"
776 | integrity sha1-7Mm5l7IYvluzEphii7gHhptz3NE=
777 | dependencies:
778 | through2 "^2.0.0"
779 |
780 | http-errors@1.7.2:
781 | version "1.7.2"
782 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f"
783 | integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==
784 | dependencies:
785 | depd "~1.1.2"
786 | inherits "2.0.3"
787 | setprototypeof "1.1.1"
788 | statuses ">= 1.5.0 < 2"
789 | toidentifier "1.0.0"
790 |
791 | http-errors@~1.7.2:
792 | version "1.7.3"
793 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06"
794 | integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==
795 | dependencies:
796 | depd "~1.1.2"
797 | inherits "2.0.4"
798 | setprototypeof "1.1.1"
799 | statuses ">= 1.5.0 < 2"
800 | toidentifier "1.0.0"
801 |
802 | "http-parser-js@>=0.4.0 <0.4.11":
803 | version "0.4.10"
804 | resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4"
805 | integrity sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=
806 |
807 | http-proxy-agent@^2.1.0:
808 | version "2.1.0"
809 | resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405"
810 | integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==
811 | dependencies:
812 | agent-base "4"
813 | debug "3.1.0"
814 |
815 | https-proxy-agent@^2.2.1:
816 | version "2.2.4"
817 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b"
818 | integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==
819 | dependencies:
820 | agent-base "^4.3.0"
821 | debug "^3.1.0"
822 |
823 | iconv-lite@0.4.24:
824 | version "0.4.24"
825 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
826 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
827 | dependencies:
828 | safer-buffer ">= 2.1.2 < 3"
829 |
830 | imurmurhash@^0.1.4:
831 | version "0.1.4"
832 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
833 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
834 |
835 | inherits@2.0.3:
836 | version "2.0.3"
837 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
838 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
839 |
840 | inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
841 | version "2.0.4"
842 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
843 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
844 |
845 | ipaddr.js@1.9.0:
846 | version "1.9.0"
847 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65"
848 | integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==
849 |
850 | is-arguments@^1.0.4:
851 | version "1.0.4"
852 | resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3"
853 | integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==
854 |
855 | is-date-object@^1.0.1:
856 | version "1.0.1"
857 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
858 | integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=
859 |
860 | is-obj@^2.0.0:
861 | version "2.0.0"
862 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982"
863 | integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==
864 |
865 | is-regex@^1.0.4:
866 | version "1.0.4"
867 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
868 | integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=
869 | dependencies:
870 | has "^1.0.1"
871 |
872 | is-stream-ended@^0.1.4:
873 | version "0.1.4"
874 | resolved "https://registry.yarnpkg.com/is-stream-ended/-/is-stream-ended-0.1.4.tgz#f50224e95e06bce0e356d440a4827cd35b267eda"
875 | integrity sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==
876 |
877 | is-typedarray@^1.0.0:
878 | version "1.0.0"
879 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
880 | integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
881 |
882 | isarray@0.0.1:
883 | version "0.0.1"
884 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
885 | integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
886 |
887 | isarray@~1.0.0:
888 | version "1.0.0"
889 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
890 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
891 |
892 | json-bigint@^0.3.0:
893 | version "0.3.0"
894 | resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-0.3.0.tgz#0ccd912c4b8270d05f056fbd13814b53d3825b1e"
895 | integrity sha1-DM2RLEuCcNBfBW+9E4FLU9OCWx4=
896 | dependencies:
897 | bignumber.js "^7.0.0"
898 |
899 | jsonwebtoken@8.1.0:
900 | version "8.1.0"
901 | resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.1.0.tgz#c6397cd2e5fd583d65c007a83dc7bb78e6982b83"
902 | integrity sha1-xjl80uX9WD1lwAeoPce7eOaYK4M=
903 | dependencies:
904 | jws "^3.1.4"
905 | lodash.includes "^4.3.0"
906 | lodash.isboolean "^3.0.3"
907 | lodash.isinteger "^4.0.4"
908 | lodash.isnumber "^3.0.3"
909 | lodash.isplainobject "^4.0.6"
910 | lodash.isstring "^4.0.1"
911 | lodash.once "^4.0.0"
912 | ms "^2.0.0"
913 | xtend "^4.0.1"
914 |
915 | jsonwebtoken@^8.5.1:
916 | version "8.5.1"
917 | resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d"
918 | integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==
919 | dependencies:
920 | jws "^3.2.2"
921 | lodash.includes "^4.3.0"
922 | lodash.isboolean "^3.0.3"
923 | lodash.isinteger "^4.0.4"
924 | lodash.isnumber "^3.0.3"
925 | lodash.isplainobject "^4.0.6"
926 | lodash.isstring "^4.0.1"
927 | lodash.once "^4.0.0"
928 | ms "^2.1.1"
929 | semver "^5.6.0"
930 |
931 | jwa@^1.4.1:
932 | version "1.4.1"
933 | resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a"
934 | integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==
935 | dependencies:
936 | buffer-equal-constant-time "1.0.1"
937 | ecdsa-sig-formatter "1.0.11"
938 | safe-buffer "^5.0.1"
939 |
940 | jws@^3.1.4, jws@^3.1.5, jws@^3.2.2:
941 | version "3.2.2"
942 | resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304"
943 | integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==
944 | dependencies:
945 | jwa "^1.4.1"
946 | safe-buffer "^5.0.1"
947 |
948 | lodash.at@^4.6.0:
949 | version "4.6.0"
950 | resolved "https://registry.yarnpkg.com/lodash.at/-/lodash.at-4.6.0.tgz#93cdce664f0a1994ea33dd7cd40e23afd11b0ff8"
951 | integrity sha1-k83OZk8KGZTqM9181A4jr9EbD/g=
952 |
953 | lodash.camelcase@^4.3.0:
954 | version "4.3.0"
955 | resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
956 | integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY=
957 |
958 | lodash.has@^4.5.2:
959 | version "4.5.2"
960 | resolved "https://registry.yarnpkg.com/lodash.has/-/lodash.has-4.5.2.tgz#d19f4dc1095058cccbe2b0cdf4ee0fe4aa37c862"
961 | integrity sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI=
962 |
963 | lodash.includes@^4.3.0:
964 | version "4.3.0"
965 | resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f"
966 | integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=
967 |
968 | lodash.isboolean@^3.0.3:
969 | version "3.0.3"
970 | resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6"
971 | integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=
972 |
973 | lodash.isinteger@^4.0.4:
974 | version "4.0.4"
975 | resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343"
976 | integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=
977 |
978 | lodash.isnumber@^3.0.3:
979 | version "3.0.3"
980 | resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc"
981 | integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=
982 |
983 | lodash.isplainobject@^4.0.6:
984 | version "4.0.6"
985 | resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
986 | integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=
987 |
988 | lodash.isstring@^4.0.1:
989 | version "4.0.1"
990 | resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451"
991 | integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=
992 |
993 | lodash.once@^4.0.0:
994 | version "4.1.1"
995 | resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac"
996 | integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=
997 |
998 | lodash@^4.17.14, lodash@^4.17.5:
999 | version "4.17.15"
1000 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
1001 | integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
1002 |
1003 | long@^4.0.0:
1004 | version "4.0.0"
1005 | resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28"
1006 | integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==
1007 |
1008 | lru-cache@^5.0.0:
1009 | version "5.1.1"
1010 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
1011 | integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
1012 | dependencies:
1013 | yallist "^3.0.2"
1014 |
1015 | make-dir@^3.0.0:
1016 | version "3.0.0"
1017 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.0.tgz#1b5f39f6b9270ed33f9f054c5c0f84304989f801"
1018 | integrity sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==
1019 | dependencies:
1020 | semver "^6.0.0"
1021 |
1022 | media-typer@0.3.0:
1023 | version "0.3.0"
1024 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
1025 | integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
1026 |
1027 | merge-descriptors@1.0.1:
1028 | version "1.0.1"
1029 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
1030 | integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
1031 |
1032 | methods@~1.1.2:
1033 | version "1.1.2"
1034 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
1035 | integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
1036 |
1037 | mime-db@1.40.0:
1038 | version "1.40.0"
1039 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32"
1040 | integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==
1041 |
1042 | "mime-db@>= 1.40.0 < 2":
1043 | version "1.41.0"
1044 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.41.0.tgz#9110408e1f6aa1b34aef51f2c9df3caddf46b6a0"
1045 | integrity sha512-B5gxBI+2K431XW8C2rcc/lhppbuji67nf9v39eH8pkWoZDxnAL0PxdpH32KYRScniF8qDHBDlI+ipgg5WrCUYw==
1046 |
1047 | mime-types@^2.0.8, mime-types@~2.1.24:
1048 | version "2.1.24"
1049 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81"
1050 | integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==
1051 | dependencies:
1052 | mime-db "1.40.0"
1053 |
1054 | mime@1.6.0:
1055 | version "1.6.0"
1056 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
1057 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
1058 |
1059 | mime@^2.2.0:
1060 | version "2.4.4"
1061 | resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5"
1062 | integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==
1063 |
1064 | mimic-fn@^2.1.0:
1065 | version "2.1.0"
1066 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
1067 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
1068 |
1069 | moment@^2.24.0:
1070 | version "2.24.0"
1071 | resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b"
1072 | integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==
1073 |
1074 | morgan@^1.9.1:
1075 | version "1.9.1"
1076 | resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.1.tgz#0a8d16734a1d9afbc824b99df87e738e58e2da59"
1077 | integrity sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==
1078 | dependencies:
1079 | basic-auth "~2.0.0"
1080 | debug "2.6.9"
1081 | depd "~1.1.2"
1082 | on-finished "~2.3.0"
1083 | on-headers "~1.0.1"
1084 |
1085 | ms@2.0.0:
1086 | version "2.0.0"
1087 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
1088 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
1089 |
1090 | ms@2.1.1:
1091 | version "2.1.1"
1092 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
1093 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
1094 |
1095 | ms@^2.0.0, ms@^2.1.1:
1096 | version "2.1.2"
1097 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
1098 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
1099 |
1100 | negotiator@0.6.2:
1101 | version "0.6.2"
1102 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
1103 | integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
1104 |
1105 | node-fetch@^2.2.0, node-fetch@^2.3.0, node-fetch@^2.6.0:
1106 | version "2.6.0"
1107 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd"
1108 | integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==
1109 |
1110 | node-forge@0.7.4:
1111 | version "0.7.4"
1112 | resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.4.tgz#8e6e9f563a1e32213aa7508cded22aa791dbf986"
1113 | integrity sha512-8Df0906+tq/omxuCZD6PqhPaQDYuyJ1d+VITgxoIA8zvQd1ru+nMJcDChHH324MWitIgbVkAkQoGEEVJNpn/PA==
1114 |
1115 | node-forge@^0.9.0:
1116 | version "0.9.0"
1117 | resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579"
1118 | integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==
1119 |
1120 | object-assign@^4:
1121 | version "4.1.1"
1122 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
1123 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
1124 |
1125 | object-is@^1.0.1:
1126 | version "1.0.1"
1127 | resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6"
1128 | integrity sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=
1129 |
1130 | object-keys@^1.0.12, object-keys@^1.1.1:
1131 | version "1.1.1"
1132 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
1133 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
1134 |
1135 | on-finished@~2.3.0:
1136 | version "2.3.0"
1137 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
1138 | integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
1139 | dependencies:
1140 | ee-first "1.1.1"
1141 |
1142 | on-headers@~1.0.1:
1143 | version "1.0.2"
1144 | resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f"
1145 | integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==
1146 |
1147 | once@^1.3.1, once@^1.4.0:
1148 | version "1.4.0"
1149 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1150 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
1151 | dependencies:
1152 | wrappy "1"
1153 |
1154 | onetime@^5.1.0:
1155 | version "5.1.0"
1156 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5"
1157 | integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==
1158 | dependencies:
1159 | mimic-fn "^2.1.0"
1160 |
1161 | p-limit@^2.2.0:
1162 | version "2.2.1"
1163 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537"
1164 | integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==
1165 | dependencies:
1166 | p-try "^2.0.0"
1167 |
1168 | p-try@^2.0.0:
1169 | version "2.2.0"
1170 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
1171 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
1172 |
1173 | parseurl@~1.3.3:
1174 | version "1.3.3"
1175 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
1176 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
1177 |
1178 | path-to-regexp@0.1.7:
1179 | version "0.1.7"
1180 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
1181 | integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
1182 |
1183 | process-nextick-args@~2.0.0:
1184 | version "2.0.1"
1185 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
1186 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
1187 |
1188 | protobufjs@^6.8.6, protobufjs@^6.8.8:
1189 | version "6.8.8"
1190 | resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.8.8.tgz#c8b4f1282fd7a90e6f5b109ed11c84af82908e7c"
1191 | integrity sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==
1192 | dependencies:
1193 | "@protobufjs/aspromise" "^1.1.2"
1194 | "@protobufjs/base64" "^1.1.2"
1195 | "@protobufjs/codegen" "^2.0.4"
1196 | "@protobufjs/eventemitter" "^1.1.0"
1197 | "@protobufjs/fetch" "^1.1.0"
1198 | "@protobufjs/float" "^1.0.2"
1199 | "@protobufjs/inquire" "^1.1.0"
1200 | "@protobufjs/path" "^1.1.2"
1201 | "@protobufjs/pool" "^1.1.0"
1202 | "@protobufjs/utf8" "^1.1.0"
1203 | "@types/long" "^4.0.0"
1204 | "@types/node" "^10.1.0"
1205 | long "^4.0.0"
1206 |
1207 | proxy-addr@~2.0.5:
1208 | version "2.0.5"
1209 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34"
1210 | integrity sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==
1211 | dependencies:
1212 | forwarded "~0.1.2"
1213 | ipaddr.js "1.9.0"
1214 |
1215 | pump@^3.0.0:
1216 | version "3.0.0"
1217 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
1218 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
1219 | dependencies:
1220 | end-of-stream "^1.1.0"
1221 | once "^1.3.1"
1222 |
1223 | pumpify@^2.0.0:
1224 | version "2.0.0"
1225 | resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-2.0.0.tgz#975519e5a9890ae0fb4724274e3fec97e43a30b6"
1226 | integrity sha512-ieN9HmpFPt4J4U4qnjN4BxrnqpPPXJyp3qFErxfwBtFOec6ewpIHdS2eu3TkmGW6S+RzFGEOGpm5ih/X/onRPQ==
1227 | dependencies:
1228 | duplexify "^4.1.1"
1229 | inherits "^2.0.3"
1230 | pump "^3.0.0"
1231 |
1232 | qs@6.7.0:
1233 | version "6.7.0"
1234 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
1235 | integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==
1236 |
1237 | range-parser@~1.2.1:
1238 | version "1.2.1"
1239 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
1240 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
1241 |
1242 | raw-body@2.4.0:
1243 | version "2.4.0"
1244 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332"
1245 | integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==
1246 | dependencies:
1247 | bytes "3.1.0"
1248 | http-errors "1.7.2"
1249 | iconv-lite "0.4.24"
1250 | unpipe "1.0.0"
1251 |
1252 | "readable-stream@2 || 3", readable-stream@^3.0.2, readable-stream@^3.1.1:
1253 | version "3.4.0"
1254 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc"
1255 | integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==
1256 | dependencies:
1257 | inherits "^2.0.3"
1258 | string_decoder "^1.1.1"
1259 | util-deprecate "^1.0.1"
1260 |
1261 | readable-stream@^2.0.0, readable-stream@~2.3.6:
1262 | version "2.3.6"
1263 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
1264 | integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
1265 | dependencies:
1266 | core-util-is "~1.0.0"
1267 | inherits "~2.0.3"
1268 | isarray "~1.0.0"
1269 | process-nextick-args "~2.0.0"
1270 | safe-buffer "~5.1.1"
1271 | string_decoder "~1.1.1"
1272 | util-deprecate "~1.0.1"
1273 |
1274 | readable-stream@~1.0.32:
1275 | version "1.0.34"
1276 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
1277 | integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=
1278 | dependencies:
1279 | core-util-is "~1.0.0"
1280 | inherits "~2.0.1"
1281 | isarray "0.0.1"
1282 | string_decoder "~0.10.x"
1283 |
1284 | regexp.prototype.flags@^1.2.0:
1285 | version "1.2.0"
1286 | resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz#6b30724e306a27833eeb171b66ac8890ba37e41c"
1287 | integrity sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA==
1288 | dependencies:
1289 | define-properties "^1.1.2"
1290 |
1291 | retry-request@^4.0.0:
1292 | version "4.1.1"
1293 | resolved "https://registry.yarnpkg.com/retry-request/-/retry-request-4.1.1.tgz#f676d0db0de7a6f122c048626ce7ce12101d2bd8"
1294 | integrity sha512-BINDzVtLI2BDukjWmjAIRZ0oglnCAkpP2vQjM3jdLhmT62h0xnQgciPwBRDAvHqpkPT2Wo1XuUyLyn6nbGrZQQ==
1295 | dependencies:
1296 | debug "^4.1.1"
1297 | through2 "^3.0.1"
1298 |
1299 | safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
1300 | version "5.1.2"
1301 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
1302 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
1303 |
1304 | safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@~5.2.0:
1305 | version "5.2.0"
1306 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
1307 | integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==
1308 |
1309 | "safer-buffer@>= 2.1.2 < 3":
1310 | version "2.1.2"
1311 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
1312 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
1313 |
1314 | semver@^5.6.0:
1315 | version "5.7.1"
1316 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
1317 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
1318 |
1319 | semver@^6.0.0, semver@^6.2.0:
1320 | version "6.3.0"
1321 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
1322 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
1323 |
1324 | send@0.17.1:
1325 | version "0.17.1"
1326 | resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8"
1327 | integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==
1328 | dependencies:
1329 | debug "2.6.9"
1330 | depd "~1.1.2"
1331 | destroy "~1.0.4"
1332 | encodeurl "~1.0.2"
1333 | escape-html "~1.0.3"
1334 | etag "~1.8.1"
1335 | fresh "0.5.2"
1336 | http-errors "~1.7.2"
1337 | mime "1.6.0"
1338 | ms "2.1.1"
1339 | on-finished "~2.3.0"
1340 | range-parser "~1.2.1"
1341 | statuses "~1.5.0"
1342 |
1343 | serve-static@1.14.1:
1344 | version "1.14.1"
1345 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9"
1346 | integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==
1347 | dependencies:
1348 | encodeurl "~1.0.2"
1349 | escape-html "~1.0.3"
1350 | parseurl "~1.3.3"
1351 | send "0.17.1"
1352 |
1353 | setprototypeof@1.1.1:
1354 | version "1.1.1"
1355 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
1356 | integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
1357 |
1358 | signal-exit@^3.0.2:
1359 | version "3.0.2"
1360 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
1361 | integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
1362 |
1363 | snakeize@^0.1.0:
1364 | version "0.1.0"
1365 | resolved "https://registry.yarnpkg.com/snakeize/-/snakeize-0.1.0.tgz#10c088d8b58eb076b3229bb5a04e232ce126422d"
1366 | integrity sha1-EMCI2LWOsHazIpu1oE4jLOEmQi0=
1367 |
1368 | "statuses@>= 1.5.0 < 2", statuses@~1.5.0:
1369 | version "1.5.0"
1370 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
1371 | integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
1372 |
1373 | stream-events@^1.0.1, stream-events@^1.0.4, stream-events@^1.0.5:
1374 | version "1.0.5"
1375 | resolved "https://registry.yarnpkg.com/stream-events/-/stream-events-1.0.5.tgz#bbc898ec4df33a4902d892333d47da9bf1c406d5"
1376 | integrity sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==
1377 | dependencies:
1378 | stubs "^3.0.0"
1379 |
1380 | stream-shift@^1.0.0:
1381 | version "1.0.0"
1382 | resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952"
1383 | integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=
1384 |
1385 | streamsearch@0.1.2:
1386 | version "0.1.2"
1387 | resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a"
1388 | integrity sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=
1389 |
1390 | string_decoder@^1.1.1:
1391 | version "1.3.0"
1392 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
1393 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
1394 | dependencies:
1395 | safe-buffer "~5.2.0"
1396 |
1397 | string_decoder@~0.10.x:
1398 | version "0.10.31"
1399 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
1400 | integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
1401 |
1402 | string_decoder@~1.1.1:
1403 | version "1.1.1"
1404 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
1405 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
1406 | dependencies:
1407 | safe-buffer "~5.1.0"
1408 |
1409 | stubs@^3.0.0:
1410 | version "3.0.0"
1411 | resolved "https://registry.yarnpkg.com/stubs/-/stubs-3.0.0.tgz#e8d2ba1fa9c90570303c030b6900f7d5f89abe5b"
1412 | integrity sha1-6NK6H6nJBXAwPAMLaQD31fiavls=
1413 |
1414 | teeny-request@^5.2.1:
1415 | version "5.2.1"
1416 | resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-5.2.1.tgz#a6394db8359b87e64e47eeb2fbf34a65c9a751ff"
1417 | integrity sha512-gCVm5EV3z0p/yZOKyeBOFOpSXuxdIs3foeWDWb/foKMBejK18w40L0k0UMd/ZrGkOH+gxodjqpL8KK6x3haYCQ==
1418 | dependencies:
1419 | http-proxy-agent "^2.1.0"
1420 | https-proxy-agent "^2.2.1"
1421 | node-fetch "^2.2.0"
1422 | stream-events "^1.0.5"
1423 | uuid "^3.3.2"
1424 |
1425 | through2@^2.0.0:
1426 | version "2.0.5"
1427 | resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
1428 | integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
1429 | dependencies:
1430 | readable-stream "~2.3.6"
1431 | xtend "~4.0.1"
1432 |
1433 | through2@^3.0.0, through2@^3.0.1:
1434 | version "3.0.1"
1435 | resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.1.tgz#39276e713c3302edf9e388dd9c812dd3b825bd5a"
1436 | integrity sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==
1437 | dependencies:
1438 | readable-stream "2 || 3"
1439 |
1440 | toidentifier@1.0.0:
1441 | version "1.0.0"
1442 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
1443 | integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
1444 |
1445 | tslib@1.10.0:
1446 | version "1.10.0"
1447 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a"
1448 | integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==
1449 |
1450 | type-is@~1.6.17, type-is@~1.6.18:
1451 | version "1.6.18"
1452 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
1453 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
1454 | dependencies:
1455 | media-typer "0.3.0"
1456 | mime-types "~2.1.24"
1457 |
1458 | typedarray-to-buffer@^3.1.5:
1459 | version "3.1.5"
1460 | resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
1461 | integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==
1462 | dependencies:
1463 | is-typedarray "^1.0.0"
1464 |
1465 | typedarray@^0.0.6:
1466 | version "0.0.6"
1467 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
1468 | integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
1469 |
1470 | unique-string@^2.0.0:
1471 | version "2.0.0"
1472 | resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d"
1473 | integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==
1474 | dependencies:
1475 | crypto-random-string "^2.0.0"
1476 |
1477 | unpipe@1.0.0, unpipe@~1.0.0:
1478 | version "1.0.0"
1479 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
1480 | integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
1481 |
1482 | util-deprecate@^1.0.1, util-deprecate@~1.0.1:
1483 | version "1.0.2"
1484 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
1485 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
1486 |
1487 | utils-merge@1.0.1:
1488 | version "1.0.1"
1489 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
1490 | integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
1491 |
1492 | uuid@^3.3.2:
1493 | version "3.3.3"
1494 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866"
1495 | integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==
1496 |
1497 | vary@^1, vary@~1.1.2:
1498 | version "1.1.2"
1499 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
1500 | integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
1501 |
1502 | walkdir@^0.4.0:
1503 | version "0.4.1"
1504 | resolved "https://registry.yarnpkg.com/walkdir/-/walkdir-0.4.1.tgz#dc119f83f4421df52e3061e514228a2db20afa39"
1505 | integrity sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==
1506 |
1507 | websocket-driver@>=0.5.1:
1508 | version "0.7.3"
1509 | resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.3.tgz#a2d4e0d4f4f116f1e6297eba58b05d430100e9f9"
1510 | integrity sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==
1511 | dependencies:
1512 | http-parser-js ">=0.4.0 <0.4.11"
1513 | safe-buffer ">=5.1.0"
1514 | websocket-extensions ">=0.1.1"
1515 |
1516 | websocket-extensions@>=0.1.1:
1517 | version "0.1.4"
1518 | resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42"
1519 | integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==
1520 |
1521 | wrappy@1:
1522 | version "1.0.2"
1523 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1524 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
1525 |
1526 | write-file-atomic@^3.0.0:
1527 | version "3.0.0"
1528 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.0.tgz#1b64dbbf77cb58fd09056963d63e62667ab4fb21"
1529 | integrity sha512-EIgkf60l2oWsffja2Sf2AL384dx328c0B+cIYPTQq5q2rOYuDV00/iPFBOUiDKKwKMOhkymH8AidPaRvzfxY+Q==
1530 | dependencies:
1531 | imurmurhash "^0.1.4"
1532 | is-typedarray "^1.0.0"
1533 | signal-exit "^3.0.2"
1534 | typedarray-to-buffer "^3.1.5"
1535 |
1536 | xdg-basedir@^4.0.0:
1537 | version "4.0.0"
1538 | resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13"
1539 | integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==
1540 |
1541 | xtend@^4.0.1, xtend@~4.0.1:
1542 | version "4.0.2"
1543 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
1544 | integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
1545 |
1546 | yallist@^3.0.2:
1547 | version "3.0.3"
1548 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9"
1549 | integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==
1550 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "main": "node_modules/expo/AppEntry.js",
3 | "scripts": {
4 | "start": "expo start",
5 | "android": "expo start --android",
6 | "ios": "expo start --ios",
7 | "web": "expo start --web",
8 | "eject": "expo eject"
9 | },
10 | "dependencies": {
11 | "expo": "^34.0.1",
12 | "react": "16.8.3",
13 | "react-dom": "^16.8.6",
14 | "react-native": "https://github.com/expo/react-native/archive/sdk-34.0.0.tar.gz",
15 | "react-native-paper": "^2.16.0",
16 | "react-native-web": "^0.11.4",
17 | "react-redux": "^7.1.1",
18 | "redux": "^4.0.4",
19 | "redux-observable": "^1.1.0",
20 | "rxjs": "^6.5.3"
21 | },
22 | "devDependencies": {
23 | "babel-preset-expo": "^6.0.0"
24 | },
25 | "private": true
26 | }
27 |
--------------------------------------------------------------------------------
/src/api.js:
--------------------------------------------------------------------------------
1 | import { pipe, map } from "rxjs/operators";
2 | import { ajax } from "rxjs/ajax";
3 |
4 | const BASE_URL =
5 | "https://us-central1-redux-observable-todos.cloudfunctions.net/api";
6 |
7 | export const getUser = () => ajax.getJSON(`${BASE_URL}/user`);
8 | export const getTodos = () => ajax.getJSON(`${BASE_URL}/todo`);
9 | export const addTodo = text =>
10 | ajax({
11 | url: `${BASE_URL}/todo`,
12 | method: "POST",
13 | body: { text }
14 | }).pipe(map(data => data.response));
15 |
16 | export const completeTodo = id =>
17 | ajax({
18 | url: `${BASE_URL}/todo/${id}/complete`,
19 | method: "POST"
20 | }).pipe(map(data => data.response));
21 |
--------------------------------------------------------------------------------
/src/colors.js:
--------------------------------------------------------------------------------
1 | export default [
2 | "palevioletred",
3 | "springgreen",
4 | "goldenrod",
5 | "lightseagreen",
6 | "crimson",
7 | "orangered",
8 | "maroon",
9 | "chocolate",
10 | "midnightblue",
11 | "deeppink",
12 | "darkmagenta",
13 | "sienna",
14 | "cyan",
15 | "dodgerblue",
16 | "fuchsia",
17 | "yellowgreen",
18 | "tomato",
19 | "blueviolet",
20 | "lime",
21 | "orange",
22 | "springgreen",
23 | "teal"
24 | ];
25 |
--------------------------------------------------------------------------------
/src/components/Header.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { connect } from "react-redux";
3 | import { Appbar } from "react-native-paper";
4 | import { getUser } from "../store/actions";
5 |
6 | class Header extends React.Component {
7 | componentDidMount() {
8 | this.props.getUser();
9 | }
10 | render() {
11 | const { user } = this.props;
12 | return (
13 |
14 |
15 |
16 | );
17 | }
18 | }
19 |
20 | function mapStateToProps(state) {
21 | return {
22 | user: state.user
23 | };
24 | }
25 | function mapDispatchToProps(dispatch) {
26 | return {
27 | getUser: () => dispatch(getUser())
28 | };
29 | }
30 |
31 | export default connect(
32 | mapStateToProps,
33 | mapDispatchToProps
34 | )(Header);
35 |
--------------------------------------------------------------------------------
/src/components/TodoList.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { connect } from "react-redux";
3 | import { View, SafeAreaView, ScrollView, StyleSheet } from "react-native";
4 | import { TextInput, Button, Checkbox, Colors, Title } from "react-native-paper";
5 | import { getTodos, completeTodo, addTodo } from "../store/actions";
6 | import colors from "../colors";
7 | import { white } from "ansi-colors";
8 |
9 | class TodoList extends React.Component {
10 | state = {
11 | todo: ""
12 | };
13 |
14 | componentDidMount() {
15 | this.props.getTodos();
16 | }
17 |
18 | renderFormInput() {
19 | return (
20 |
21 | this.setState({ todo })}
27 | />
28 |
39 |
40 | );
41 | }
42 |
43 | renderTodoItem(todo, index) {
44 | return (
45 |
52 | {
57 | if (!todo.completed) {
58 | this.props.completeTodo(todo.id);
59 | }
60 | }}
61 | />
62 | {todo.text}
63 |
64 | );
65 | }
66 |
67 | render() {
68 | const { style, todos } = this.props;
69 | return (
70 |
71 | {this.renderFormInput()}
72 |
73 |
74 | {todos.map((todo, idx) => this.renderTodoItem(todo, idx))}
75 |
76 |
77 |
78 | );
79 | }
80 | }
81 |
82 | function mapStateToProps(state) {
83 | return { todos: state.todos };
84 | }
85 |
86 | function mapDispatchToProps(dispatch) {
87 | return {
88 | getTodos: () => dispatch(getTodos()),
89 | completeTodo: id => dispatch(completeTodo(id)),
90 | addTodo: text => dispatch(addTodo(text))
91 | };
92 | }
93 |
94 | export default connect(
95 | mapStateToProps,
96 | mapDispatchToProps
97 | )(TodoList);
98 |
99 | const styles = StyleSheet.create({
100 | inputContainer: {
101 | flexDirection: "row",
102 | alignItems: "center",
103 | padding: 16,
104 | backgroundColor: "#FAFAFA"
105 | },
106 | input: {
107 | flex: 1,
108 | backgroundColor: "#FAFAFA"
109 | },
110 | todoList: {
111 | flex: 1
112 | },
113 | listItem: {
114 | padding: 16,
115 | flexDirection: "row"
116 | },
117 | listItemText: {
118 | flex: 1,
119 | color: "white",
120 | fontWeight: "300"
121 | }
122 | });
123 |
--------------------------------------------------------------------------------
/src/store/actions.js:
--------------------------------------------------------------------------------
1 | export const GET_USER = "GET_USER";
2 | export const GET_USER_SUCCESS = "GET_USER_SUCCESS";
3 | export const GET_TODOS = "GET_TODOS";
4 | export const GET_TODOS_SUCCESS = "GET_TODOS_SUCCESS";
5 | export const ADD_TODO = "ADD_TODO";
6 | export const ADD_TODO_SUCCESS = "ADD_TODO_SUCCESS";
7 | export const COMPLETE_TODO = "COMPLETE_TODO";
8 | export const COMPLETE_TODO_SUCCESS = "COMPLETE_TODO_SUCCESS";
9 |
10 | export const getUser = () => ({ type: GET_USER });
11 | export const getUserSuccess = user => ({
12 | type: GET_USER_SUCCESS,
13 | payload: user
14 | });
15 | export const getTodos = () => ({ type: GET_TODOS });
16 | export const getTodosSuccess = todos => ({
17 | type: GET_TODOS_SUCCESS,
18 | payload: todos
19 | });
20 | export const addTodo = text => ({ type: ADD_TODO, payload: text });
21 | export const addTodoSuccess = todo => ({
22 | type: ADD_TODO_SUCCESS,
23 | payload: todo
24 | });
25 | export const completeTodo = id => ({ type: COMPLETE_TODO, payload: id });
26 | export const completeTodoSuccess = todo => ({
27 | type: COMPLETE_TODO_SUCCESS,
28 | payload: todo
29 | });
30 |
--------------------------------------------------------------------------------
/src/store/store.js:
--------------------------------------------------------------------------------
1 | import { createStore, combineReducers, applyMiddleware } from "redux";
2 | import { ofType, combineEpics, createEpicMiddleware } from "redux-observable";
3 | import { map, flatMap } from "rxjs/operators";
4 | import { ajax } from "rxjs/ajax";
5 |
6 | import {
7 | GET_USER,
8 | GET_USER_SUCCESS,
9 | GET_TODOS,
10 | GET_TODOS_SUCCESS,
11 | ADD_TODO,
12 | ADD_TODO_SUCCESS,
13 | COMPLETE_TODO,
14 | COMPLETE_TODO_SUCCESS,
15 | getUserSuccess,
16 | getTodosSuccess,
17 | addTodoSuccess,
18 | completeTodoSuccess
19 | } from "./actions";
20 |
21 | import * as Api from "../api";
22 |
23 | function user(state = {}, action) {
24 | switch (action.type) {
25 | case GET_USER_SUCCESS:
26 | return action.payload;
27 | default:
28 | return state;
29 | }
30 | }
31 |
32 | function todos(state = [], action) {
33 | switch (action.type) {
34 | case GET_TODOS_SUCCESS:
35 | return action.payload;
36 | case ADD_TODO_SUCCESS:
37 | return [...state, action.payload];
38 | case COMPLETE_TODO_SUCCESS:
39 | return state.map(todo => {
40 | if (todo.id === action.payload.id) {
41 | return { ...todo, completed: true };
42 | }
43 | return todo;
44 | });
45 | default:
46 | return state;
47 | }
48 | }
49 |
50 | const rootReducer = combineReducers({ user, todos });
51 |
52 | const userEpic = action$ =>
53 | action$.pipe(
54 | ofType(GET_USER),
55 | flatMap(() => Api.getUser()),
56 | map(user => getUserSuccess(user))
57 | );
58 |
59 | const getTodosEpic = action$ =>
60 | action$.pipe(
61 | ofType(GET_TODOS),
62 | flatMap(() => Api.getTodos()),
63 | map(({ todos }) => getTodosSuccess(todos))
64 | );
65 |
66 | const addTodoEpic = action$ =>
67 | action$.pipe(
68 | ofType(ADD_TODO),
69 | flatMap(action => Api.addTodo(action.payload)),
70 | map(todo => addTodoSuccess(todo))
71 | );
72 |
73 | const completeTodoEpic = action$ =>
74 | action$.pipe(
75 | ofType(COMPLETE_TODO),
76 | flatMap(action => Api.completeTodo(action.payload)),
77 | map(todo => completeTodoSuccess(todo))
78 | );
79 |
80 | const rootEpic = combineEpics(
81 | userEpic,
82 | getTodosEpic,
83 | addTodoEpic,
84 | completeTodoEpic
85 | );
86 |
87 | const epicMiddleware = createEpicMiddleware();
88 | export const store = createStore(rootReducer, applyMiddleware(epicMiddleware));
89 | epicMiddleware.run(rootEpic);
90 |
--------------------------------------------------------------------------------