diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3581689673..d2325739b9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -54,6 +54,7 @@ You can find useful links to learn more about these technologies [in the resourc - Run the component documentation `yarn storybook` +We use [BrowserStack](https://www.browserstack.com/) to test our platform on multiple devices and browsers. Note: Builds are currently tested on Chrome/Firefox. If your browser is not supported, then consider contributing. diff --git a/functions/README.md b/functions/README.md index d7ca35c945..9a13742e82 100644 --- a/functions/README.md +++ b/functions/README.md @@ -24,9 +24,22 @@ Simply make a PR and once approved the function will be deployed ## Testing locally -If the code is built you can run firebase serve from the main repo and the functions will also be made available. More info: https://firebase.google.com/docs/functions/local-emulator - -Note, this will require authentication for the firebase project. You can request to be added to the project from any of the admins. +``` +cd functions +npm run start +``` + +This spins up concurrent tasks to build and watch for changes to the typescript code, and run +the firebase emulator which will hot-reload when the compiled code changes. This combination +should mean that changes to functions can be tested locally, via the given endpoint, e.g. +`http://localhost:5001/precious-plastics-v4-dev/us-central1/api` +More info: https://firebase.google.com/docs/functions/local-emulator + +It is recommended that you use a good API testing software, such as [Postman](https://www.getpostman.com/) or [Insomnia](https://insomnia.rest/) for this + +Note, this will require authentication for the firebase project. You can request to be added to the project from any of the admins. Once authenticated, you can login to firebase within your own console +and the relevant config will automatically be made available +(viewable with command `firebase functions:config:get`) This also only works for specific triggers (namely the api endpoints). If you want to test a functions triggered in other ways you may first want to create an api endpoint diff --git a/functions/package.json b/functions/package.json index 42904e9ed1..837bfa4c12 100644 --- a/functions/package.json +++ b/functions/package.json @@ -4,22 +4,24 @@ "scripts": { "lint": "tslint --project tsconfig.json", "build": "tsc", + "watch": "./node_modules/.bin/tsc --watch", "copyDevConfig": "firebase functions:config:get > .runtimeconfig.json", "copyDevConfigWin": "firebase functions:config:get | ac .runtimeconfig.json", - "serve": "npm run copyDevConfig && npm run build && firebase serve --only functions", + "serve": "concurrently --kill-others \"npm run watch\" \"firebase emulators:start\"", "shell": "npm run build && firebase functions:shell", "deploy:dev": "firebase use default && firebase deploy --only functions", - "start": "npm run shell", + "start": "npm run copyDevConfig && npm run serve", "logs": "firebase functions:log" }, - "main": "lib/index.js", + "main": "./lib/functions/src/index.js", "dependencies": { "axios": "^0.18.1", "body-parser": "^1.18.3", "cors": "^2.8.5", + "dateformat": "^3.0.3", "express": "^4.16.4", - "firebase-admin": "7.2.0", - "firebase-functions": "2.2.1", + "firebase-admin": "8.3.0", + "firebase-functions": "^3.2.0", "fs-extra": "^7.0.1", "google-auth-library": "^2.0.1", "googleapis": "^35.0.0", @@ -29,10 +31,12 @@ "devDependencies": { "@types/axios": "^0.14.0", "@types/cors": "^2.8.5", + "@types/dateformat": "^3.0.0", "@types/fs-extra": "^5.0.5", "@types/sharp": "^0.22.1", - "tslint": "5.15.0", - "typescript": "3.2.2" + "concurrently": "^4.1.1", + "tslint": "^5.12.0", + "typescript": "^3.2.2" }, "engines": { "node": "8" diff --git a/functions/src/Firebase/databaseBackup.ts b/functions/src/Firebase/databaseBackup.ts index 4c01ee5ae7..7de8ae7d34 100644 --- a/functions/src/Firebase/databaseBackup.ts +++ b/functions/src/Firebase/databaseBackup.ts @@ -1,10 +1,15 @@ import Axios from 'axios' import { getAccessToken } from '../Utils/auth.utils' -import { config } from 'firebase-functions' +import { SERVICE_ACCOUNT_CONFIG } from '../config/config' +import * as google from 'google-auth-library' +import * as dateformat from 'dateformat' /* Cloud function to automatically backup the firebase database adapted from: https://thatweirddeveloper.com/how-to-back-up-cloud-firestore-periodically + More examples at: + https://firebase.google.com/docs/firestore/solutions/schedule-export + Note this requires use of a service account to access drive storage, which is accessed from environment variables */ @@ -12,34 +17,33 @@ import { config } from 'firebase-functions' // rest reference: https://cloud.google.com/firestore/docs/reference/rest/v1beta2/projects.databases/exportDocuments export const BackupDatabase = async () => { console.log('executing database backup') - const scopes = [ - 'https://www.googleapis.com/auth/datastore', - 'https://www.googleapis.com/auth/cloud-platform', - ] - const accessToken = await getAccessToken(scopes) + // TODO - no longer using util auth, should revise code to see if still relevant or not + const auth = await google.auth.getClient({ + scopes: ['https://www.googleapis.com/auth/datastore'], + }) + const accessTokenResponse = await auth.getAccessToken() + const accessToken = accessTokenResponse.token + const headers = { + 'Content-Type': 'application/json', + Authorization: 'Bearer ' + accessToken, + } + console.log('access token received', accessToken) - const PROJECT_ID = config().project_id - console.log('project id', PROJECT_ID) + const PROJECT_ID = SERVICE_ACCOUNT_CONFIG.project_id + const url = `https://firestore.googleapis.com/v1beta1/projects/${PROJECT_ID}/databases/(default):exportDocuments` // use axios to send post request as promise console.log('posting', url) - const timestamp: string = new Date().toString() - let res + const timestamp = dateformat(Date.now(), 'yyyy-mm-dd-HH-MM-ss') + const body = { + outputUriPrefix: `gs://${PROJECT_ID}.appspot.com/backups/${timestamp}`, + } try { - res = await Axios({ - url: url, - method: 'post', - headers: { - Authorization: `Bearer ${accessToken}`, - }, - data: { - outputUriPrefix: `gs://${PROJECT_ID}.appspot.com/backups/${timestamp}`, - }, - }) + const response = await Axios.post(url, body, { headers: headers }) + return { status: 200, message: response.data } } catch (error) { - res = 404 + return { status: 500, message: error.response.data } } - return res } // const createSub = async () => { diff --git a/functions/src/Firebase/test.json b/functions/src/Firebase/test.json deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/functions/src/exports/_deprecated.ts b/functions/src/exports/_deprecated.ts deleted file mode 100644 index 1fe79f87df..0000000000 --- a/functions/src/exports/_deprecated.ts +++ /dev/null @@ -1,50 +0,0 @@ -/************ Cloud Firestore Triggers ****************************************************** - Functions called in response to changes in Cloud Firestore database - ************************************************************************************/ -// exports.syncCommentsCount = functions.firestore -// .document('discussions/{discussionId}/comments/{commentId}') -// .onWrite(async (change, context) => { -// await syncCommentsCount(context) -// }) - -/************ Storage Triggers ****************************************************** -Functions called in response to changes to firebase storage objects -************************************************************************************/ - -// exports.imageResize = functions.storage.object().onFinalize(async object => { -// if (object.metadata && (object.metadata.resized || object.metadata.original)) -// return Promise.resolve() -// return ImageConverter.resizeStorageImage(object) -// }) - -/************ Callable ************************************************************* -These can be called from directly within the app (passing additional auth info) -https://firebase.google.com/docs/functions/callable -Any functions added here should have a custom url rewrite specified in root firebase.json -to handle CORS preflight requests correctly -************************************************************************************/ - -// use service agent to gain access credentials for gcp with given access scopes -// exports.getAccessToken = functions.https.onCall( -// async (data: getAccessTokenData) => { -// const token = await UtilsFunctions.getAccessToken(data.accessScopes) -// return token -// }, -// ) -// interface getAccessTokenData { -// accessScopes: string[] -// } - -// exports.getAnalytics = functions.https.onCall( -// async (data: getAnalyticsData) => { -// console.log('get analytics request received', data) -// await AnalyticsFunctions.getAnalyticsReport(data.viewId, data.token) -// }, -// ) -// interface getAnalyticsData { -// viewId: string -// token: string -// } -// exports.syncCommentsCount = functions.https.onCall(async () => { -// console.log('sync comments count called') -// }) diff --git a/functions/src/exports/api.ts b/functions/src/exports/api.ts index f93f45932d..e0f38a8d16 100644 --- a/functions/src/exports/api.ts +++ b/functions/src/exports/api.ts @@ -8,6 +8,7 @@ import * as functions from 'firebase-functions' import * as bodyParser from 'body-parser' import * as cors from 'cors' import * as express from 'express' +import { upgradeDBAll } from '../upgrade/dbV1Upgrade' console.log('api init') const app = express() @@ -40,8 +41,10 @@ app.all('*', async (req, res, next) => { // *** NOTE currently all request types handled the same, i.e. GET/POST // will likely change behaviour in future when required switch (endpoint) { - case 'avatar': - console.log('avatar test') + case 'dbV1Upgrade': + console.log('upgrading db v1') + const upgradeStatus = await upgradeDBAll() + res.send(upgradeStatus) break default: res.send('invalid api endpoint') diff --git a/functions/src/exports/tasks.ts b/functions/src/exports/tasks.ts index 40ecf61189..c60ba9562d 100644 --- a/functions/src/exports/tasks.ts +++ b/functions/src/exports/tasks.ts @@ -5,13 +5,14 @@ Add/change schedule from `./functions-cron/appengine/cron.yaml` import * as functions from 'firebase-functions' import DHSite from '../DaveHakkensNL' +import { BackupDatabase } from '../Firebase/databaseBackup' export const weeklyTasks = functions.pubsub .topic('weekly-tick') .onPublish(async (message, context) => { console.log('weekly tick', message, context) - // await BackupDatabase() - console.log('backup complete') + const backupStatus = await BackupDatabase() + console.log(backupStatus) }) export const dailyTasks = functions.pubsub diff --git a/functions/src/models.ts b/functions/src/models.ts new file mode 100644 index 0000000000..9aac74a6b6 --- /dev/null +++ b/functions/src/models.ts @@ -0,0 +1,7 @@ +// tslint:disable no-implicit-dependencies +// Models can be imported from the main package for use here +// NOTE 1 - this requires adjustment main src in package.json +// NOTE 2 - shorthand @OAModels notation defined in tsconfig +import { IDBEndpoint, IDbDoc } from '@OAModels/common.models' + +export { IDBEndpoint, IDbDoc } diff --git a/functions/src/upgrade/dbV1Upgrade.ts b/functions/src/upgrade/dbV1Upgrade.ts new file mode 100644 index 0000000000..a9af838ef4 --- /dev/null +++ b/functions/src/upgrade/dbV1Upgrade.ts @@ -0,0 +1,94 @@ +import { db } from '../Firebase/firestoreDB' + +/* Temporary function used to migrate from db V1 docs to V2 + The breaking change comes from converting timestamps to strings + (explained here: https://github.com/OneArmyWorld/onearmy/issues/343 ) +*/ + +const mappings: DBMapping = { + discussions: 'v2_discussions', + eventsV1: 'v2_events', + howtosV1: 'v2_howtos', + tagsV1: 'v2_tags', + users: 'v2_users', +} + +export const upgradeDBAll = async () => { + const promises = Object.keys(mappings).map(async endpoint => { + const upgradedDocs = await upgradeDBEndpoint(endpoint) + return upgradedDocs + }) + const updates = await Promise.all(promises) + console.log('upgrade complete') + return updates +} + +const upgradeDBEndpoint = async (endpoint: string) => { + console.log('upgrading endpoint', endpoint) + const snap = await db.collection(endpoint).get() + const docs = snap.empty ? [] : snap.docs.map(d => d.data()) + console.log(`|${endpoint}|: [${docs.length}] docs to upgrade`) + const batch = db.batch() + // remove deleted docs and upgrade + const v2Docs = docs.filter(d => !d._deleted).map(d => upgradeV1Doc(d)) + const v2Endpoint = mappings[endpoint] + v2Docs.forEach(v2Doc => { + const ref = db.doc(`${v2Endpoint}/${v2Doc._id}`) + batch.set(ref, v2Doc) + }) + console.log(`|${endpoint}|: upgrade ready`) + await batch.commit() + return v2Docs +} + +function upgradeV1Doc(doc: any) { + try { + // upgrade timestamps on all docs + const metaFields = ['_created', '_modified'] + metaFields.forEach(field => { + doc[field] = _upgradeDate(doc[field]) + }) + // upgrade other specific fields + const optionalFields = ['_lastResponse', 'year', 'date'] + optionalFields.forEach(field => { + // ignore case where field set to null (discussions) + if (doc.hasOwnProperty(field) && doc[field]) { + doc[field] = _upgradeDate(doc[field]) + } + }) + return doc + } catch (error) { + console.log(doc) + throw new Error('unable to upgrade doc') + } +} + +function _upgradeDate(date: any) { + if (typeof date === 'string') { + return new Date(date).toISOString() + } else if ( + date.hasOwnProperty('_seconds') && + date.hasOwnProperty('_nanoseconds') + ) { + const millis = date._seconds * 1000 + date._nanoseconds / 1e6 + return new Date(millis).toISOString() + } else { + throw new Error(`no date upgrade method: ${JSON.stringify(date)}`) + } +} + +type DBMapping = { [key in IDBEndpointV1]: IDBEndpointV2 } + +type IDBEndpointV1 = + | 'howtosV1' + | 'users' + | 'discussions' + | 'tagsV1' + | 'eventsV1' + +type IDBEndpointV2 = + | 'v2_howtos' + | 'v2_users' + | 'v2_discussions' + | 'v2_tags' + | 'v2_events' diff --git a/functions/tsconfig.json b/functions/tsconfig.json index b1a210a5dc..056e9df3d9 100644 --- a/functions/tsconfig.json +++ b/functions/tsconfig.json @@ -6,7 +6,13 @@ "outDir": "lib", "sourceMap": true, "target": "es6", - "typeRoots": ["node_modules/@types"] + "jsx": "react", + "typeRoots": ["node_modules/@types"], + "baseUrl": "./", + "paths": { + "@OAModels/*": ["../src/models/*"] + }, + "skipLibCheck": true }, "include": ["src/**/*.ts", "spec/**/*.ts"] } diff --git a/functions/tslint.json b/functions/tslint.json index 2e8e91288e..41d11129bf 100644 --- a/functions/tslint.json +++ b/functions/tslint.json @@ -53,7 +53,7 @@ "no-floating-promises": true, // Do not allow any imports for modules that are not in package.json. These will almost certainly fail when - // deployed. + // deployed "no-implicit-dependencies": true, // The 'this' keyword can only be used inside of classes. @@ -65,11 +65,8 @@ // Disallow control flow statements, such as return, continue, break, and throw in finally blocks. "no-unsafe-finally": true, - // Do not allow variables to be used before they are declared. - "no-use-before-declare": true, - // Expressions must always return a value. Avoids common errors like const myValue = functionReturningVoid(); - "no-void-expression": [true, "ignore-arrow-function-shorthand"], + "no-void-expression": [false, "ignore-arrow-function-shorthand"], // Disallow duplicate imports in the same file. "no-duplicate-imports": true, @@ -106,9 +103,6 @@ // Warns if function overloads could be unified into a single function with optional or rest parameters. "unified-signatures": { "severity": "warning" }, - // Warns if code has an import or variable that is unused. - "no-unused-variable": { "severity": "warning" }, - // Prefer const for values that will not change. This better documents code. "prefer-const": { "severity": "warning" }, diff --git a/functions/yarn.lock b/functions/yarn.lock index 3d1dfbf57c..64bec78b5a 100644 --- a/functions/yarn.lock +++ b/functions/yarn.lock @@ -2,6 +2,59 @@ # yarn lockfile v1 +<<<<<<< HEAD +"@babel/code-frame@^7.0.0": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" + integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== + dependencies: + "@babel/highlight" "^7.0.0" + +"@babel/highlight@^7.0.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" + integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^4.0.0" + +"@firebase/database-types@0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@firebase/database-types/-/database-types-0.4.2.tgz#7bb2e605b914ad5cca7b1f4f5d8e7940fa37a708" + integrity sha512-rBF/Sp4S4zzVg+a6h0iEiXR2GdNRrvx2BR6IcvGHnSPF7XVpj9UuUWtZMJyO+vWP3zlIGDvlNRJ4qF01Y6KxGg== + +"@firebase/database@^0.4.7": + version "0.4.12" + resolved "https://registry.yarnpkg.com/@firebase/database/-/database-0.4.12.tgz#7ace48fd87da087d7477e487f91af7cf35ff6f9a" + integrity sha512-CdPZU8kNYyvtTCr7fdLiM71EX9yooiKzpMLkTfL2ay7EfvSmnbSKPPCODYeUXvijfH6w2QSyoRsS69HIBaU3iA== + dependencies: + "@firebase/database-types" "0.4.2" + "@firebase/logger" "0.1.22" + "@firebase/util" "0.2.25" + faye-websocket "0.11.3" + tslib "1.10.0" + +"@firebase/logger@0.1.22": + version "0.1.22" + resolved "https://registry.yarnpkg.com/@firebase/logger/-/logger-0.1.22.tgz#678b1fc0dba533d74d0ec0fe893a9cd53053d235" + integrity sha512-os1vG5FohEF9gl27duZeTtEphOP7oHQ+YjnT+sT2dGprkTIAyaEkzH6G8AgLPUqmASSsoa6BqY5kFXHQi9+xGw== + +"@firebase/util@0.2.25": + version "0.2.25" + resolved "https://registry.yarnpkg.com/@firebase/util/-/util-0.2.25.tgz#f09fc9c8231ee939aff1673d4a1b601b3cdf17c1" + integrity sha512-J/JgYhvFLCpejzfzjzNDZGFZD3kNtTlMu+2EjiQ3tCII6w0N/uEza5GtFiYTKCjGBa51Lmi2j/OPLz+yhlQCWg== + dependencies: + tslib "1.10.0" + +"@google-cloud/common@^2.1.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@google-cloud/common/-/common-2.1.2.tgz#cefab7522d652d4ee48ab4719e2fe2d6c117db4c" + integrity sha512-VAjWRrTEgcGujj/MgTTAtjjzeDoQqs/FDT6DG7004QFZoJsSwBmx2vGpI5TJmCuxLWvhEc0Xs5AMOvhgt7FLSw== + dependencies: + "@google-cloud/projectify" "^1.0.0" + "@google-cloud/promisify" "^1.0.0" +======= "@firebase/app-types@0.3.10": version "0.3.10" resolved "https://registry.yarnpkg.com/@firebase/app-types/-/app-types-0.3.10.tgz#8f6d24d80bf833622b53ed26eaa04cfa9dd0f2f3" @@ -54,85 +107,82 @@ "@google-cloud/projectify" "^0.3.3" "@google-cloud/promisify" "^0.4.0" "@types/request" "^2.48.1" +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab arrify "^2.0.0" duplexify "^3.6.0" ent "^2.2.0" extend "^3.0.2" - google-auth-library "^3.1.1" - pify "^4.0.1" + google-auth-library "^5.0.0" retry-request "^4.0.0" - teeny-request "^3.11.3" + teeny-request "^5.2.1" -"@google-cloud/firestore@^1.2.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@google-cloud/firestore/-/firestore-1.3.0.tgz#193c4a3a1021c1b44c7f9a06f5e0bd49485f566a" - integrity sha512-KUKcHUU+FwwBmJH1LqJcd+XtLPzMcS/Vni6/WCJGHBGrOBmXCey4i3Gc41ZsuSk1Qx4msH5f+4h0b3t6YLyydg== +"@google-cloud/firestore@^2.0.0": + version "2.2.6" + resolved "https://registry.yarnpkg.com/@google-cloud/firestore/-/firestore-2.2.6.tgz#99aeee181e6dfcf2d0dbe2f8778035544dff14ae" + integrity sha512-Ji4aOGQKtJwdaFKnNXL6nNoBfyzUTosFi1DgIM+IXd3JeBjMItou8zmLXh0teH9iL1I3lzeNd8doY3S7S7nWNg== dependencies: bun "^0.0.12" deep-equal "^1.0.1" functional-red-black-tree "^1.0.1" - google-gax "^0.25.0" - lodash.merge "^4.6.1" + google-gax "^1.1.2" through2 "^3.0.0" -"@google-cloud/paginator@^0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@google-cloud/paginator/-/paginator-0.2.0.tgz#eab2e6aa4b81df7418f6c51e2071f64dab2c2fa5" - integrity sha512-2ZSARojHDhkLvQ+CS32K+iUhBsWg3AEw+uxtqblA7xoCABDyhpj99FPp35xy6A+XlzMhOSrHHaxFE+t6ZTQq0w== +"@google-cloud/paginator@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@google-cloud/paginator/-/paginator-2.0.0.tgz#187af93634341e79cf1d41dccde5c9082508a0f2" + integrity sha512-droVsitvSUGSoMV7Hbk2B5dCFkZIz9YNu3D1AxgFh+hmbSEWJ9SgB/M3WrU8CUx3pseH7IbLuq8jgs3HEFzeHw== dependencies: - arrify "^1.0.1" + arrify "^2.0.0" extend "^3.0.1" - split-array-stream "^2.0.0" - stream-events "^1.0.4" -"@google-cloud/projectify@^0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@google-cloud/projectify/-/projectify-0.3.3.tgz#bde9103d50b20a3ea3337df8c6783a766e70d41d" - integrity sha512-7522YHQ4IhaafgSunsFF15nG0TGVmxgXidy9cITMe+256RgqfcrfWphiMufW+Ou4kqagW/u3yxwbzVEW3dk2Uw== +"@google-cloud/projectify@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@google-cloud/projectify/-/projectify-1.0.1.tgz#f654c2ea9de923294ec814ff07c42891abf2d143" + integrity sha512-xknDOmsMgOYHksKc1GPbwDLsdej8aRNIA17SlSZgQdyrcC0lx0OGo4VZgYfwoEU1YS8oUxF9Y+6EzDOb0eB7Xg== -"@google-cloud/promisify@^0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@google-cloud/promisify/-/promisify-0.4.0.tgz#4fbfcf4d85bb6a2e4ccf05aa63d2b10d6c9aad9b" - integrity sha512-4yAHDC52TEMCNcMzVC8WlqnKKKq+Ssi2lXoUg9zWWkZ6U6tq9ZBRYLHHCRdfU+EU9YJsVmivwGcKYCjRGjnf4Q== +"@google-cloud/promisify@^1.0.0": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@google-cloud/promisify/-/promisify-1.0.2.tgz#e581aa79ff71fb6074acc1cc59e3d81bf84ce07b" + integrity sha512-7WfV4R/3YV5T30WRZW0lqmvZy9hE2/p9MvpI34WuKa2Wz62mLu5XplGTFEMK6uTbJCLWUxTcZ4J4IyClKucE5g== -"@google-cloud/storage@^2.3.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@google-cloud/storage/-/storage-2.5.0.tgz#9dd3566d8155cf5ba0c212208f69f9ecd47fbd7e" - integrity sha512-q1mwB6RUebIahbA3eriRs8DbG2Ij81Ynb9k8hMqTPkmbd8/S6Z0d6hVvfPmnyvX9Ej13IcmEYIbymuq/RBLghA== +"@google-cloud/storage@^3.0.2": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@google-cloud/storage/-/storage-3.1.0.tgz#5571d82ada3bfc63d4d53577b6508d9828d50565" + integrity sha512-dKKcMtWpu6Haoh7ricAM+QLAeQSA+ci4AfpRXQZXk8yD0JItYhmTx59ht88cSB+9qIYrfXCnpshsvyF0PJ5N/w== dependencies: - "@google-cloud/common" "^0.32.0" - "@google-cloud/paginator" "^0.2.0" - "@google-cloud/promisify" "^0.4.0" - arrify "^1.0.0" - async "^2.0.1" + "@google-cloud/common" "^2.1.0" + "@google-cloud/paginator" "^2.0.0" + "@google-cloud/promisify" "^1.0.0" + arrify "^2.0.0" compressible "^2.0.12" concat-stream "^2.0.0" - date-and-time "^0.6.3" + date-and-time "^0.8.0" duplexify "^3.5.0" - extend "^3.0.0" - gcs-resumable-upload "^1.0.0" + extend "^3.0.2" + gaxios "^2.0.1" + gcs-resumable-upload "^2.0.0" hash-stream-validation "^0.2.1" mime "^2.2.0" mime-types "^2.0.8" onetime "^5.1.0" - pumpify "^1.5.1" + p-limit "^2.2.0" + pumpify "^2.0.0" snakeize "^0.1.0" stream-events "^1.0.1" - teeny-request "^3.11.3" through2 "^3.0.0" - xdg-basedir "^3.0.0" + xdg-basedir "^4.0.0" -"@grpc/grpc-js@^0.3.0": - version "0.3.6" - resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-0.3.6.tgz#d9b52043907170d38e06711d9477fde29ab46fa8" - integrity sha512-SmLNuPGlUur64bNS9aHZguqWDVQ8+Df1CGn+xsh7l6T2wiP5ArOMlywZ3TZo6z/rwKtGQgUJY9ZrPYUmHEXd/Q== +"@grpc/grpc-js@^0.5.2": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-0.5.2.tgz#8e39876033749e1611fe9fa181d9535077805abe" + integrity sha512-NE1tP/1AF6BqhLdILElnF7aOBfoky+4ZOdZU/0NmKo2d+9F9QD8zGoElpBk/5BfyQZ3u1Zs+wFbDOFpVUzDx1w== dependencies: - semver "^5.5.0" + semver "^6.0.0" -"@grpc/proto-loader@^0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.4.0.tgz#a823a51eb2fde58369bef1deb5445fd808d70901" - integrity sha512-Jm6o+75uWT7E6+lt8edg4J1F/9+BedOjaMgwE14pxS/AO43/0ZqK+rCLVVrXLoExwSAZvgvOD2B0ivy3Spsspw== +"@grpc/proto-loader@^0.5.1": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.5.1.tgz#48492b53cdda353110b51a4b02f465974729c76f" + integrity sha512-3y0FhacYAwWvyXshH18eDkUI40wT/uGio7MAegzY8lO5+wVsc19+1A7T0pPptae4kl7bdITL+0cHpnAPmryBjQ== dependencies: lodash.camelcase "^4.3.0" protobufjs "^6.8.6" @@ -205,11 +255,6 @@ "@types/connect" "*" "@types/node" "*" -"@types/caseless@*": - version "0.12.2" - resolved "https://registry.yarnpkg.com/@types/caseless/-/caseless-0.12.2.tgz#f65d3d6389e01eeb458bd54dc8f52b95a9463bc8" - integrity sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w== - "@types/connect@*": version "3.4.32" resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.32.tgz#aa0e9616b9435ccad02bc52b5b454ffc2c70ba28" @@ -217,13 +262,18 @@ dependencies: "@types/node" "*" -"@types/cors@^2.8.1", "@types/cors@^2.8.5": +"@types/cors@^2.8.5": version "2.8.5" resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.5.tgz#c0c54c4e643e1d943d447292f2baf9dc82cfc8ec" integrity sha512-GmK8AKu8i+s+EChK/uZ5IbrXPcPaQKWaNSGevDT/7o3gFObwSUQwqb1jMqxuo+YPvj0ckGzINI+EO7EHcmJjKg== dependencies: "@types/express" "*" +"@types/dateformat@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/dateformat/-/dateformat-3.0.0.tgz#d3cbfa8ac3789990592f3d9585331cdb2c5f979f" + integrity sha512-4N/J/ISasvUYOPnr5gfYRp+YYmPhHqkAyUgP9T9/HQHFoIfjU53lt3jaX67VuTvhpF5WsyNlCcEFbpI3spdxEA== + "@types/express-serve-static-core@*": version "4.16.7" resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.16.7.tgz#50ba6f8a691c08a3dd9fa7fba25ef3133d298049" @@ -232,15 +282,34 @@ "@types/node" "*" "@types/range-parser" "*" +<<<<<<< HEAD +"@types/express@*": + version "4.16.1" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.16.1.tgz#d756bd1a85c34d87eaf44c888bad27ba8a4b7cf0" + integrity sha512-V0clmJow23WeyblmACoxbHBu2JKlE5TiIme6Lem14FnPW9gsttyHtk6wq7njcdIWH1njAaFgR8gW09lgY98gQg== +======= "@types/express@*", "@types/express@^4.11.1": version "4.17.0" resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.0.tgz#49eaedb209582a86f12ed9b725160f12d04ef287" integrity sha512-CjaMu57cjgjuZbh9DpkloeGxV45CnMGlVd+XpG7Gm9QgVrd7KFq+X4HY0vM+2v0bczS48Wg7bvnMY5TN+Xmcfw== +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "*" + "@types/serve-static" "*" + +<<<<<<< HEAD +"@types/express@^4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.0.tgz#49eaedb209582a86f12ed9b725160f12d04ef287" + integrity sha512-CjaMu57cjgjuZbh9DpkloeGxV45CnMGlVd+XpG7Gm9QgVrd7KFq+X4HY0vM+2v0bczS48Wg7bvnMY5TN+Xmcfw== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "*" "@types/serve-static" "*" +======= +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab "@types/fs-extra@^5.0.5": version "5.1.0" resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-5.1.0.tgz#2a325ef97901504a3828718c390d34b8426a10a1" @@ -248,6 +317,8 @@ dependencies: "@types/node" "*" +<<<<<<< HEAD +======= "@types/jsonwebtoken@^7.2.6": version "7.2.8" resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-7.2.8.tgz#8d199dab4ddb5bba3234f8311b804d2027af2b3a" @@ -260,6 +331,7 @@ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.136.tgz#413e85089046b865d960c9ff1d400e04c31ab60f" integrity sha512-0GJhzBdvsW2RUccNHOBkabI8HZVdOXmXbXhuKlDEd5Vv12P7oAVGfomGp3Ne21o5D/qu1WmthlNKFaoZJJeErA== +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab "@types/long@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.0.tgz#719551d2352d301ac8b81db732acb6bdc28dbdef" @@ -290,6 +362,8 @@ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== +<<<<<<< HEAD +======= "@types/request@^2.48.1": version "2.48.2" resolved "https://registry.yarnpkg.com/@types/request/-/request-2.48.2.tgz#936374cbe1179d7ed529fc02543deb4597450fed" @@ -300,6 +374,7 @@ "@types/tough-cookie" "*" form-data "^2.5.0" +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab "@types/serve-static@*": version "1.13.2" resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.2.tgz#f5ac4d7a6420a99a6a45af4719f4dcd8cd907a48" @@ -315,23 +390,6 @@ dependencies: "@types/node" "*" -"@types/tough-cookie@*": - version "2.3.5" - resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-2.3.5.tgz#9da44ed75571999b65c37b60c9b2b88db54c585d" - integrity sha512-SCcK7mvGi3+ZNz833RRjFIxrn4gI1PPR3NtuIS+6vMkvmsGjosqTJwRt5bAEFLRz+wtJMWv8+uOnZf2hi2QXTg== - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -abort-controller@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-2.0.3.tgz#b174827a732efadff81227ed4b8d1cc569baf20a" - integrity sha512-EPSq5wr2aFyAZ1PejJB32IX9Qd4Nwus+adnp7STYFM5/23nLPBazqZ1oor6ZqbH+4otaaGXTlC8RN5hq3C8w9Q== - dependencies: - event-target-shim "^5.0.0" - abort-controller@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" @@ -347,10 +405,32 @@ accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" +<<<<<<< HEAD +accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +agent-base@4: + version "4.3.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" + integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== + dependencies: + es6-promisify "^5.0.0" + +agent-base@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" + integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== +======= agent-base@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab dependencies: es6-promisify "^5.0.0" @@ -374,11 +454,6 @@ ansi-regex@^4.1.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= - ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -411,16 +486,17 @@ array-flatten@1.1.1: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= -arrify@^1.0.0, arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= - arrify@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== +<<<<<<< HEAD +axios@*, axios@^0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.0.tgz#32d53e4851efdc0a11993b6cd000789d70c05102" + integrity sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI= +======= ascli@~1: version "1.0.1" resolved "https://registry.yarnpkg.com/ascli/-/ascli-1.0.1.tgz#bcfa5974a62f18e81cabaeb49732ab4a88f906bc" @@ -453,19 +529,11 @@ axios@^0.18.0, axios@^0.18.1: version "0.18.1" resolved "https://registry.yarnpkg.com/axios/-/axios-0.18.1.tgz#ff3f0de2e7b5d180e757ad98000f1081b87bcea3" integrity sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g== +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab dependencies: follow-redirects "1.5.10" is-buffer "^2.0.2" -babel-code-frame@^6.22.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" @@ -489,6 +557,25 @@ bl@^1.0.0: readable-stream "^2.3.5" safe-buffer "^5.1.1" +<<<<<<< HEAD +body-parser@1.18.3: + version "1.18.3" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4" + integrity sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ= + dependencies: + bytes "3.0.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "~1.6.3" + iconv-lite "0.4.23" + on-finished "~2.3.0" + qs "6.5.2" + raw-body "2.3.3" + type-is "~1.6.16" + +======= +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab body-parser@1.19.0, body-parser@^1.18.3: version "1.19.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" @@ -553,35 +640,31 @@ bun@^0.0.12: dependencies: readable-stream "~1.0.32" +<<<<<<< HEAD +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= +======= bytebuffer@~5: version "5.0.1" resolved "https://registry.yarnpkg.com/bytebuffer/-/bytebuffer-5.0.1.tgz#582eea4b1a873b6d020a48d58df85f0bba6cfddd" integrity sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0= dependencies: long "~3" +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab bytes@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== -camelcase@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= - -chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -chalk@^2.3.0: +chalk@^2.0.0, chalk@^2.3.0, chalk@^2.4.1: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -602,13 +685,13 @@ cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" -cliui@^3.0.3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= +cliui@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" + string-width "^2.1.1" + strip-ansi "^4.0.0" wrap-ansi "^2.0.0" code-point-at@^1.0.0: @@ -649,6 +732,8 @@ color@^3.1.1: color-convert "^1.9.1" color-string "^1.5.2" +<<<<<<< HEAD +======= colour@~0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/colour/-/colour-0.7.1.tgz#9cb169917ec5d12c0736d3e8685746df1cadf778" @@ -661,6 +746,7 @@ combined-stream@^1.0.6: dependencies: delayed-stream "~1.0.0" +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab commander@^2.12.1: version "2.20.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" @@ -688,17 +774,32 @@ concat-stream@^2.0.0: readable-stream "^3.0.2" typedarray "^0.0.6" -configstore@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-4.0.0.tgz#5933311e95d3687efb592c528b922d9262d227e7" - integrity sha512-CmquAXFBocrzaSM8mtGPMM/HiWmyIpr4CcJl/rgY2uCObZ/S7cKU0silxslqJejl+t/T9HS8E0PUNQD81JGUEQ== +concurrently@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-4.1.1.tgz#42cf84d625163f3f5b2e2262568211ad76e1dbe8" + integrity sha512-48+FE5RJ0qc8azwKv4keVQWlni1hZeSjcWr8shBelOBtBHcKj1aJFM9lHRiSc1x7lq416pkvsqfBMhSRja+Lhw== + dependencies: + chalk "^2.4.1" + date-fns "^1.23.0" + lodash "^4.17.10" + read-pkg "^4.0.1" + rxjs "^6.3.3" + spawn-command "^0.0.2-1" + supports-color "^4.5.0" + tree-kill "^1.1.0" + yargs "^12.0.1" + +configstore@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.0.tgz#37de662c7a49b5fe8dbcf8f6f5818d2d81ed852b" + integrity sha512-eE/hvMs7qw7DlcB5JPRnthmrITuHMmACUJAp89v6PT6iOqzoLS7HRWhBtuHMlhNHo2AhUSA/3Dh1bKNJHcublQ== dependencies: - dot-prop "^4.1.0" + dot-prop "^5.1.0" graceful-fs "^4.1.2" - make-dir "^1.0.0" - unique-string "^1.0.0" - write-file-atomic "^2.0.0" - xdg-basedir "^3.0.0" + make-dir "^3.0.0" + unique-string "^2.0.0" + write-file-atomic "^3.0.0" + xdg-basedir "^4.0.0" console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" @@ -712,6 +813,13 @@ content-disposition@0.5.3: dependencies: safe-buffer "5.1.2" +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + content-type@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" @@ -727,12 +835,17 @@ cookie@0.4.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -cors@^2.8.4, cors@^2.8.5: +cors@^2.8.5: version "2.8.5" resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== @@ -740,15 +853,36 @@ cors@^2.8.4, cors@^2.8.5: object-assign "^4" vary "^1" -crypto-random-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" - integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + +date-and-time@^0.8.0: + version "0.8.1" + resolved "https://registry.yarnpkg.com/date-and-time/-/date-and-time-0.8.1.tgz#cd7d03b06bc68eb16977850a3f7a5ac7c1a643d3" + integrity sha512-p1d0c3HE7bJK4m3/TcNx7EFZcq0Jyvl05TWeESfC5FsJQVRlUrYAL7rB7NEPogx9C3rKsOZJn9PELYo9jVT7mw== -date-and-time@^0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/date-and-time/-/date-and-time-0.6.3.tgz#2daee52df67c28bd93bce862756ac86b68cf4237" - integrity sha512-lcWy3AXDRJOD7MplwZMmNSRM//kZtJaLz4n6D1P5z9wEmZGBKhJRBIr1Xs9KNQJmdXPblvgffynYji4iylUTcA== +date-fns@^1.23.0: + version "1.30.1" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" + integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== + +dateformat@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== debug@2.6.9: version "2.6.9" @@ -757,7 +891,11 @@ debug@2.6.9: dependencies: ms "2.0.0" +<<<<<<< HEAD +debug@3.1.0: +======= debug@=3.1.0: +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== @@ -771,6 +909,9 @@ debug@^3.1.0, debug@^3.2.6: dependencies: ms "^2.1.1" +<<<<<<< HEAD +decamelize@^1.2.0: +======= debug@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" @@ -779,6 +920,7 @@ debug@^4.1.1: ms "^2.1.1" decamelize@^1.1.1: +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -820,7 +962,7 @@ destroy@~1.0.4: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= -detect-libc@^1.0.2, detect-libc@^1.0.3: +detect-libc@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= @@ -837,17 +979,12 @@ diff@^3.2.0: resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== -dom-storage@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/dom-storage/-/dom-storage-2.1.0.tgz#00fb868bc9201357ea243c7bcfd3304c1e34ea39" - integrity sha512-g6RpyWXzl0RR6OTElHKBl7nwnK87GUyZMYC7JWsB/IA73vpqK2K6LT39x4VepLxlSsWBFrPVLnsSR5Jyty0+2Q== - -dot-prop@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== +dot-prop@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.1.0.tgz#bdd8c986a77b83e3fca524e53786df916cabbd8a" + integrity sha512-n1oC6NBF+KM9oVXtjmen4Yo7HyAVWV2UUl50dCYJdw2924K6dX9bf9TTTWaKtYlRn0FEtxG27KS80ayVLixxJA== dependencies: - is-obj "^1.0.0" + is-obj "^2.0.0" duplexify@^3.5.0, duplexify@^3.6.0: version "3.7.1" @@ -859,6 +996,16 @@ duplexify@^3.5.0, duplexify@^3.6.0: readable-stream "^2.0.0" stream-shift "^1.0.0" +duplexify@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.1.tgz#7027dc374f157b122a8ae08c2d3ea4d2d953aa61" + integrity sha512-DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA== + dependencies: + end-of-stream "^1.4.1" + inherits "^2.0.3" + readable-stream "^3.1.1" + stream-shift "^1.0.0" + ecdsa-sig-formatter@1.0.11: version "1.0.11" resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" @@ -881,7 +1028,7 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= -end-of-stream@^1.0.0, end-of-stream@^1.1.0: +end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== @@ -893,6 +1040,13 @@ ent@^2.2.0: resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0= +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + es6-promise@^4.0.3: version "4.2.8" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" @@ -910,7 +1064,7 @@ escape-html@~1.0.3: resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= @@ -935,15 +1089,71 @@ event-target-shim@^5.0.0: resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + expand-template@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== +<<<<<<< HEAD +express@^4.16.4: + version "4.16.4" + resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e" + integrity sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg== +======= express@^4.16.2, express@^4.16.4: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +express@^4.17.1: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== dependencies: accepts "~1.3.7" array-flatten "1.1.1" @@ -976,7 +1186,7 @@ express@^4.16.2, express@^4.16.4: utils-merge "1.0.1" vary "~1.1.2" -extend@^3.0.0, extend@^3.0.1, extend@^3.0.2: +extend@^3.0.1, extend@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== @@ -986,10 +1196,10 @@ fast-text-encoding@^1.0.0: resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.0.tgz#3e5ce8293409cfaa7177a71b9ca84e1b1e6f25ef" integrity sha512-R9bHCvweUxxwkDwhjav5vxpFvdPGlVngtqmx4pIZfSUhM/Q4NiIUHB456BAf+Q1Nwu3HEZYONtu+Rya+af4jiQ== -faye-websocket@0.11.1: - version "0.11.1" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38" - integrity sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg= +faye-websocket@0.11.3: + version "0.11.3" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" + integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== dependencies: websocket-driver ">=0.5.1" @@ -1006,34 +1216,50 @@ finalhandler@~1.1.2: statuses "~1.5.0" unpipe "~1.0.0" -firebase-admin@7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/firebase-admin/-/firebase-admin-7.2.0.tgz#dd7b78ca93014886090f2ae795ad6669f9157500" - integrity sha512-0Ikw5VwnTYk9DBnv73+/wv3eetuSSnNwLQw7x0/NXQ4kUJoGWORcmjFlW9SkBdR/xRXvU3WwTP72S8pkXVhqcQ== +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== dependencies: - "@firebase/app" "^0.3.4" - "@firebase/database" "^0.3.6" + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +firebase-admin@8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/firebase-admin/-/firebase-admin-8.3.0.tgz#8ab935a4f11f0f8983e6ae5d14704d199c00f712" + integrity sha512-ydjTudnWa6T1wZPdb+s4mQJ6NhHxvXkhMMHNV7inI3ZRFUfhovv77M4SDUbMND2SFMYvttyDuj66/EpcPzyXNg== + dependencies: + "@firebase/database" "^0.4.7" "@types/node" "^8.0.53" dicer "^0.3.0" jsonwebtoken "8.1.0" node-forge "0.7.4" optionalDependencies: - "@google-cloud/firestore" "^1.2.0" - "@google-cloud/storage" "^2.3.0" - -firebase-functions@2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/firebase-functions/-/firebase-functions-2.2.1.tgz#f5b6de47860819eb8d41b969c8d6d2c1000dc422" - integrity sha512-k2FA3j8XFGPOGBjgKoBUQQc4Hfqe4PdcG8hfS/RHireW1vQhkplx8XhzaknJNqsBCIoglMFuUsXpuAh9pbhtxw== - dependencies: - "@types/cors" "^2.8.1" - "@types/express" "^4.11.1" - "@types/jsonwebtoken" "^7.2.6" - "@types/lodash" "^4.14.34" - cors "^2.8.4" - express "^4.16.2" - jsonwebtoken "^8.2.1" - lodash "^4.6.1" + "@google-cloud/firestore" "^2.0.0" + "@google-cloud/storage" "^3.0.2" + +firebase-functions@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/firebase-functions/-/firebase-functions-3.2.0.tgz#c4c01ea2f97aafb7aa45776eaff52a0f7f44678e" + integrity sha512-v61CXYFSb53SdSSqwc/QhdBrR+H0bhwxSOIhKIYFFa2m5APUsuj8SrkAOBL2CfOJo3yk7+nuuWOtz16JFaXLxg== + dependencies: + "@types/express" "^4.17.0" + cors "^2.8.5" + express "^4.17.1" + jsonwebtoken "^8.5.1" + lodash "^4.17.14" follow-redirects@1.5.10: version "1.5.10" @@ -1111,7 +1337,7 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" -gaxios@^1.0.2, gaxios@^1.0.4, gaxios@^1.2.1, gaxios@^1.5.0: +gaxios@^1.0.4: version "1.8.4" resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-1.8.4.tgz#e08c34fe93c0a9b67a52b7b9e7a64e6435f9a339" integrity sha512-BoENMnu1Gav18HcpV9IleMPZ9exM+AvUjrAOV4Mzs/vfz2Lu/ABv451iEXByKiMPn2M140uul1txXCg83sAENw== @@ -1121,6 +1347,16 @@ gaxios@^1.0.2, gaxios@^1.0.4, gaxios@^1.2.1, gaxios@^1.5.0: https-proxy-agent "^2.2.1" node-fetch "^2.3.0" +gaxios@^2.0.0, gaxios@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-2.0.1.tgz#2ca1c9eb64c525d852048721316c138dddf40708" + integrity sha512-c1NXovTxkgRJTIgB2FrFmOFg4YIV6N/bAa4f/FZ4jIw13Ql9ya/82x69CswvotJhbV3DiGnlTZwoq2NVXk2Irg== + dependencies: + abort-controller "^3.0.0" + extend "^3.0.2" + https-proxy-agent "^2.2.1" + node-fetch "^2.3.0" + gcp-metadata@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-0.7.0.tgz#6c35dbb52bda32a427bb9c98f54237ddd1b5406f" @@ -1130,35 +1366,54 @@ gcp-metadata@^0.7.0: extend "^3.0.1" retry-axios "0.3.2" -gcp-metadata@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-1.0.0.tgz#5212440229fa099fc2f7c2a5cdcb95575e9b2ca6" - integrity sha512-Q6HrgfrCQeEircnNP3rCcEgiDv7eF9+1B+1MMgpE190+/+0mjQR8PxeOaRgxZWmdDAF9EIryHB9g1moPiw1SbQ== +gcp-metadata@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-2.0.1.tgz#7f4657b0f52af1c9f6f3a1e0f54a24d72bbdf84f" + integrity sha512-nrbLj5O1MurvpLC/doFwzdTfKnmYGDYXlY/v7eQ4tJNVIvQXbOK672J9UFbradbtmuTkyHzjpzD8HD0Djz0LWw== dependencies: - gaxios "^1.0.2" + gaxios "^2.0.0" json-bigint "^0.3.0" -gcs-resumable-upload@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/gcs-resumable-upload/-/gcs-resumable-upload-1.1.0.tgz#2b06f5876dcf60f18a309343f79ed951aff01399" - integrity sha512-uBz7uHqp44xjSDzG3kLbOYZDjxxR/UAGbB47A0cC907W6yd2LkcyFDTHg+bjivkHMwiJlKv4guVWcjPCk2zScg== - dependencies: - abort-controller "^2.0.2" - configstore "^4.0.0" - gaxios "^1.5.0" - google-auth-library "^3.0.0" - pumpify "^1.5.1" +gcs-resumable-upload@^2.0.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/gcs-resumable-upload/-/gcs-resumable-upload-2.2.3.tgz#54127d1d847bdc2be9df69c76a6ee18c94d1f216" + integrity sha512-LNmrW+Yel0gbqZ5NZMMXJTH74SS6nGUP9Uca4pPY9bRIYDHJ5/TFAAaHsxCWf8+tid/4eIdNevrv9PDjPTPTeg== + dependencies: + abort-controller "^3.0.0" + configstore "^5.0.0" + gaxios "^2.0.0" + google-auth-library "^5.0.0" + pumpify "^2.0.0" stream-events "^1.0.4" +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + github-from-package@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4= +<<<<<<< HEAD +glob@^7.1.1: + version "7.1.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== +======= glob@^7.0.5, glob@^7.1.1, glob@^7.1.3: version "7.1.4" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -1180,40 +1435,36 @@ google-auth-library@^2.0.0, google-auth-library@^2.0.1: lru-cache "^5.0.0" semver "^5.5.0" -google-auth-library@^3.0.0, google-auth-library@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-3.1.2.tgz#ff2f88cd5cd2118a57bd3d5ad3c093c8837fc350" - integrity sha512-cDQMzTotwyWMrg5jRO7q0A4TL/3GWBgO7I7q5xGKNiiFf9SmGY/OJ1YsLMgI2MVHHsEGyrqYnbnmV1AE+Z6DnQ== +google-auth-library@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-5.2.0.tgz#fff161ec6ad8630c60b37324f78347e11712512b" + integrity sha512-I2726rgOedQ06HgTvoNvBeRCzy5iFe6z3khwj6ugfRd1b0VHwnTYKl/3t2ytOTo7kKc6KivYIBsCIdZf2ep67g== dependencies: + arrify "^2.0.0" base64-js "^1.3.0" fast-text-encoding "^1.0.0" - gaxios "^1.2.1" - gcp-metadata "^1.0.0" - gtoken "^2.3.2" - https-proxy-agent "^2.2.1" + gaxios "^2.0.0" + gcp-metadata "^2.0.0" + gtoken "^4.0.0" jws "^3.1.5" lru-cache "^5.0.0" - semver "^5.5.0" -google-gax@^0.25.0: - version "0.25.6" - resolved "https://registry.yarnpkg.com/google-gax/-/google-gax-0.25.6.tgz#5ea5c743933ba957da63951bc828aef91fb69340" - integrity sha512-+CVtOSLQt42mwVvJJirhBiAvWsp8zKeb9zW5Wy3wyvb3VG9OugHzZpwvYO9D4yNPPspe7L9CpIs80I5nUJlS8w== +google-gax@^1.1.2: + version "1.3.0" + resolved "https://registry.yarnpkg.com/google-gax/-/google-gax-1.3.0.tgz#e9b39cbba532acae87f3813189921572aa7a1225" + integrity sha512-35MlgFOxtjEzb730V/Ku1ToOCt795bxXYuQHEZ9kFUnvWKKe98Njf6XtHW41Zr4Vm2e87Rt0MrU9H0iwgM0BZQ== dependencies: - "@grpc/grpc-js" "^0.3.0" - "@grpc/proto-loader" "^0.4.0" + "@grpc/grpc-js" "^0.5.2" + "@grpc/proto-loader" "^0.5.1" duplexify "^3.6.0" - google-auth-library "^3.0.0" - google-proto-files "^0.20.0" - grpc "^1.16.0" - grpc-gcp "^0.1.1" + google-auth-library "^5.0.0" is-stream-ended "^0.1.4" lodash.at "^4.6.0" lodash.has "^4.5.2" protobufjs "^6.8.8" retry-request "^4.0.0" semver "^6.0.0" - walkdir "^0.3.2" + walkdir "^0.4.0" google-p12-pem@^1.0.0: version "1.0.4" @@ -1223,14 +1474,12 @@ google-p12-pem@^1.0.0: node-forge "^0.8.0" pify "^4.0.0" -google-proto-files@^0.20.0: - version "0.20.0" - resolved "https://registry.yarnpkg.com/google-proto-files/-/google-proto-files-0.20.0.tgz#dfcd1635a0c3f00f49ca057462cf369108ff4b5e" - integrity sha512-ORU+XhOeDv/UPtnCYLkO1ItmfhRCRPR3ZoeVQ7GfVzEs7PVitPIhsYlY5ZzG8XXnsdmtK27ENurfQ1jhAWpZHg== +google-p12-pem@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-2.0.1.tgz#509f9415e50c9bdf76de8150a825f9e97cba2c57" + integrity sha512-6h6x+eBX3k+IDSe/c8dVYmn8Mzr1mUcmKC9MdUSwaBkFAXlqBEnwFWmSFgGC+tcqtsLn73BDP/vUNWEehf1Rww== dependencies: - "@google-cloud/promisify" "^0.4.0" - protobufjs "^6.8.0" - walkdir "^0.3.0" + node-forge "^0.8.0" googleapis-common@^0.4.0: version "0.4.0" @@ -1252,6 +1501,14 @@ googleapis@^35.0.0: google-auth-library "^2.0.0" googleapis-common "^0.4.0" +<<<<<<< HEAD +graceful-fs@^4.1.2, graceful-fs@^4.1.6: + version "4.1.15" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" + integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== + +gtoken@^2.3.0: +======= graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: version "4.2.1" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.1.tgz#1c1f0c364882c868f5bff6512146328336a11b1d" @@ -1277,6 +1534,7 @@ grpc@^1.16.0: protobufjs "^5.0.3" gtoken@^2.3.0, gtoken@^2.3.2: +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab version "2.3.3" resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-2.3.3.tgz#8a7fe155c5ce0c4b71c886cfb282a9060d94a641" integrity sha512-EaB49bu/TCoNeQjhCYKI/CurooBKkGxIqFHsWABW0b25fobBYVTMe84A8EBVVZhl8emiUdNypil9huMOTmyAnw== @@ -1287,12 +1545,20 @@ gtoken@^2.3.0, gtoken@^2.3.2: mime "^2.2.0" pify "^4.0.0" -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= +gtoken@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-4.0.0.tgz#42b63a935a03a61eedf0ec14f74f6875bad627bd" + integrity sha512-XaRCfHJxhj06LmnWNBzVTAr85NfAErq0W1oabkdqwbq3uL/QTB1kyvGog361Uu2FMG/8e3115sIy/97Rnd4GjQ== dependencies: - ansi-regex "^2.0.0" + gaxios "^2.0.0" + google-p12-pem "^2.0.0" + jws "^3.1.5" + mime "^2.2.0" + +has-flag@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= has-flag@^3.0.0: version "3.0.0" @@ -1311,6 +1577,24 @@ hash-stream-validation@^0.2.1: dependencies: through2 "^2.0.0" +<<<<<<< HEAD +hosted-git-info@^2.1.4: + version "2.8.4" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.4.tgz#44119abaf4bc64692a16ace34700fed9c03e2546" + integrity sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ== + +http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +======= +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab http-errors@1.7.2: version "1.7.2" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" @@ -1333,10 +1617,25 @@ http-errors@~1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" +<<<<<<< HEAD +http-parser-js@>=0.4.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.0.tgz#d65edbede84349d0dc30320815a15d39cc3cbbd8" + integrity sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w== +======= "http-parser-js@>=0.4.0 <0.4.11": version "0.4.10" resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4" integrity sha1-ksnBN0w1CF912zWexWzCV8u5P6Q= +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab + +http-proxy-agent@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" + integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== + dependencies: + agent-base "4" + debug "3.1.0" https-proxy-agent@^2.2.1: version "2.2.2" @@ -1346,20 +1645,24 @@ https-proxy-agent@^2.2.1: agent-base "^4.3.0" debug "^3.1.0" +<<<<<<< HEAD +iconv-lite@0.4.23: + version "0.4.23" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" + integrity sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@0.4.24: +======= iconv-lite@0.4.24, iconv-lite@^0.4.4: +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" -ignore-walk@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" - integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== - dependencies: - minimatch "^3.0.4" - imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -1383,21 +1686,31 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= +inherits@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== ipaddr.js@1.9.0: version "1.9.0" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65" integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA== +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + is-arrayish@^0.3.1: version "0.3.2" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" @@ -1420,16 +1733,26 @@ is-fullwidth-code-point@^2.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= -is-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== is-stream-ended@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-stream-ended/-/is-stream-ended-0.1.4.tgz#f50224e95e06bce0e356d440a4827cd35b267eda" integrity sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw== +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-typedarray@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" @@ -1440,12 +1763,17 @@ isarray@~1.0.0: resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= -js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.13.0: +js-yaml@^3.13.1: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== @@ -1460,6 +1788,11 @@ json-bigint@^0.3.0: dependencies: bignumber.js "^7.0.0" +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -1483,7 +1816,7 @@ jsonwebtoken@8.1.0: ms "^2.0.0" xtend "^4.0.1" -jsonwebtoken@^8.2.1: +jsonwebtoken@^8.5.1: version "8.5.1" resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== @@ -1516,12 +1849,20 @@ jws@^3.1.4, jws@^3.1.5, jws@^3.2.2: jwa "^1.4.1" safe-buffer "^5.0.1" -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== + dependencies: + invert-kv "^2.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== dependencies: - invert-kv "^1.0.0" + p-locate "^3.0.0" + path-exists "^3.0.0" lodash.at@^4.6.0: version "4.6.0" @@ -1533,11 +1874,6 @@ lodash.camelcase@^4.3.0: resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= -lodash.clone@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clone/-/lodash.clone-4.5.0.tgz#195870450f5a13192478df4bc3d23d2dea1907b6" - integrity sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y= - lodash.has@^4.5.2: version "4.5.2" resolved "https://registry.yarnpkg.com/lodash.has/-/lodash.has-4.5.2.tgz#d19f4dc1095058cccbe2b0cdf4ee0fe4aa37c862" @@ -1573,17 +1909,24 @@ lodash.isstring@^4.0.1: resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= +<<<<<<< HEAD +======= lodash.merge@^4.6.1: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab lodash.once@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= +<<<<<<< HEAD +lodash@^4.17.10, lodash@^4.17.14: +======= lodash@^4.17.14, lodash@^4.6.1: +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -1602,11 +1945,6 @@ long@^4.0.0: resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== -long@~3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b" - integrity sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s= - lru-cache@^5.0.0: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -1614,18 +1952,34 @@ lru-cache@^5.0.0: dependencies: yallist "^3.0.2" -make-dir@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== +make-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.0.tgz#1b5f39f6b9270ed33f9f054c5c0f84304989f801" + integrity sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw== dependencies: - pify "^3.0.0" + semver "^6.0.0" + +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" @@ -1653,6 +2007,11 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + mime@^2.2.0: version "2.4.4" resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" @@ -1663,7 +2022,7 @@ mimic-fn@^1.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== -mimic-fn@^2.1.0: +mimic-fn@^2.0.0, mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== @@ -1717,11 +2076,21 @@ ms@2.0.0: resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= +<<<<<<< HEAD +ms@2.1.1, ms@^2.0.0, ms@^2.1.1: +======= ms@2.1.1: +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab version "2.1.1" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== +<<<<<<< HEAD +nan@^2.13.2: + version "2.13.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.13.2.tgz#f51dc7ae66ba7d5d55e1e6d4d8092e802c9aefe7" + integrity sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw== +======= ms@^2.0.0, ms@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" @@ -1731,12 +2100,19 @@ nan@^2.13.2: version "2.14.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab napi-build-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.1.tgz#1381a0f92c39d66bf19852e7873432fc2123e508" integrity sha512-boQj1WFgQH3v4clhu3mTNfP+vOBxorDlE8EKiMjUlLG3C4qAESnn9AxIOkFgTR2c9LtzNjPrjS60cT27ZKBhaA== +<<<<<<< HEAD +negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + integrity sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk= +======= needle@^2.2.1: version "2.4.0" resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" @@ -1750,6 +2126,17 @@ negotiator@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== node-abi@^2.7.0: version "2.10.0" @@ -1773,6 +2160,8 @@ node-forge@^0.8.0: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.8.5.tgz#57906f07614dc72762c84cef442f427c0e1b86ee" integrity sha512-vFMQIWt+J/7FLNyKouZ9TazT74PRV3wgv9UT4cRjC8BffxFbKXkgIWR42URCPSnHm/QDz6BOlb2Q0U4+VQT67Q== +<<<<<<< HEAD +======= node-pre-gyp@^0.13.0: version "0.13.0" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.13.0.tgz#df9ab7b68dd6498137717838e4f92a33fc9daa42" @@ -1789,33 +2178,37 @@ node-pre-gyp@^0.13.0: semver "^5.3.0" tar "^4" +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab noop-logger@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" integrity sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI= -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== dependencies: - abbrev "1" - osenv "^0.1.4" - -npm-bundled@^1.0.1: - version "1.0.6" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" - integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" +<<<<<<< HEAD +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= +======= npm-packlist@^1.1.6: version "1.4.4" resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.4.tgz#866224233850ac534b63d1a6e76050092b5d2f44" integrity sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw== +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" + path-key "^2.0.0" -npmlog@^4.0.1, npmlog@^4.0.2, npmlog@^4.1.2: +npmlog@^4.0.1, npmlog@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -1863,46 +2256,86 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" -optjs@~3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/optjs/-/optjs-3.2.2.tgz#69a6ce89c442a44403141ad2f9b370bd5bb6f4ee" - integrity sha1-aabOicRCpEQDFBrS+bNwvVu29O4= - -os-homedir@^1.0.0, os-homedir@^1.0.1: +os-homedir@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= +os-locale@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== dependencies: - lcid "^1.0.0" + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" -os-tmpdir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= -osenv@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" + integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" + p-try "^2.0.0" +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +<<<<<<< HEAD +parseurl@~1.3.2, parseurl@~1.3.3: +======= parseurl@~1.3.3: +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" @@ -1918,7 +2351,7 @@ pify@^3.0.0: resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= -pify@^4.0.0, pify@^4.0.1: +pify@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== @@ -1950,17 +2383,7 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -protobufjs@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-5.0.3.tgz#e4dfe9fb67c90b2630d15868249bcc4961467a17" - integrity sha512-55Kcx1MhPZX0zTbVosMQEO5R6/rikNXd9b6RQK4KSPcrSIIwoXTtebIczUrXlwaSrbz4x8XUVThGPob1n8I4QA== - dependencies: - ascli "~1" - bytebuffer "~5" - glob "^7.0.5" - yargs "^3.10.0" - -protobufjs@^6.8.0, protobufjs@^6.8.6, protobufjs@^6.8.8: +protobufjs@^6.8.6, protobufjs@^6.8.8: version "6.8.8" resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.8.8.tgz#c8b4f1282fd7a90e6f5b109ed11c84af82908e7c" integrity sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw== @@ -1979,7 +2402,11 @@ protobufjs@^6.8.0, protobufjs@^6.8.6, protobufjs@^6.8.8: "@types/node" "^10.1.0" long "^4.0.0" +<<<<<<< HEAD +proxy-addr@~2.0.4, proxy-addr@~2.0.5: +======= proxy-addr@~2.0.5: +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab version "2.0.5" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" integrity sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ== @@ -1995,7 +2422,7 @@ pump@^1.0.0: end-of-stream "^1.1.0" once "^1.3.1" -pump@^2.0.0, pump@^2.0.1: +pump@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== @@ -2003,24 +2430,53 @@ pump@^2.0.0, pump@^2.0.1: end-of-stream "^1.1.0" once "^1.3.1" -pumpify@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: - duplexify "^3.6.0" + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-2.0.0.tgz#975519e5a9890ae0fb4724274e3fec97e43a30b6" + integrity sha512-ieN9HmpFPt4J4U4qnjN4BxrnqpPPXJyp3qFErxfwBtFOec6ewpIHdS2eu3TkmGW6S+RzFGEOGpm5ih/X/onRPQ== + dependencies: + duplexify "^4.1.1" inherits "^2.0.3" - pump "^2.0.0" + pump "^3.0.0" qs@6.7.0, qs@^6.5.2: version "6.7.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== +<<<<<<< HEAD +range-parser@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4= + +======= +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== +<<<<<<< HEAD + +raw-body@2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" + integrity sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw== + dependencies: + bytes "3.0.0" + http-errors "1.6.3" + iconv-lite "0.4.23" + unpipe "1.0.0" +======= +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab raw-body@2.4.0: version "2.4.0" @@ -2042,6 +2498,15 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" +read-pkg@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-4.0.1.tgz#963625378f3e1c4d48c85872b5a6ec7d5d093237" + integrity sha1-ljYlN48+HE1IyFhytabsfV0JMjc= + dependencies: + normalize-package-data "^2.3.2" + parse-json "^4.0.0" + pify "^3.0.0" + "readable-stream@2 || 3", readable-stream@^3.0.2: version "3.4.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" @@ -2064,6 +2529,15 @@ readable-stream@^2.0.0, readable-stream@^2.0.6, readable-stream@^2.3.0, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" +readable-stream@^3.1.1: + version "3.4.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" + integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + readable-stream@~1.0.32: version "1.0.34" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" @@ -2074,6 +2548,23 @@ readable-stream@~1.0.32: isarray "0.0.1" string_decoder "~0.10.x" +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= + +resolve@^1.10.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" + integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== + dependencies: + path-parse "^1.0.6" + resolve@^1.3.2: version "1.12.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" @@ -2102,12 +2593,12 @@ retry-request@^4.0.0: debug "^4.1.1" through2 "^3.0.1" -rimraf@^2.6.1: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== +rxjs@^6.3.3: + version "6.5.2" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.2.tgz#2e35ce815cd46d84d02a209fb4e5921e051dbec7" + integrity sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg== dependencies: - glob "^7.1.3" + tslib "^1.9.0" safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" @@ -2124,10 +2615,10 @@ safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sax@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== +"semver@2 || 3 || 4 || 5": + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: version "5.7.0" @@ -2158,6 +2649,42 @@ send@0.17.1: range-parser "~1.2.1" statuses "~1.5.0" +<<<<<<< HEAD +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +serve-static@1.13.2: + version "1.13.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" + integrity sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw== +======= +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + serve-static@1.14.1: version "1.14.1" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" @@ -2168,7 +2695,7 @@ serve-static@1.14.1: parseurl "~1.3.3" send "0.17.1" -set-blocking@~2.0.0: +set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= @@ -2194,6 +2721,18 @@ sharp@^0.22.1: tar "^4.4.8" tunnel-agent "^0.6.0" +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" @@ -2234,24 +2773,61 @@ snakeize@^0.1.0: resolved "https://registry.yarnpkg.com/snakeize/-/snakeize-0.1.0.tgz#10c088d8b58eb076b3229bb5a04e232ce126422d" integrity sha1-EMCI2LWOsHazIpu1oE4jLOEmQi0= -split-array-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/split-array-stream/-/split-array-stream-2.0.0.tgz#85a4f8bfe14421d7bca7f33a6d176d0c076a53b1" - integrity sha512-hmMswlVY91WvGMxs0k8MRgq8zb2mSen4FmDNc5AFiTWtrBpdZN6nwD6kROVe4vNL+ywrvbCKsWVCnEd4riELIg== +spawn-command@^0.0.2-1: + version "0.0.2-1" + resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2-1.tgz#62f5e9466981c1b796dc5929937e11c9c6921bd0" + integrity sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A= + +spdx-correct@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" + integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== dependencies: - is-stream-ended "^0.1.4" + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" + integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" + integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= +<<<<<<< HEAD +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: +======= "statuses@>= 1.5.0 < 2", statuses@~1.5.0: +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= +<<<<<<< HEAD +statuses@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" + integrity sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew== + +stream-events@^1.0.1, stream-events@^1.0.4, stream-events@^1.0.5: +======= stream-events@^1.0.1, stream-events@^1.0.4: +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab version "1.0.5" resolved "https://registry.yarnpkg.com/stream-events/-/stream-events-1.0.5.tgz#bbc898ec4df33a4902d892333d47da9bf1c406d5" integrity sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg== @@ -2277,7 +2853,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2": +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -2334,6 +2910,11 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0: dependencies: ansi-regex "^4.1.0" +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" @@ -2344,10 +2925,12 @@ stubs@^3.0.0: resolved "https://registry.yarnpkg.com/stubs/-/stubs-3.0.0.tgz#e8d2ba1fa9c90570303c030b6900f7d5f89abe5b" integrity sha1-6NK6H6nJBXAwPAMLaQD31fiavls= -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= +supports-color@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" + integrity sha1-vnoN5ITexcXN34s9WRJQRJEvY1s= + dependencies: + has-flag "^2.0.0" supports-color@^5.3.0: version "5.5.0" @@ -2379,10 +2962,17 @@ tar-stream@^1.1.2: to-buffer "^1.1.1" xtend "^4.0.0" +<<<<<<< HEAD +tar@^4.4.8: + version "4.4.8" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" + integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ== +======= tar@^4, tar@^4.4.8: version "4.4.10" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1" integrity sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA== +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab dependencies: chownr "^1.1.1" fs-minipass "^1.2.5" @@ -2392,13 +2982,15 @@ tar@^4, tar@^4.4.8: safe-buffer "^5.1.2" yallist "^3.0.3" -teeny-request@^3.11.3: - version "3.11.3" - resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-3.11.3.tgz#335c629f7645e5d6599362df2f3230c4cbc23a55" - integrity sha512-CKncqSF7sH6p4rzCgkb/z/Pcos5efl0DmolzvlqRQUNcpRIruOhY9+T1FsIlyEbfWd7MsFpodROOwHYh2BaXzw== +teeny-request@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-5.2.1.tgz#a6394db8359b87e64e47eeb2fbf34a65c9a751ff" + integrity sha512-gCVm5EV3z0p/yZOKyeBOFOpSXuxdIs3foeWDWb/foKMBejK18w40L0k0UMd/ZrGkOH+gxodjqpL8KK6x3haYCQ== dependencies: + http-proxy-agent "^2.1.0" https-proxy-agent "^2.2.1" node-fetch "^2.2.0" + stream-events "^1.0.5" uuid "^3.3.2" through2@^2.0.0: @@ -2426,11 +3018,31 @@ toidentifier@1.0.0: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== +<<<<<<< HEAD +tree-kill@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.1.tgz#5398f374e2f292b9dcc7b2e71e30a5c3bb6c743a" + integrity sha512-4hjqbObwlh2dLyW4tcz0Ymw0ggoaVDMveUB9w8kFSQScdRLo0gxO9J7WFcUBo+W3C1TLdFIEwNOWebgZZ0RH9Q== + +tslib@1.10.0, tslib@^1.9.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" + integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== + +tslib@^1.8.0, tslib@^1.8.1: +======= tslib@1.9.3: +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab version "1.9.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== +<<<<<<< HEAD +tslint@^5.12.0: + version "5.18.0" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.18.0.tgz#f61a6ddcf372344ac5e41708095bbf043a147ac6" + integrity sha512-Q3kXkuDEijQ37nXZZLKErssQVnwCV/+23gFEMROi8IlbaBG6tXqLPQJ5Wjcyt/yHPKBC+hD5SzuGaMora+ZS6w== +======= tslib@^1.8.0, tslib@^1.8.1: version "1.10.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" @@ -2440,14 +3052,15 @@ tslint@5.15.0: version "5.15.0" resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.15.0.tgz#6ffb180986d63afa1e531feb2a134dbf961e27d3" integrity sha512-6bIEujKR21/3nyeoX2uBnE8s+tMXCQXhqMmaIPJpHmXJoBJPTLcI7/VHRtUwMhnLVdwLqqY3zmd8Dxqa5CVdJA== +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab dependencies: - babel-code-frame "^6.22.0" + "@babel/code-frame" "^7.0.0" builtin-modules "^1.1.1" chalk "^2.3.0" commander "^2.12.1" diff "^3.2.0" glob "^7.1.1" - js-yaml "^3.13.0" + js-yaml "^3.13.1" minimatch "^3.0.4" mkdirp "^0.5.1" resolve "^1.3.2" @@ -2469,7 +3082,11 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" +<<<<<<< HEAD +type-is@~1.6.16, type-is@~1.6.17, type-is@~1.6.18: +======= type-is@~1.6.17, type-is@~1.6.18: +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== @@ -2477,22 +3094,29 @@ type-is@~1.6.17, type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.2.2.tgz#fe8101c46aa123f8353523ebdcf5730c2ae493e5" - integrity sha512-VCj5UiSyHBjwfYacmDuc/NOk4QQixbE+Wn7MFJuS0nRuPQbof132Pw4u53dm264O8LPc2MVsc7RJNml5szurkg== +typescript@^3.2.2: + version "3.5.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977" + integrity sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g== -unique-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" - integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== dependencies: - crypto-random-string "^1.0.0" + crypto-random-string "^2.0.0" universalify@^0.1.0: version "0.1.2" @@ -2524,15 +3148,23 @@ uuid@^3.2.1, uuid@^3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + vary@^1, vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= -walkdir@^0.3.0, walkdir@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/walkdir/-/walkdir-0.3.2.tgz#ac8437a288c295656848ebc19981ebc677a5f590" - integrity sha512-0Twghia4Z5wDGDYWURlhZmI47GvERMCsXIu0QZWVVZyW9ZjpbbZvD9Zy9M6cWiQQRRbAcYajIyKNavaZZDt1Uw== +walkdir@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/walkdir/-/walkdir-0.4.1.tgz#dc119f83f4421df52e3061e514228a2db20afa39" + integrity sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ== websocket-driver@>=0.5.1: version "0.7.3" @@ -2548,11 +3180,23 @@ websocket-extensions@>=0.1.1: resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + which-pm-runs@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= +which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + wide-align@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" @@ -2560,11 +3204,6 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" -window-size@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876" - integrity sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY= - wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" @@ -2587,49 +3226,65 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= +<<<<<<< HEAD +write-file-atomic@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.0.tgz#1b64dbbf77cb58fd09056963d63e62667ab4fb21" + integrity sha512-EIgkf60l2oWsffja2Sf2AL384dx328c0B+cIYPTQq5q2rOYuDV00/iPFBOUiDKKwKMOhkymH8AidPaRvzfxY+Q== +======= write-file-atomic@^2.0.0: version "2.4.3" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== +>>>>>>> d55ca2f3e5bfe3804c17b503bdd525590db082ab dependencies: - graceful-fs "^4.1.11" imurmurhash "^0.1.4" + is-typedarray "^1.0.0" signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" -xdg-basedir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" - integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= - -xmlhttprequest@1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" - integrity sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw= +xdg-basedir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" + integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -y18n@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= +"y18n@^3.2.1 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== -yargs@^3.10.0: - version "3.32.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.32.0.tgz#03088e9ebf9e756b69751611d2a5ef591482c995" - integrity sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU= - dependencies: - camelcase "^2.0.1" - cliui "^3.0.3" - decamelize "^1.1.1" - os-locale "^1.4.0" - string-width "^1.0.1" - window-size "^0.1.4" - y18n "^3.2.0" +yargs-parser@^11.1.1: + version "11.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" + integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^12.0.1: + version "12.0.5" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" + integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== + dependencies: + cliui "^4.0.0" + decamelize "^1.2.0" + find-up "^3.0.0" + get-caller-file "^1.0.1" + os-locale "^3.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1 || ^4.0.0" + yargs-parser "^11.1.1" diff --git a/package.json b/package.json index 9bd4f7df7c..2ac3ae30cd 100644 --- a/package.json +++ b/package.json @@ -44,8 +44,8 @@ "eslint-plugin-jsx-a11y": "6.1.2", "eslint-plugin-react": "7.12.4", "file-loader": "2.0.0", - "final-form": "4.10.0", - "final-form-arrays": "^1.1.0", + "final-form": "4.18.5", + "final-form-arrays": "^3.0.1", "final-form-calculate": "^1.3.1", "firebase": "5.8.1", "fork-ts-checker-webpack-plugin-alt": "0.4.14", @@ -81,8 +81,8 @@ "react-calendar": "^2.19.0", "react-dev-utils": "^7.0.3", "react-dom": "16.8.4", - "react-final-form": "3.6.6", - "react-final-form-arrays": "^1.0.6", + "react-final-form": "6.3.0", + "react-final-form-arrays": "^3.1.1", "react-firebase-file-uploader": "2.4.2", "react-flags-select": "^1.1.10", "react-ga": "^2.5.7", diff --git a/src/components/Form/Fields.tsx b/src/components/Form/Fields.tsx index b07747f0cd..dab1ddd451 100644 --- a/src/components/Form/Fields.tsx +++ b/src/components/Form/Fields.tsx @@ -6,7 +6,7 @@ import Calendar, { CalendarProps } from 'react-calendar' // any props can be passed to field and down to child component // input and meta props come from react field render props and will be // picked up by typing -type FieldProps = FieldRenderProps & { children?: React.ReactNode } +type FieldProps = FieldRenderProps & { children?: React.ReactNode } export interface IFieldProps extends FieldProps { // additional fields intending to pass down disabled?: boolean diff --git a/src/components/Tags/TagsSelect.tsx b/src/components/Tags/TagsSelect.tsx index cd1070696b..a617057132 100644 --- a/src/components/Tags/TagsSelect.tsx +++ b/src/components/Tags/TagsSelect.tsx @@ -8,7 +8,7 @@ import { SelectStyles } from '../Form/Select.field' import { FieldContainer } from '../Form/elements' // we include props from react-final-form fields so it can be used as a custom field component -interface IProps extends FieldRenderProps { +interface IProps extends FieldRenderProps { value?: ISelectedTags onChange: (val: ISelectedTags) => void category: TagCategory | undefined diff --git a/src/mocks/db.mock.tsx b/src/mocks/db.mock.tsx new file mode 100644 index 0000000000..cb5722a753 --- /dev/null +++ b/src/mocks/db.mock.tsx @@ -0,0 +1,32 @@ +import { IDbDoc } from 'src/models/common.models' + +// helper methods used in generation of mock db data +export const MOCK_DB_META = (id?: string) => { + const d1 = randomDate(new Date(2012, 0, 1), new Date()) + const d2 = randomDate(d1, new Date()) + const meta: IDbDoc = { + _created: d1.toISOString(), + _modified: d2.toISOString(), + _createdBy: 'MockUser', + _deleted: false, + _id: id ? id : randomID(), + } + return meta +} + +// generate a random date between start and end +function randomDate(start: Date, end: Date) { + return new Date( + start.getTime() + Math.random() * (end.getTime() - start.getTime()), + ) +} + +// function used to generate random ID in same manner as firestore +function randomID() { + const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' + let autoId = '' + for (let i = 0; i < 20; i++) { + autoId += chars.charAt(Math.floor(Math.random() * chars.length)) + } + return autoId +} diff --git a/src/mocks/discussions.mock.tsx b/src/mocks/discussions.mock.tsx index 7680497324..4fa1c38dee 100644 --- a/src/mocks/discussions.mock.tsx +++ b/src/mocks/discussions.mock.tsx @@ -1,8 +1,8 @@ -import { toTimestamp } from 'src/utils/helpers' import { IDiscussionPost, IDiscussionComment, } from 'src/models/discussions.models' +import { MOCK_DB_META } from './db.mock' /* This file exports DISCUSSION_QUESTIONS_MOCK and DISCUSSION_COMMENTS_MOCK @@ -11,11 +11,8 @@ import { // mocks generated from template, note the Date fields are populated as string so require reformatting export const DISCUSSION_QUESTION_MOCKS: IDiscussionPost[] = [ { - _id: '5c6d7a294475199744afe2d1', - _created: toTimestamp('Tuesday, February 14, 2017 1:33 PM'), - _modified: toTimestamp('Monday, August 7, 2017 5:43 AM'), - _deleted: false, - _lastResponse: toTimestamp('Saturday, August 27, 2016 6:54 AM'), + ...MOCK_DB_META(), + _lastResponse: new Date('Saturday, August 27, 2016 6:54 AM').toISOString(), _commentCount: 5, _viewCount: 6231, _usefulCount: 2, @@ -35,11 +32,8 @@ export const DISCUSSION_QUESTION_MOCKS: IDiscussionPost[] = [ type: 'discussionQuestion', }, { - _id: '5c6d7a292ca7a215c97237ff', - _created: toTimestamp('Sunday, December 17, 2017 1:23 PM'), - _modified: toTimestamp('Wednesday, May 28, 2014 8:53 PM'), - _deleted: false, - _lastResponse: toTimestamp('Wednesday, July 4, 2018 5:51 PM'), + ...MOCK_DB_META('5c6d7a292ca7a215c97237ff'), + _lastResponse: new Date('Wednesday, July 4, 2018 5:51 PM').toISOString(), _commentCount: 2, _viewCount: 16211, _usefulCount: 4, @@ -59,11 +53,10 @@ export const DISCUSSION_QUESTION_MOCKS: IDiscussionPost[] = [ type: 'discussionQuestion', }, { - _id: '5c6d7a29755aaf19aa3821ca', - _created: toTimestamp('Wednesday, March 9, 2016 6:56 PM'), - _modified: toTimestamp('Tuesday, May 1, 2018 12:33 AM'), - _deleted: false, - _lastResponse: toTimestamp('Saturday, December 23, 2017 3:40 PM'), + ...MOCK_DB_META('5c6d7a29755aaf19aa3821ca'), + _lastResponse: new Date( + 'Saturday, December 23, 2017 3:40 PM', + ).toISOString(), _commentCount: 22, _viewCount: 7810, _usefulCount: 4, @@ -82,11 +75,10 @@ export const DISCUSSION_QUESTION_MOCKS: IDiscussionPost[] = [ type: 'discussionQuestion', }, { - _id: '5c6d7a295bbae94e85259607', - _created: toTimestamp('Wednesday, October 15, 2014 7:33 AM'), - _modified: toTimestamp('Friday, January 2, 2015 12:59 AM'), - _deleted: false, - _lastResponse: toTimestamp('Wednesday, November 26, 2014 9:57 AM'), + ...MOCK_DB_META('5c6d7a295bbae94e85259607'), + _lastResponse: new Date( + 'Wednesday, November 26, 2014 9:57 AM', + ).toISOString(), _commentCount: 0, _viewCount: 1318, _usefulCount: 1, @@ -105,11 +97,8 @@ export const DISCUSSION_QUESTION_MOCKS: IDiscussionPost[] = [ type: 'discussionQuestion', }, { - _id: '5c6d7a2956736681732af496', - _created: toTimestamp('Thursday, December 10, 2015 7:30 AM'), - _modified: toTimestamp('Sunday, December 7, 2014 8:02 PM'), - _deleted: false, - _lastResponse: toTimestamp('Saturday, May 31, 2014 4:52 AM'), + ...MOCK_DB_META('5c6d7a2956736681732af496'), + _lastResponse: new Date('Saturday, May 31, 2014 4:52 AM').toISOString(), _commentCount: 1, _viewCount: 20422, _usefulCount: 2, @@ -128,11 +117,8 @@ export const DISCUSSION_QUESTION_MOCKS: IDiscussionPost[] = [ type: 'discussionQuestion', }, { - _id: '5c6d7a29c46abd230bbeb32f', - _created: toTimestamp('Monday, February 10, 2014 9:42 PM'), - _modified: toTimestamp('Friday, September 9, 2016 7:35 AM'), - _deleted: false, - _lastResponse: toTimestamp('Sunday, September 6, 2015 11:28 PM'), + ...MOCK_DB_META('5c6d7a29c46abd230bbeb32f'), + _lastResponse: new Date('Sunday, September 6, 2015 11:28 PM').toISOString(), _commentCount: 24, _viewCount: 1387, _usefulCount: 6, @@ -152,11 +138,8 @@ export const DISCUSSION_QUESTION_MOCKS: IDiscussionPost[] = [ type: 'discussionQuestion', }, { - _id: '5c6d7a2928acc4726f1b7780', - _created: toTimestamp('Monday, December 10, 2018 8:15 PM'), - _modified: toTimestamp('Tuesday, September 16, 2014 10:37 PM'), - _deleted: false, - _lastResponse: toTimestamp('Tuesday, September 1, 2015 2:40 AM'), + ...MOCK_DB_META('5c6d7a2928acc4726f1b7780'), + _lastResponse: new Date('Tuesday, September 1, 2015 2:40 AM').toISOString(), _commentCount: 4, _viewCount: 10149, _usefulCount: 3, @@ -176,11 +159,8 @@ export const DISCUSSION_QUESTION_MOCKS: IDiscussionPost[] = [ type: 'discussionQuestion', }, { - _id: '5c6d7a297fee346b98283041', - _created: toTimestamp('Monday, July 9, 2018 5:13 PM'), - _modified: toTimestamp('Sunday, January 17, 2016 3:46 PM'), - _deleted: false, - _lastResponse: toTimestamp('Tuesday, December 2, 2014 10:48 AM'), + ...MOCK_DB_META('5c6d7a297fee346b98283041'), + _lastResponse: new Date('Tuesday, December 2, 2014 10:48 AM').toISOString(), _commentCount: 16, _viewCount: 24936, _usefulCount: 5, @@ -200,11 +180,8 @@ export const DISCUSSION_QUESTION_MOCKS: IDiscussionPost[] = [ type: 'discussionQuestion', }, { - _id: '5c6d7a299f70798b222a3b1f', - _created: toTimestamp('Wednesday, July 26, 2017 4:49 PM'), - _modified: toTimestamp('Sunday, April 15, 2018 8:27 AM'), - _deleted: false, - _lastResponse: toTimestamp('Tuesday, March 10, 2015 8:06 AM'), + ...MOCK_DB_META('5c6d7a299f70798b222a3b1f'), + _lastResponse: new Date('Tuesday, March 10, 2015 8:06 AM').toISOString(), _commentCount: 11, _viewCount: 23933, _usefulCount: 0, @@ -227,12 +204,9 @@ export const DISCUSSION_QUESTION_MOCKS: IDiscussionPost[] = [ export const DISCUSSION_COMMENT_MOCKS: IDiscussionComment[] = [ { - _id: '5c6dad39f669db9d335153d2', + ...MOCK_DB_META('5c6dad39f669db9d335153d2'), _discussionID: '5c6d7a294475199744afe2d1', - _created: toTimestamp('Thursday, July 13, 2017 2:40 AM'), _createdBy: 'http://i.pravatar.cc/212', - _modified: toTimestamp('Wednesday, December 5, 2018 6:55 AM'), - _deleted: false, replies: [], repliesTo: '', comment: @@ -240,28 +214,19 @@ export const DISCUSSION_COMMENT_MOCKS: IDiscussionComment[] = [ type: 'discussionComment', }, { - _id: '5c6dad39134eaab99e1f56cb', + ...MOCK_DB_META('5c6dad39134eaab99e1f56cb'), _discussionID: '5c6d7a294475199744afe2d1', - _created: toTimestamp('Sunday, October 1, 2017 8:14 PM'), _createdBy: 'http://i.pravatar.cc/217', - _modified: toTimestamp('Thursday, August 17, 2017 12:37 AM'), - _deleted: false, replies: [ { - _id: '5c6dadd6efb4c060265a127a', + ...MOCK_DB_META('5c6dadd6efb4c060265a127a'), _discussionID: '5c6d7a294475199744afe2d1', - _created: toTimestamp('Friday, October 28, 2016 6:52 PM'), _createdBy: 'http://i.pravatar.cc/215', - _modified: toTimestamp('Tuesday, September 1, 2015 2:52 PM'), - _deleted: false, replies: [ { - _id: '5c6dae0e66a1d753e4f71312', + ...MOCK_DB_META('5c6dae0e66a1d753e4f71312'), _discussionID: '5c6d7a294475199744afe2d1', - _created: toTimestamp('Wednesday, December 27, 2017 5:34 AM'), _createdBy: 'http://i.pravatar.cc/212', - _modified: toTimestamp('Saturday, January 20, 2018 2:14 AM'), - _deleted: false, replies: [], repliesTo: '5c6dadd6efb4c060265a127a', comment: @@ -281,12 +246,9 @@ export const DISCUSSION_COMMENT_MOCKS: IDiscussionComment[] = [ type: 'discussionComment', }, { - _id: '5c6dad39b88053eec7edf6ba', + ...MOCK_DB_META('5c6dad39b88053eec7edf6ba'), _discussionID: '5c6d7a294475199744afe2d1', - _created: toTimestamp('Friday, April 14, 2017 7:50 PM'), _createdBy: 'http://i.pravatar.cc/218', - _modified: toTimestamp('Saturday, December 1, 2018 1:50 AM'), - _deleted: false, replies: [], repliesTo: '', comment: diff --git a/src/mocks/events.mock.tsx b/src/mocks/events.mock.tsx index c129056b1a..a18291514d 100644 --- a/src/mocks/events.mock.tsx +++ b/src/mocks/events.mock.tsx @@ -1,5 +1,5 @@ import { IEventFilters, IEvent } from 'src/models/events.models' -import { toTimestamp } from 'src/utils/helpers' +import { MOCK_DB_META } from './db.mock' const d = new Date() export const EVENT_FILTERS: IEventFilters = { @@ -50,19 +50,15 @@ export const EVENTS: IEvent[] = [ countryCode: 'NL', name: 'Eindhoven', }, - _id: 'event1', + ...MOCK_DB_META('event1'), description: 'The family moved to New York City in 1940. The next year Eisuke was transferred from New York City', host: 'PlasticNL', image: 'https://picsum.photos/200/300/?random', - date: toTimestamp('Friday, January 2, 2015 12:59 AM'), + date: new Date('Friday, January 2, 2015 12:59 AM').toISOString(), type: 'Workshops', slug: 'open-workshop-and-free-lunch---brighton', tags: {}, - _deleted: false, - _createdBy: '123', - _created: toTimestamp('Friday, January 2, 2015 12:59 AM'), - _modified: toTimestamp('Friday, January 2, 2015 12:59 AM'), url: 'http://fakeurl.com', }, { @@ -74,19 +70,15 @@ export const EVENTS: IEvent[] = [ countryCode: 'UK', name: 'Brighton', }, - _id: 'event2', + ...MOCK_DB_META('event2'), description: 'In meteorology, a cloud is an aerosol ocnsisting of a visible mass of rain dropletx, frozen crystals, or other particles suspended in the atmospher', host: 'BeachCleans', image: 'https://picsum.photos/150/100/?random', - date: toTimestamp('Friday, January 2, 2015 12:59 AM'), + date: new Date('Friday, January 2, 2015 12:59 AM').toISOString(), type: 'Workshops', slug: 'open-workshop-and-free-lunch---brighton', tags: {}, - _deleted: false, - _createdBy: '123', - _created: toTimestamp('Friday, January 2, 2015 12:59 AM'), - _modified: toTimestamp('Friday, January 2, 2015 12:59 AM'), url: 'http://fakeurl.com', }, ] diff --git a/src/mocks/howto.mock.tsx b/src/mocks/howto.mock.tsx index b4b8931528..1dfe3126a5 100644 --- a/src/mocks/howto.mock.tsx +++ b/src/mocks/howto.mock.tsx @@ -1,6 +1,6 @@ import { IHowto } from '../models/howto.models' -import { toTimestamp } from 'src/utils/helpers' import { IUploadedFileMeta } from 'src/stores/storage' +import { MOCK_DB_META } from './db.mock' const exampleUploadImage: IUploadedFileMeta = { downloadUrl: 'http://placekitten.com/g/400/250', @@ -34,11 +34,7 @@ export const HOWTO_MOCK: IHowto[] = [ ], tags: {}, files: [], - _id: 'howTo1', - _deleted: false, - _createdBy: '123', - _created: toTimestamp('Friday, January 2, 2015 12:59 AM'), - _modified: toTimestamp('Friday, January 2, 2015 12:59 AM'), + ...MOCK_DB_META('howTo1'), }, { cover_image: exampleUploadImage, @@ -61,11 +57,7 @@ export const HOWTO_MOCK: IHowto[] = [ ], tags: {}, files: [], - _id: 'howTo2', - _deleted: false, - _createdBy: '123', - _created: toTimestamp('Friday, January 2, 2015 12:59 AM'), - _modified: toTimestamp('Friday, January 2, 2015 12:59 AM'), + ...MOCK_DB_META('howTo2'), }, { cover_image: exampleUploadImage, @@ -88,10 +80,6 @@ export const HOWTO_MOCK: IHowto[] = [ ], tags: {}, files: [], - _id: 'howTo3', - _deleted: false, - _createdBy: '123', - _created: toTimestamp('Friday, January 2, 2015 12:59 AM'), - _modified: toTimestamp('Friday, January 2, 2015 12:59 AM'), + ...MOCK_DB_META('howTo3'), }, ] diff --git a/src/mocks/tags.mock.tsx b/src/mocks/tags.mock.tsx index dc11f4fe35..95583e973c 100644 --- a/src/mocks/tags.mock.tsx +++ b/src/mocks/tags.mock.tsx @@ -1,157 +1,97 @@ import { ITag } from 'src/models/tags.model' -import { toTimestamp } from 'src/utils/helpers' +import { MOCK_DB_META } from './db.mock' export const TAGS_MOCK: ITag[] = [ // how-to { - _id: 'DJN99ErXz8FHy035YdMO', + ...MOCK_DB_META('DJN99ErXz8FHy035YdMO'), image: '', label: 'extrusion', categories: ['how-to'], - _deleted: false, - _createdBy: 'admin', - _created: toTimestamp(new Date()), - _modified: toTimestamp(new Date()), }, { - _id: 'fLUiS1PS9WEKSRlTe8Cs', + ...MOCK_DB_META('fLUiS1PS9WEKSRlTe8Cs'), image: '', label: 'shredder', categories: ['how-to'], - _deleted: false, - _createdBy: 'admin', - _created: toTimestamp(new Date()), - _modified: toTimestamp(new Date()), }, { - _id: 'JVpo3tdEqbk8G787hAZH', + ...MOCK_DB_META('JVpo3tdEqbk8G787hAZH'), image: '', label: 'injection', categories: ['how-to'], - _deleted: false, - _createdBy: 'admin', - _created: toTimestamp(new Date()), - _modified: toTimestamp(new Date()), }, { - _id: 'kuJqlMsnpfr5VR4BZ1ML', + ...MOCK_DB_META('kuJqlMsnpfr5VR4BZ1ML'), image: '', label: 'compression', categories: ['how-to'], - _deleted: false, - _createdBy: 'admin', - _created: toTimestamp(new Date()), - _modified: toTimestamp(new Date()), }, { - _id: 'jUtS7pVbv7DXoQyV13RR', + ...MOCK_DB_META('jUtS7pVbv7DXoQyV13RR'), image: '', label: 'sorting', categories: ['how-to'], - _deleted: false, - _createdBy: 'admin', - _created: toTimestamp(new Date()), - _modified: toTimestamp(new Date()), }, { - _id: 'gsGdG7sE88cgzZxlvfVs', + ...MOCK_DB_META('gsGdG7sE88cgzZxlvfVs'), image: '', label: 'melting', categories: ['how-to'], - _deleted: false, - _createdBy: 'admin', - _created: toTimestamp(new Date()), - _modified: toTimestamp(new Date()), }, // events { - _id: '1zfteiFXNDbDnlE3Incg', + ...MOCK_DB_META('1zfteiFXNDbDnlE3Incg'), image: '', label: 'cleanup', categories: ['event'], - _deleted: false, - _createdBy: 'admin', - _created: toTimestamp(new Date()), - _modified: toTimestamp(new Date()), }, { - _id: '9RlNW5tLD3BxMhL7keFN', + ...MOCK_DB_META('9RlNW5tLD3BxMhL7keFN'), image: '', label: 'workshop', categories: ['event'], - _deleted: false, - _createdBy: 'admin', - _created: toTimestamp(new Date()), - _modified: toTimestamp(new Date()), }, { - _id: 'T7bZy8OhN7K4OWJ09wSX', + ...MOCK_DB_META('T7bZy8OhN7K4OWJ09wSX'), image: '', label: 'exhibition', categories: ['event'], - _deleted: false, - _createdBy: 'admin', - _created: toTimestamp(new Date()), - _modified: toTimestamp(new Date()), }, { - _id: 'cd41vHdBh1M2YtPlYcYR', + ...MOCK_DB_META('cd41vHdBh1M2YtPlYcYR'), image: '', label: 'presentation', categories: ['event'], - _deleted: false, - _createdBy: 'admin', - _created: toTimestamp(new Date()), - _modified: toTimestamp(new Date()), }, { - _id: 'IM8aJW5LrQDK2Mby8rYJ', + ...MOCK_DB_META('IM8aJW5LrQDK2Mby8rYJ'), image: '', label: 'screening', categories: ['event'], - _deleted: false, - _createdBy: 'admin', - _created: toTimestamp(new Date()), - _modified: toTimestamp(new Date()), }, { - _id: 'kVSRJqFt52hi8RHW5wjb', + ...MOCK_DB_META('kVSRJqFt52hi8RHW5wjb'), image: '', label: 'meet & greet', categories: ['event'], - _deleted: false, - _createdBy: 'admin', - _created: toTimestamp(new Date()), - _modified: toTimestamp(new Date()), }, { - _id: '7yhssOmZqiihTBXK2cxU', + ...MOCK_DB_META('7yhssOmZqiihTBXK2cxU'), image: '', label: 'brainstorm session', categories: ['event'], - _deleted: false, - _createdBy: 'admin', - _created: toTimestamp(new Date()), - _modified: toTimestamp(new Date()), }, { - _id: '5nXtB6mHdffDurEDLt6Q', + ...MOCK_DB_META('5nXtB6mHdffDurEDLt6Q'), image: '', label: 'open day', categories: ['event'], - _deleted: false, - _createdBy: 'admin', - _created: toTimestamp(new Date()), - _modified: toTimestamp(new Date()), }, { - _id: 'Qr2sOd3aM4CvZsSfFkPn', + ...MOCK_DB_META('Qr2sOd3aM4CvZsSfFkPn'), image: '', label: 'protest', categories: ['event'], - _deleted: false, - _createdBy: 'admin', - _created: toTimestamp(new Date()), - _modified: toTimestamp(new Date()), }, ] diff --git a/src/mocks/user.mock.tsx b/src/mocks/user.mock.tsx index 2b78215b6d..588f81bb2f 100644 --- a/src/mocks/user.mock.tsx +++ b/src/mocks/user.mock.tsx @@ -1,15 +1,11 @@ import { IUser } from 'src/models/user.models' -import { toTimestamp } from 'src/utils/helpers' +import { MOCK_DB_META } from './db.mock' export const MOCK_USER: IUser = { verified: true, userName: 'chris-m-clarke', - _id: 'chris-m-clarke', + ...MOCK_DB_META(), _authID: '123', - _deleted: false, - _createdBy: '123', - _created: toTimestamp('Friday, January 2, 2015 12:59 AM'), - _modified: toTimestamp('Friday, January 2, 2015 12:59 AM'), DHSite_id: 70134, DHSite_mention_name: 'chris-m-clarke', country: '', diff --git a/src/models/common.models.tsx b/src/models/common.models.tsx index 631985c139..1c04f33a1e 100644 --- a/src/models/common.models.tsx +++ b/src/models/common.models.tsx @@ -1,15 +1,44 @@ -import { firestore } from 'firebase/app' - -// empty interface to allow referencing Timestamps without firestore -export interface ITimestamp extends firestore.Timestamp {} - // by default all documents should be populated with the following fields export interface IDbDoc { _id: string - _created: firestore.Timestamp - _modified: firestore.Timestamp + _created: ISODateString + _modified: ISODateString _deleted: boolean _createdBy: userId } +// A reminder that dates should be saved in the ISOString format +// i.e. new Date().toISOString() => 2011-10-05T14:48:00.000Z +// This is more consistent than others and allows better querying +export type ISODateString = string + +// Another reminder, that user ids are saved in string format type userId = string + +export type IDBEndpoint = + | 'v2_howtos' + | 'v2_users' + | 'v2_discussions' + | 'v2_tags' + | 'v2_events' + | 'v2_mappins' + +/************************************************************************ + * Deprecates - legacy interfaces used. Currently retained to troubleshoot + * upgrades, can remove once database working in production site + ***************************************************************************/ +type IDBEndpointV1 = + | 'howtosV1' + | 'users' + | 'discussions' + | 'tagsV1' + | 'eventsV1' + | 'mapPinsV1' + +// interface IDbDocV1 { +// _id: string +// _created: firestore.Timestamp +// _modified: firestore.Timestamp +// _deleted: boolean +// _createdBy: userId +// } diff --git a/src/models/discussions.models.tsx b/src/models/discussions.models.tsx index af7c0572f5..f615fa1ccd 100644 --- a/src/models/discussions.models.tsx +++ b/src/models/discussions.models.tsx @@ -1,5 +1,4 @@ -import { firestore } from 'firebase/app' -import { IDbDoc } from './common.models' +import { IDbDoc, ISODateString } from './common.models' export interface IPostFormInput { title: string @@ -8,7 +7,7 @@ export interface IPostFormInput { } export interface IDiscussionPost extends IPostFormInput, IDbDoc { - _lastResponse: firestore.Timestamp | null + _lastResponse?: ISODateString _commentCount: number _viewCount: number _usefulCount: number diff --git a/src/models/events.models.tsx b/src/models/events.models.tsx index e0a11a6514..50ad424fa8 100644 --- a/src/models/events.models.tsx +++ b/src/models/events.models.tsx @@ -1,11 +1,10 @@ import { ISelectedTags } from './tags.model' -import { firestore } from 'firebase/app' -import { IDbDoc } from './common.models' +import { IDbDoc, ISODateString } from './common.models' export interface IEvent extends IEventFormInput, IDbDoc { description: string host: string - date: firestore.Timestamp | Date + date: ISODateString type: string image: string tags: ISelectedTags @@ -36,8 +35,8 @@ export interface IEventFormInput { title: string location: IEventLocation // note, tags will remain optional as if populated {} will be stripped by db (firestore) - tags: ISelectedTags + tags?: ISelectedTags // note, datepicker passes simple yyyy-mm-dd string format for dates - date: string | firestore.Timestamp | Date + date: ISODateString url: string } diff --git a/src/models/howto.models.tsx b/src/models/howto.models.tsx index 4db8cf36be..6a74bef47b 100644 --- a/src/models/howto.models.tsx +++ b/src/models/howto.models.tsx @@ -25,6 +25,7 @@ export interface IHowToStepFormInput { images: IUploadedFileMeta[] | IConvertedFileMeta[] title: string text: string + caption?: string _animationKey?: string } diff --git a/src/models/user.models.tsx b/src/models/user.models.tsx index 17c2866596..b49ae72bd5 100644 --- a/src/models/user.models.tsx +++ b/src/models/user.models.tsx @@ -1,4 +1,4 @@ -import { IDbDoc, ITimestamp } from './common.models' +import { IDbDoc, ISODateString } from './common.models' import { ILocation } from 'src/components/LocationSearch/LocationSearch' export interface IUserState { @@ -30,7 +30,7 @@ export interface IUser extends IDbDoc { country?: string links?: ILink[] location?: ILocation - year?: ITimestamp + year?: ISODateString } export type UserRole = 'super-admin' | 'subscriber' diff --git a/src/pages/Discussions/PostCreate/index.tsx b/src/pages/Discussions/PostCreate/index.tsx index ccce269347..fe2f9ad435 100644 --- a/src/pages/Discussions/PostCreate/index.tsx +++ b/src/pages/Discussions/PostCreate/index.tsx @@ -49,7 +49,7 @@ export class PostCreate extends React.PureComponent { } } - public EditorField: React.ComponentType = ({ + public EditorField: React.ComponentType> = ({ input, meta, ...rest diff --git a/src/pages/Discussions/PostList/ListRow/index.tsx b/src/pages/Discussions/PostList/ListRow/index.tsx index 4215b413c2..d353a2986e 100644 --- a/src/pages/Discussions/PostList/ListRow/index.tsx +++ b/src/pages/Discussions/PostList/ListRow/index.tsx @@ -64,7 +64,7 @@ export default class ListRow extends React.Component { {/*firebaseResourceId={'post-' + post._id + '-viewCount'}/>*/} {post._viewCount} - {this.durationSincePosted(post._created.toDate())} + {this.durationSincePosted(new Date(post._created))} {post.type === 'discussionQuestion' ? : } diff --git a/src/pages/Events/Content/EventsCreate/EventsCreate.tsx b/src/pages/Events/Content/EventsCreate/EventsCreate.tsx index b66f0dd1e6..31f44e6f79 100644 --- a/src/pages/Events/Content/EventsCreate/EventsCreate.tsx +++ b/src/pages/Events/Content/EventsCreate/EventsCreate.tsx @@ -60,7 +60,7 @@ export class EventsCreate extends React.Component { } public validateTitle = async (value: any) => { - return this.store.validateTitle(value, 'eventsV1') + return this.store.validateTitle(value, 'v2_events') } public validateUrl = async (value: any) => { diff --git a/src/pages/Events/Content/EventsList/EventsList.tsx b/src/pages/Events/Content/EventsList/EventsList.tsx index d89d2a7183..7eeb43c548 100644 --- a/src/pages/Events/Content/EventsList/EventsList.tsx +++ b/src/pages/Events/Content/EventsList/EventsList.tsx @@ -10,7 +10,6 @@ import { colors } from 'src/themes/styled.theme' import Icon from 'src/components/Icons' import { TagDisplay } from 'src/components/Tags/TagDisplay/TagDisplay' import Heading from 'src/components/Heading' -import { toDate } from 'src/utils/helpers' interface IProps { upcomingEvents: IEvent[] @@ -60,10 +59,10 @@ export class EventsList extends React.Component { - {this.getMonth(event.date as Date)} + {this.getMonth(new Date(event.date))} - {this.getDay(event.date as Date)} + {this.getDay(new Date(event.date))} diff --git a/src/pages/Howto/Content/CreateHowto/CreateHowto.tsx b/src/pages/Howto/Content/CreateHowto/CreateHowto.tsx index ba17177344..31b5b1205f 100644 --- a/src/pages/Howto/Content/CreateHowto/CreateHowto.tsx +++ b/src/pages/Howto/Content/CreateHowto/CreateHowto.tsx @@ -29,7 +29,6 @@ interface IState { formValues: IHowtoFormInput formSaved: boolean _docID: string - _uploadPath: string _toDocsList: boolean showSubmitModal?: boolean } @@ -79,7 +78,6 @@ export class CreateHowto extends React.Component { formValues: { ...TEMPLATE.INITIAL_VALUES, id: docID } as IHowtoFormInput, formSaved: false, _docID: docID, - _uploadPath: `uploads/documentation/${docID}`, _toDocsList: false, } } @@ -97,7 +95,7 @@ export class CreateHowto extends React.Component { } public validateTitle = async (value: any) => { - return this.store.validateTitle(value, 'howtosV1') + return this.store.validateTitle(value, 'v2_howtos') } // automatically generate the slug when the title changes diff --git a/src/pages/Howto/Content/CreateHowto/Template.tsx b/src/pages/Howto/Content/CreateHowto/Template.tsx index 269ae6707a..3bcd42f3cb 100644 --- a/src/pages/Howto/Content/CreateHowto/Template.tsx +++ b/src/pages/Howto/Content/CreateHowto/Template.tsx @@ -7,18 +7,21 @@ const INITIAL_VALUES: Partial = { title: '', text: '', images: [], + caption: '', _animationKey: 'unique1', }, { title: '', text: '', images: [], + caption: '', _animationKey: 'unique2', }, { title: '', text: '', images: [], + caption: '', _animationKey: 'unique3', }, ], diff --git a/src/pages/Howto/Content/Howto/HowtoDescription/HowtoDescription.tsx b/src/pages/Howto/Content/Howto/HowtoDescription/HowtoDescription.tsx index 3d6dc59f2c..84ea022624 100644 --- a/src/pages/Howto/Content/Howto/HowtoDescription/HowtoDescription.tsx +++ b/src/pages/Howto/Content/Howto/HowtoDescription/HowtoDescription.tsx @@ -42,7 +42,7 @@ export default class HowtoDescription extends React.PureComponent {  |  - {this.durationSincePosted(howto._created.toDate())} + {this.durationSincePosted(new Date(howto._created))} {howto.title} diff --git a/src/pages/Settings/content/SettingsEdit.form.tsx b/src/pages/Settings/content/SettingsEdit.form.tsx index 2819adb2fc..ceccbbd4c8 100644 --- a/src/pages/Settings/content/SettingsEdit.form.tsx +++ b/src/pages/Settings/content/SettingsEdit.form.tsx @@ -28,9 +28,9 @@ import 'leaflet/dist/leaflet.css' import { LocationSearchField } from 'src/components/Form/LocationSearch.field' import { FieldArray } from 'react-final-form-arrays' import { Link } from './Link.field' -import { timestampToYear } from 'src/utils/helpers' import { Icon } from 'src/components/Icons' import { toJS } from 'mobx' +import { ISODateString } from 'src/models/common.models' interface IFormValues extends Partial { // form values are simply subset of user profile fields @@ -130,14 +130,8 @@ export class SettingsEditForm extends React.Component { this.setState({ readOnly: true, showNotification: true }) } - public displayYear(dateOrTmstp) { - // if date comes from db, it will be formated in firebase.Timestamp whereas if it comes from calendar (user modifications) it's a Date object - // this fn check the type of the date and return a year in format YYYY - if (dateOrTmstp instanceof Date && !isNaN(dateOrTmstp.valueOf())) { - return dateOrTmstp.getFullYear() - } else { - return timestampToYear(dateOrTmstp.seconds) - } + public displayYear(date: ISODateString) { + return new Date(date).getFullYear() } public onLocationChange(v) { diff --git a/src/pages/User/content/UserPage/UserPage.tsx b/src/pages/User/content/UserPage/UserPage.tsx index 109645e2fc..f350987800 100644 --- a/src/pages/User/content/UserPage/UserPage.tsx +++ b/src/pages/User/content/UserPage/UserPage.tsx @@ -14,7 +14,6 @@ import LinearProgress from '@material-ui/core/LinearProgress' import styled from 'styled-components' import theme from 'src/themes/styled.theme' import Icon from 'src/components/Icons' -import { timestampToYear } from 'src/utils/helpers' interface IRouterCustomParams { id: string @@ -168,7 +167,7 @@ export class UserPage extends React.Component< {user.year && ( - Since {timestampToYear(user.year.seconds)} + Since {new Date(user.year).getFullYear()} )} diff --git a/src/stores/Discussions/discussions.store.tsx b/src/stores/Discussions/discussions.store.tsx index ec52225de1..5e4e8ba281 100644 --- a/src/stores/Discussions/discussions.store.tsx +++ b/src/stores/Discussions/discussions.store.tsx @@ -4,10 +4,11 @@ import { IDiscussionPost, IPostFormInput, } from 'src/models/discussions.models' -import { Database, IDBEndpoints } from '../database' +import { Database } from '../database' import { stripSpecialCharacters } from 'src/utils/helpers' import { ModuleStore } from '../common/module.store' import { Subscription } from 'rxjs' +import { IDBEndpoint } from 'src/models/common.models' export class DiscussionsStore extends ModuleStore { private allDiscussionComments$ = new Subscription() @@ -21,12 +22,11 @@ export class DiscussionsStore extends ModuleStore { // when initiating, discussions will be fetched via common method in module.store.ts // keep results of allDocs and activeDoc in sync with local varialbes constructor() { - super('discussions') + super('v2_discussions') this.allDocs$.subscribe(docs => (this.allDiscussions = docs)) this.activeDoc$.subscribe(doc => (this.activeDiscussion = doc)) this._addCommentsSubscription() } - componentDidMount() {} @action public async setActiveDiscussion(slug: string) { @@ -40,7 +40,7 @@ export class DiscussionsStore extends ModuleStore { repliesToId?: string, ) { // cast endpoing to IDB endpoints as no way in typescript ot handle regex for subcollection path - const endpoint = `discussions/${discussionID}/comments` as IDBEndpoints + const endpoint = `discussions/${discussionID}/comments` as IDBEndpoint const values: IDiscussionComment = { ...Database.generateDocMeta(endpoint), comment, @@ -78,10 +78,9 @@ export class DiscussionsStore extends ModuleStore { private async _createNewDiscussion(values: IPostFormInput) { console.log('adding discussion', values) const discussion: IDiscussionPost = { - ...Database.generateDocMeta('discussions'), + ...Database.generateDocMeta('v2_discussions'), _commentCount: 0, _last3Comments: [], - _lastResponse: null, _usefulCount: 0, _viewCount: 0, content: values.content, @@ -91,7 +90,7 @@ export class DiscussionsStore extends ModuleStore { title: values.title, type: 'discussionQuestion', } - await Database.checkSlugUnique('discussions', discussion.slug) + await Database.checkSlugUnique('v2_discussions', discussion.slug) return discussion } @@ -101,7 +100,7 @@ export class DiscussionsStore extends ModuleStore { this.allDiscussionComments$.unsubscribe() this.activeDoc$.subscribe(doc => { if (doc) { - const endpoint = `discussions/${doc._id}/comments` as IDBEndpoints + const endpoint = `discussions/${doc._id}/comments` as IDBEndpoint this.allDiscussionComments$ = Database.getCollection( endpoint, ).subscribe(docs => { diff --git a/src/stores/Events/events.store.tsx b/src/stores/Events/events.store.tsx index 6b7a8b8ea1..86351ac485 100644 --- a/src/stores/Events/events.store.tsx +++ b/src/stores/Events/events.store.tsx @@ -3,7 +3,6 @@ import { IEvent, IEventFormInput } from 'src/models/events.models' import { ModuleStore } from '../common/module.store' import { Database } from '../database' import Filters from 'src/utils/filters' -import { toDate } from 'src/utils/helpers' export class EventStore extends ModuleStore { // observables are data variables that can be subscribed to and change over time @@ -26,14 +25,9 @@ export class EventStore extends ModuleStore { } constructor() { - super('eventsV1') + super('v2_events') this.allDocs$.subscribe((docs: IEvent[]) => { - // convert firestore timestamp back to date objects and sort - this.allEvents = [ - ...docs - .map(doc => ({ ...doc, date: toDate(doc.date) })) - .sort((a, b) => (a.date > b.date ? 1 : -1)), - ] + this.allEvents = docs.sort((a, b) => (a.date > b.date ? 1 : -1)) }) } @@ -42,12 +36,10 @@ export class EventStore extends ModuleStore { console.log('values', values) try { const event: IEventFormInput = { - ...Database.generateDocMeta('eventsV1'), + ...Database.generateDocMeta('v2_events'), ...values, - // convert string yyyy-mm-dd format to timestamp - date: Database.generateTimestamp( - new Date(Date.parse(values.date as string)), - ), + // convert string yyyy-mm-dd format to time string + date: new Date(Date.parse(values.date as string)).toISOString(), } console.log('populating database', event) this.updateDatabase(event) @@ -65,9 +57,9 @@ export class EventStore extends ModuleStore { } public generateID = () => { - return Database.generateDocId('eventsV1') + return Database.generateDocId('v2_events') } private updateDatabase(event: IEventFormInput) { - return Database.setDoc(`eventsV1/${event._id}`, event) + return Database.setDoc(`v2_events/${event._id}`, event) } } diff --git a/src/stores/Howto/howto.store.tsx b/src/stores/Howto/howto.store.tsx index 216fe9f145..bf79df2b29 100644 --- a/src/stores/Howto/howto.store.tsx +++ b/src/stores/Howto/howto.store.tsx @@ -23,7 +23,7 @@ export class HowtoStore extends ModuleStore { constructor() { // call constructor on common ModuleStore (with db endpoint), which automatically fetches all docs at // the given endpoint and emits changes as data is retrieved from cache and live collection - super('howtosV1') + super('v2_howtos') this.allDocs$.subscribe(docs => { this.allHowtos = docs as IHowto[] }) @@ -31,15 +31,13 @@ export class HowtoStore extends ModuleStore { @action public async getDocBySlug(slug: string) { - const ref = afs - .collection('howtosV1') - .where('slug', '==', slug) - .limit(1) - const collection = await ref.get() - const activeHowto = - collection.docs.length > 0 - ? (collection.docs[0].data() as IHowto) - : undefined + const collection = await Database.queryCollection( + 'v2_howtos', + 'slug', + '==', + slug, + ) + const activeHowto = collection.length > 0 ? collection[0] : undefined this.activeHowto = activeHowto return activeHowto } @@ -49,7 +47,7 @@ export class HowtoStore extends ModuleStore { } public generateID = () => { - return Database.generateDocId('howtosV1') + return Database.generateDocId('v2_howtos') } public async uploadHowTo(values: IHowtoFormInput, id: string) { @@ -71,7 +69,7 @@ export class HowtoStore extends ModuleStore { ) this.updateUploadStatus('Files') // populate DB - const meta = Database.generateDocMeta('howtosV1', id) + const meta = Database.generateDocMeta('v2_howtos', id) // redefine howTo based on processing done above (should match stronger typing) const howTo: IHowto = { ...values, @@ -116,7 +114,7 @@ export class HowtoStore extends ModuleStore { data = file.photoData } return Storage.uploadFile( - `uploads/howtosV1/${id}`, + `uploads/v2_howtos/${id}`, file.name, data, file.type, @@ -134,7 +132,7 @@ export class HowtoStore extends ModuleStore { } private updateDatabase(howTo: IHowto) { - return Database.setDoc(`howtosV1/${howTo._id}`, howTo) + return Database.setDoc(`v2_howtos/${howTo._id}`, howTo) } } diff --git a/src/stores/Tags/tags.store.tsx b/src/stores/Tags/tags.store.tsx index 2f28104ea7..838a937314 100644 --- a/src/stores/Tags/tags.store.tsx +++ b/src/stores/Tags/tags.store.tsx @@ -19,9 +19,8 @@ export class TagsStore extends ModuleStore { } constructor() { - super('tagsV1') + super('v2_tags') this.allDocs$.subscribe((docs: ITag[]) => { - // convert firestore timestamp back to date objects and sort this.allTags = docs.sort((a, b) => (a.label > b.label ? 1 : -1)) this.allTagsByKey = arrayToJson(docs, '_id') this._filterTags() @@ -44,7 +43,7 @@ export class TagsStore extends ModuleStore { const batch = afs.batch() TAGS_MOCK.forEach(tag => { if (tag._id) { - const ref = afs.doc(`tagsV1/${tag._id}`) + const ref = afs.doc(`v2_tags/${tag._id}`) batch.set(ref, tag) } }) diff --git a/src/stores/User/user.store.ts b/src/stores/User/user.store.ts index 29d4e40a6d..7686b682fe 100644 --- a/src/stores/User/user.store.ts +++ b/src/stores/User/user.store.ts @@ -68,14 +68,14 @@ export class UserStore { } public async getUserProfile(userName: string) { - const ref = await afs.doc(`users/${userName}`).get() + const ref = await afs.doc(`v2_users/${userName}`).get() return ref.exists ? (ref.data() as IUser) : null } public async updateUserProfile(values: Partial) { const user = this.user as IUser const update = { ...user, ...values } - await Database.setDoc(`users/${user.userName}`, update) + await Database.setDoc(`v2_users/${user.userName}`, update) this.updateUser(update) } @@ -133,12 +133,12 @@ export class UserStore { private async _createUserProfile(userName: string) { const authUser = auth.currentUser as firebase.User const user: IUser = { - ...Database.generateDocMeta('users', userName), + ...Database.generateDocMeta('v2_users', userName), _authID: authUser.uid, userName, verified: false, } - await Database.setDoc(`users/${userName}`, user) + await Database.setDoc(`v2_users${userName}`, user) this.updateUser(user) } diff --git a/src/stores/common/module.store.ts b/src/stores/common/module.store.ts index 221135be4d..f756f617c3 100644 --- a/src/stores/common/module.store.ts +++ b/src/stores/common/module.store.ts @@ -1,8 +1,9 @@ import { BehaviorSubject, Subscription } from 'rxjs' -import { Database, IDBEndpoints } from '../database' +import { Database } from '../database' import { stripSpecialCharacters } from 'src/utils/helpers' import isUrl from 'is-url' import { TagCategory } from 'src/models/tags.model' +import { IDBEndpoint } from 'src/models/common.models' /* The module store contains common methods used across modules that access specfic collections on the database @@ -16,7 +17,7 @@ export class ModuleStore { // when a module store is initiated automatically load the docs in the collection // this can be subscribed to in individual stores - constructor(public basePath: IDBEndpoints) { + constructor(public basePath: IDBEndpoint) { this.getCollection(basePath) } @@ -26,7 +27,7 @@ export class ModuleStore { // when accessing a collection want to call the database getCollection method which // efficiently checks the cache first and emits any subsequent updates - public getCollection(path: IDBEndpoints) { + public getCollection(path: IDBEndpoint) { this.allDocs$.next([]) this.activeCollectionSubscription.unsubscribe() this.activeCollectionSubscription = Database.getCollection(path).subscribe( @@ -54,7 +55,7 @@ export class ModuleStore { * Data Validation Methods * **************************************************************************/ - public isSlugUnique = async (slug: string, endpoint: IDBEndpoints) => { + public isSlugUnique = async (slug: string, endpoint: IDBEndpoint) => { try { await Database.checkSlugUnique(endpoint, slug) } catch (e) { @@ -62,7 +63,7 @@ export class ModuleStore { } } - public validateTitle = async (value: any, endpoint: IDBEndpoints) => { + public validateTitle = async (value: any, endpoint: IDBEndpoint) => { if (value) { const error = this.isSlugUnique( stripSpecialCharacters(value).toLowerCase(), diff --git a/src/stores/database.tsx b/src/stores/database.tsx index 3b5d9d42ed..4fba34ddd1 100644 --- a/src/stores/database.tsx +++ b/src/stores/database.tsx @@ -6,7 +6,7 @@ import { Subject } from 'rxjs' import { afs } from 'src/utils/firebase' -import { IDbDoc } from 'src/models/common.models' +import { IDbDoc, IDBEndpoint } from 'src/models/common.models' // additional imports for typings import { firestore, auth } from 'firebase/app' export class Database { @@ -15,7 +15,7 @@ export class Database { /****************************************************************************** */ // get a group of docs. returns an observable, first pulling from local cache and then searching for updates - public static getCollection(path: IDBEndpoints) { + public static getCollection(path: IDBEndpoint) { const collection$ = new Subject() this._emitCollectionUpdates(path, collection$) return collection$ @@ -33,7 +33,7 @@ export class Database { doc$.next(cached) afs.doc(path).onSnapshot(updateSnapshot => { const update = updateSnapshot.data() as IDbDoc - if (update._modified.seconds > cached._modified.seconds) { + if (update._modified > cached._modified) { doc$.next(update) } }) @@ -56,8 +56,10 @@ export class Database { }) } - public static async queryCollection( - collectionPath: IDBEndpoints, + // find all docs in collection matching criteria + // if no docs are found returns an empty array + public static async queryCollection( + collectionPath: IDBEndpoint, field: string, operation: firestore.WhereFilterOp, value: string, @@ -66,7 +68,8 @@ export class Database { .collection(collectionPath) .where(field, operation, value) .get() - return data.docs.map(doc => doc.data()) + console.log('data', data) + return data.empty ? [] : data.docs.map(doc => doc.data() as T) } /****************************************************************************** * @@ -74,15 +77,12 @@ export class Database { /****************************************************************************** */ // instantiate a blank document to generate an id - public static generateDocId(collectionPath: IDBEndpoints) { + public static generateDocId(collectionPath: IDBEndpoint) { return afs.collection(collectionPath).doc().id } - public static generateTimestamp(date?: Date) { - return firestore.Timestamp.fromDate(date ? date : new Date()) - } public static async checkSlugUnique( - collectionPath: IDBEndpoints, + collectionPath: IDBEndpoint, slug: string, ) { const matches = await this.queryCollection( @@ -98,13 +98,13 @@ export class Database { } } // creates standard set of meta fields applied to all docs - public static generateDocMeta(collectionPath: IDBEndpoints, docID?: string) { + public static generateDocMeta(collectionPath: IDBEndpoint, docID?: string) { const user = auth().currentUser const meta: IDbDoc = { - _created: this.generateTimestamp(), + _created: new Date().toISOString(), _deleted: false, _id: docID ? docID : this.generateDocId(collectionPath), - _modified: this.generateTimestamp(), + _modified: new Date().toISOString(), _createdBy: user ? (user.displayName as string) : 'anonymous', } return meta @@ -116,7 +116,7 @@ export class Database { // get cached data, emit, and then subscribe to live updates and emit full collection on change private static async _emitCollectionUpdates( - path: string, + path: IDBEndpoint, subject: Subject, ) { // get cached and emit @@ -137,7 +137,7 @@ export class Database { // get data from the cache, process and emit to subject private static async _emitCachedCollection( - path: string, + path: IDBEndpoint, subject: Subject, isNew?: boolean, ) { @@ -148,7 +148,7 @@ export class Database { } // search the persisted cache for documents, return oldest to newest - private static _getCachedCollection(path: string) { + private static _getCachedCollection(path: IDBEndpoint) { return afs .collection(path) .orderBy('_modified', 'asc') @@ -156,7 +156,7 @@ export class Database { } // get any documents that have been updated since last document in cache // if no documents in cache fetch everything - private static _getCollectionUpdatesRef(path: string, latestDoc?: any) { + private static _getCollectionUpdatesRef(path: IDBEndpoint, latestDoc?: any) { return afs .collection(path) .orderBy('_modified', 'asc') @@ -177,14 +177,3 @@ export class Database { return filtered } } - -/****************************************************************************** * - Interfaces - /****************************************************************************** */ - -export type IDBEndpoints = - | 'howtosV1' - | 'users' - | 'discussions' - | 'tagsV1' - | 'eventsV1' diff --git a/src/utils/filters.ts b/src/utils/filters.ts index 717ffcc94c..3ddd09105a 100644 --- a/src/utils/filters.ts +++ b/src/utils/filters.ts @@ -1,5 +1,5 @@ -import { firestore } from 'firebase/app' import dateFns from 'date-fns' +import { ISODateString } from 'src/models/common.models' /* Manual implementation of filters commonly used through the app In the future this could possibly be replaced by more comprehensive libraries @@ -30,25 +30,16 @@ export default { olderThan, newerThan } ***********************************************************************/ // Take date in various formats and return as a Date object -const _formatDate = (date: Date | datestring | firestore.Timestamp) => { +const _formatDate = (date: dateType): Date => { const d: any = date // case date object - return date instanceof Date - ? date - : // case datestring - typeof date === 'string' - ? _datestringToDate(date as datestring) - : // case timestamp - date instanceof firestore.Timestamp - ? _timestampToDate(date as firestore.Timestamp) - : // case other - should not be reached - (d as Date) -} -const _timestampToDate = (timestamp: firestore.Timestamp) => { - return timestamp.toDate() + return relativeDates.includes(d) + ? _datestringToDate(date as RelativeDateString) + : new Date(d as ISODateString) } + // convert standard named dates (e.g. yesterday, lastweek, lastmonth) to date objects -const _datestringToDate = (str: datestring) => { +const _datestringToDate = (str: RelativeDateString) => { switch (str) { case 'yesterday': return dateFns.startOfYesterday() @@ -65,6 +56,13 @@ const _datestringToDate = (str: datestring) => { * Interfaces ***********************************************************************/ // dates come in lots of different formats in the app, here's a general catch-all -type dateType = Date | datestring | firestore.Timestamp +type dateType = ISODateString | RelativeDateString // some custom strings used to describe named dates -type datestring = 'yesterday' | 'tomorrow' | 'thisweek' | 'today' +type RelativeDateString = 'yesterday' | 'tomorrow' | 'thisweek' | 'today' + +const relativeDates: RelativeDateString[] = [ + 'thisweek', + 'today', + 'tomorrow', + 'yesterday', +] diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts index 1f6a5b1412..04d012975f 100644 --- a/src/utils/helpers.ts +++ b/src/utils/helpers.ts @@ -1,4 +1,3 @@ -import { firestore } from 'firebase/app' import countries from 'react-flags-select/lib/countries.js' // remove special characters from string, also replacing spaces with dashes @@ -28,21 +27,11 @@ export const arrayToJson = (arr: any[], keyField: string) => { /************************************************************************ * Date Methods ***********************************************************************/ -export const toTimestamp = (dateString: string | Date) => { - return firestore.Timestamp.fromDate(new Date(dateString)) -} - export const timestampToYear = (timestamp: number) => { const date = new Date(timestamp * 1000) return date.getFullYear() } -// as firestore automatically populates timestamps from dates, want method to convert back -// and allow workign with Date objects (a bit hacky, but required for current firebase integration) -export const toDate = (d: firestore.Timestamp | Date) => { - return d instanceof Date ? d : d.toDate() -} - /************************************************************************ * Validators ***********************************************************************/ diff --git a/yarn.lock b/yarn.lock index 61f249e030..9a5118fc21 100644 --- a/yarn.lock +++ b/yarn.lock @@ -941,7 +941,7 @@ dependencies: regenerator-runtime "^0.12.0" -"@babel/runtime@7.5.5", "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.2.0", "@babel/runtime@^7.4.0", "@babel/runtime@^7.4.2", "@babel/runtime@^7.4.3", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.0": +"@babel/runtime@7.5.5", "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.0", "@babel/runtime@^7.4.2", "@babel/runtime@^7.4.3", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.0": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.5.5.tgz#74fba56d35efbeca444091c7850ccd494fd2f132" integrity sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ== @@ -7528,20 +7528,22 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" -final-form-arrays@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/final-form-arrays/-/final-form-arrays-1.2.0.tgz#8b7ff78a5bb917d1b3bd40ba02e67710b0a23d08" - integrity sha512-7wC38TOHO4LBcKW5Cp14CXefT985nOsuLt+cibiYVTRWiiYmxytxkJpu43wy8gMpDrJPinw3LXRW2AJdJx3eyw== +final-form-arrays@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/final-form-arrays/-/final-form-arrays-3.0.1.tgz#862e5e946d391039ebcdfadbe55fc3a63849e559" + integrity sha512-GKXecufCNCjDcz1+3peL21LuuTlApoxCcnpOnmfeJfC3xAlFKGdytYMfifP7W1IEWTGC8twTv3zItESkej8qpg== final-form-calculate@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/final-form-calculate/-/final-form-calculate-1.3.1.tgz#463089114245afa97fea94712bfbfca11da8413e" integrity sha512-vZCvQ08w9FIoHLkZMcJSIXQr5TAVLxHfLD0thmm50zcNyJESruqhgvurSjWYPLoJGnIgbIb94Rumdg5ZXX5WiQ== -final-form@4.10.0: - version "4.10.0" - resolved "https://registry.yarnpkg.com/final-form/-/final-form-4.10.0.tgz#6179bca7676925202510e9877eb1ad2ad1cd3460" - integrity sha512-pq/LKcynfI7CWJUX/YlMKwL6Xf5s6SxfjwFT6Saz4Qnwce5flShPQW7IOpxauy/PzD9LMwH/0qI5fXnNaBlOJg== +final-form@4.18.5: + version "4.18.5" + resolved "https://registry.yarnpkg.com/final-form/-/final-form-4.18.5.tgz#e359cfaf2892ef135d92fcf22e06b475dda3a885" + integrity sha512-DH/I2W7fWxU8J8ZsbYJ5jLvUbhbatCvLhIKlsU17MvY6W3QnetPEyuX5mcxXgIGFNFKxfvqsG3pDy/1/VwOiTw== + dependencies: + "@babel/runtime" "^7.3.1" finalhandler@~1.1.2: version "1.1.2" @@ -13716,17 +13718,20 @@ react-fast-compare@2.0.4: resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9" integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== -react-final-form-arrays@^1.0.6: - version "1.1.0" - resolved "https://registry.yarnpkg.com/react-final-form-arrays/-/react-final-form-arrays-1.1.0.tgz#ac1232d26483b996a5f57395aab4886a1b01d9a0" - integrity sha512-DcNUoWxY7Ty7QeO/F/WVmX3BCssGUF6P+UCRjiVbX4halM1h/24BHxcWIEI7zr+pIfCY9YNsXWmcKgo0XrMerQ== +react-final-form-arrays@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/react-final-form-arrays/-/react-final-form-arrays-3.1.1.tgz#39d23e7ede966e418cad209e8fde46da1d603e99" + integrity sha512-e6S1x9597cvI4QPniOPmllXXandDAqCCuBo4AvXstZYgcV8whsqzk8aCrmQEy6eEfy2tEhvn6f4VI1GY+JBRsg== dependencies: - react-lifecycles-compat "^3.0.4" + "@babel/runtime" "^7.4.5" -react-final-form@3.6.6: - version "3.6.6" - resolved "https://registry.yarnpkg.com/react-final-form/-/react-final-form-3.6.6.tgz#a2aa5c36d3bc4bfcbf79d80ab62a9370bb9512c0" - integrity sha512-aIZr92koql2WME29/cuXitzqDnIGhbIqfeyNzd4H0wfKAenghDVD5nuD02YjetCGAnGj9sjCfxW4SeRSO3q42A== +react-final-form@6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/react-final-form/-/react-final-form-6.3.0.tgz#b85ae123a3796b3e0c8f56033c8a5037f4497e76" + integrity sha512-jijhXR1fFGUBQwNOSqF4MK8XJO7Ynl1p8vcFsnQS0INSkGI52+4IagjUgtHj3w8EviIHPFK/Eflji6FELUl07w== + dependencies: + "@babel/runtime" "^7.4.5" + ts-essentials "^2.0.8" react-firebase-file-uploader@2.4.2: version "2.4.2" @@ -16110,6 +16115,11 @@ ts-essentials@^1.0.3: resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-1.0.4.tgz#ce3b5dade5f5d97cf69889c11bf7d2da8555b15a" integrity sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ== +ts-essentials@^2.0.8: + version "2.0.12" + resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-2.0.12.tgz#c9303f3d74f75fa7528c3d49b80e089ab09d8745" + integrity sha512-3IVX4nI6B5cc31/GFFE+i8ey/N2eA0CZDbo6n0yrz0zDX8ZJ8djmU1p+XRz7G3is0F3bB3pu2pAroFdAWQKU3w== + ts-pnp@^1.0.0, ts-pnp@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.1.2.tgz#be8e4bfce5d00f0f58e0666a82260c34a57af552"