Log events in visualization

This commit is contained in:
Dennis Schoepf 2021-08-03 14:17:38 +02:00
parent 0c542da265
commit 9c7161c8d9
11 changed files with 777 additions and 6 deletions

View file

@ -1,4 +1,5 @@
import p5 from 'p5'; import p5 from 'p5';
import firebase from 'firebase/app';
import { SCREEN_WIDTH, SCREEN_HEIGHT } from './src/constants/screen'; import { SCREEN_WIDTH, SCREEN_HEIGHT } from './src/constants/screen';
import { DetailScene } from './src/scenes/DetailScene'; import { DetailScene } from './src/scenes/DetailScene';
import { OverviewScene } from './src/scenes/OverviewScene'; import { OverviewScene } from './src/scenes/OverviewScene';

610
package-lock.json generated
View file

@ -1157,6 +1157,296 @@
"to-fast-properties": "^2.0.0" "to-fast-properties": "^2.0.0"
} }
}, },
"@firebase/analytics": {
"version": "0.6.16",
"resolved": "https://registry.npmjs.org/@firebase/analytics/-/analytics-0.6.16.tgz",
"integrity": "sha512-eBYWKf7S7xmDFi3cWLs7Z6x4Hn1AG1oy2Xp/RvfyamhqI2X8GbgyCif/+q7orh+MWnNwipblVT93YajhhXpQcQ==",
"requires": {
"@firebase/analytics-types": "0.5.0",
"@firebase/component": "0.5.5",
"@firebase/installations": "0.4.31",
"@firebase/logger": "0.2.6",
"@firebase/util": "1.2.0",
"tslib": "^2.1.0"
}
},
"@firebase/analytics-types": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.5.0.tgz",
"integrity": "sha512-VTV5Xtq5gVabbL/4n6pBtMJWcQBgOUDE2XbEHl8EOuwRaU9weyGUS7ofbisDkpl1RlFU1aewnc33pbLcYbi0iQ=="
},
"@firebase/app": {
"version": "0.6.29",
"resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.6.29.tgz",
"integrity": "sha512-duCzk9/BSVVsb5Y9b0rnvGSuD5zQA/JghiQsccRl+lA4xiUYjFudTU4cVFftkw+0zzeYBHn4KiVxchsva1O9dA==",
"requires": {
"@firebase/app-types": "0.6.3",
"@firebase/component": "0.5.5",
"@firebase/logger": "0.2.6",
"@firebase/util": "1.2.0",
"dom-storage": "2.1.0",
"tslib": "^2.1.0",
"xmlhttprequest": "1.8.0"
}
},
"@firebase/app-check": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/@firebase/app-check/-/app-check-0.2.1.tgz",
"integrity": "sha512-Qswn+qHiAyi3P0O/W9BffDFX4MmptSod49zhWQt8vV42JyKSZexaXQpeNlfKgdE5jX8wUw8Vkk8My4PfIrPkww==",
"requires": {
"@firebase/app-check-interop-types": "0.1.0",
"@firebase/app-check-types": "0.2.0",
"@firebase/component": "0.5.5",
"@firebase/logger": "0.2.6",
"@firebase/util": "1.2.0",
"tslib": "^2.1.0"
}
},
"@firebase/app-check-interop-types": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.1.0.tgz",
"integrity": "sha512-uZfn9s4uuRsaX5Lwx+gFP3B6YsyOKUE+Rqa6z9ojT4VSRAsZFko9FRn6OxQUA1z5t5d08fY4pf+/+Dkd5wbdbA=="
},
"@firebase/app-check-types": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/@firebase/app-check-types/-/app-check-types-0.2.0.tgz",
"integrity": "sha512-CfZhWtChLK9uNmrxbJyTg1BPtROiwc/VJGu3f39KjS0F5ZvZjHmyRFMrDiSoXDoybM4B6X0pQhJYi9rifT2wpQ=="
},
"@firebase/app-types": {
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.6.3.tgz",
"integrity": "sha512-/M13DPPati7FQHEQ9Minjk1HGLm/4K4gs9bR4rzLCWJg64yGtVC0zNg9gDpkw9yc2cvol/mNFxqTtd4geGrwdw=="
},
"@firebase/auth": {
"version": "0.16.8",
"resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.16.8.tgz",
"integrity": "sha512-mR0UXG4LirWIfOiCWxVmvz1o23BuKGxeItQ2cCUgXLTjNtWJXdcky/356iTUsd7ZV5A78s2NHeN5tIDDG6H4rg==",
"requires": {
"@firebase/auth-types": "0.10.3"
}
},
"@firebase/auth-interop-types": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.1.6.tgz",
"integrity": "sha512-etIi92fW3CctsmR9e3sYM3Uqnoq861M0Id9mdOPF6PWIg38BXL5k4upCNBggGUpLIS0H1grMOvy/wn1xymwe2g=="
},
"@firebase/auth-types": {
"version": "0.10.3",
"resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.10.3.tgz",
"integrity": "sha512-zExrThRqyqGUbXOFrH/sowuh2rRtfKHp9SBVY2vOqKWdCX1Ztn682n9WLtlUDsiYVIbBcwautYWk2HyCGFv0OA=="
},
"@firebase/component": {
"version": "0.5.5",
"resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.5.5.tgz",
"integrity": "sha512-L41SdS/4a164jx2iGfakJgaBUPPBI3DI+RrUlmh3oHSUljTeCwfj/Nhcv3S7e2lyXsGFJtAyepfPUx4IQ05crw==",
"requires": {
"@firebase/util": "1.2.0",
"tslib": "^2.1.0"
}
},
"@firebase/database": {
"version": "0.10.9",
"resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.10.9.tgz",
"integrity": "sha512-Jxi9SiE4cNOftO9YKlG71ccyWFw4kSM9AG/xYu6vWXUGBr39Uw1TvYougANOcU21Q0TP4J08VPGnOnpXk/FGbQ==",
"requires": {
"@firebase/auth-interop-types": "0.1.6",
"@firebase/component": "0.5.5",
"@firebase/database-types": "0.7.3",
"@firebase/logger": "0.2.6",
"@firebase/util": "1.2.0",
"faye-websocket": "0.11.3",
"tslib": "^2.1.0"
}
},
"@firebase/database-types": {
"version": "0.7.3",
"resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.7.3.tgz",
"integrity": "sha512-dSOJmhKQ0nL8O4EQMRNGpSExWCXeHtH57gGg0BfNAdWcKhC8/4Y+qfKLfWXzyHvrSecpLmO0SmAi/iK2D5fp5A==",
"requires": {
"@firebase/app-types": "0.6.3"
}
},
"@firebase/firestore": {
"version": "2.3.10",
"resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-2.3.10.tgz",
"integrity": "sha512-O+XpaZVhDIBK2fMwBUBR2BuhaXF6zTmz+afAuXAx18DK+2rFfLefbALZLaUYw0Aabe9pryy0c7OenzRbHA8n4Q==",
"requires": {
"@firebase/component": "0.5.5",
"@firebase/firestore-types": "2.3.0",
"@firebase/logger": "0.2.6",
"@firebase/util": "1.2.0",
"@firebase/webchannel-wrapper": "0.5.1",
"@grpc/grpc-js": "^1.3.2",
"@grpc/proto-loader": "^0.6.0",
"node-fetch": "2.6.1",
"tslib": "^2.1.0"
}
},
"@firebase/firestore-types": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-2.3.0.tgz",
"integrity": "sha512-QTW7NP7nDL0pgT/X53lyj+mIMh4nRQBBTBlRNQBt7eSyeqBf3ag3bxdQhCg358+5KbjYTC2/O6QtX9DlJZmh1A=="
},
"@firebase/functions": {
"version": "0.6.14",
"resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.6.14.tgz",
"integrity": "sha512-Gthru/wHPQqkn651MenVM+qKVFFqIyFcNT3qfJUacibqrKlvDtYtaCMjFGAkChuGnYzNVnXJIaNrIHkEIII4Hg==",
"requires": {
"@firebase/component": "0.5.5",
"@firebase/functions-types": "0.4.0",
"@firebase/messaging-types": "0.5.0",
"node-fetch": "2.6.1",
"tslib": "^2.1.0"
}
},
"@firebase/functions-types": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.4.0.tgz",
"integrity": "sha512-3KElyO3887HNxtxNF1ytGFrNmqD+hheqjwmT3sI09FaDCuaxGbOnsXAXH2eQ049XRXw9YQpHMgYws/aUNgXVyQ=="
},
"@firebase/installations": {
"version": "0.4.31",
"resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.4.31.tgz",
"integrity": "sha512-qWolhAgMHvD3avsNCl+K8+untzoDDFQIRR8At8kyWMKKosy0vttdWTWzjvDoZbyKU6r0RNlxDUWAgV88Q8EudQ==",
"requires": {
"@firebase/component": "0.5.5",
"@firebase/installations-types": "0.3.4",
"@firebase/util": "1.2.0",
"idb": "3.0.2",
"tslib": "^2.1.0"
}
},
"@firebase/installations-types": {
"version": "0.3.4",
"resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.3.4.tgz",
"integrity": "sha512-RfePJFovmdIXb6rYwtngyxuEcWnOrzdZd9m7xAW0gRxDIjBT20n3BOhjpmgRWXo/DAxRmS7bRjWAyTHY9cqN7Q=="
},
"@firebase/logger": {
"version": "0.2.6",
"resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.2.6.tgz",
"integrity": "sha512-KIxcUvW/cRGWlzK9Vd2KB864HlUnCfdTH0taHE0sXW5Xl7+W68suaeau1oKNEqmc3l45azkd4NzXTCWZRZdXrw=="
},
"@firebase/messaging": {
"version": "0.7.15",
"resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.7.15.tgz",
"integrity": "sha512-81t6iJtqMBJF5LHTjDhlHUpbPZOV6dKhW0TueAoON4omc0SaDXgf4nnk6JkvZRfdcuOaP8848Cv53tvZPFFAYQ==",
"requires": {
"@firebase/component": "0.5.5",
"@firebase/installations": "0.4.31",
"@firebase/messaging-types": "0.5.0",
"@firebase/util": "1.2.0",
"idb": "3.0.2",
"tslib": "^2.1.0"
}
},
"@firebase/messaging-types": {
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/@firebase/messaging-types/-/messaging-types-0.5.0.tgz",
"integrity": "sha512-QaaBswrU6umJYb/ZYvjR5JDSslCGOH6D9P136PhabFAHLTR4TWjsaACvbBXuvwrfCXu10DtcjMxqfhdNIB1Xfg=="
},
"@firebase/performance": {
"version": "0.4.17",
"resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.4.17.tgz",
"integrity": "sha512-uhDs9rhdMrGraYHcd3CTRkGtcNap4hp6rAHTwJNIX56Z3RzQ1VW2ea9vvesl7EjFtEIPU0jfdrS32wV+qer5DQ==",
"requires": {
"@firebase/component": "0.5.5",
"@firebase/installations": "0.4.31",
"@firebase/logger": "0.2.6",
"@firebase/performance-types": "0.0.13",
"@firebase/util": "1.2.0",
"tslib": "^2.1.0"
}
},
"@firebase/performance-types": {
"version": "0.0.13",
"resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.0.13.tgz",
"integrity": "sha512-6fZfIGjQpwo9S5OzMpPyqgYAUZcFzZxHFqOyNtorDIgNXq33nlldTL/vtaUZA8iT9TT5cJlCrF/jthKU7X21EA=="
},
"@firebase/polyfill": {
"version": "0.3.36",
"resolved": "https://registry.npmjs.org/@firebase/polyfill/-/polyfill-0.3.36.tgz",
"integrity": "sha512-zMM9oSJgY6cT2jx3Ce9LYqb0eIpDE52meIzd/oe/y70F+v9u1LDqk5kUF5mf16zovGBWMNFmgzlsh6Wj0OsFtg==",
"requires": {
"core-js": "3.6.5",
"promise-polyfill": "8.1.3",
"whatwg-fetch": "2.0.4"
},
"dependencies": {
"core-js": {
"version": "3.6.5",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz",
"integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA=="
}
}
},
"@firebase/remote-config": {
"version": "0.1.42",
"resolved": "https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.1.42.tgz",
"integrity": "sha512-hWwtAZmYLB274bxjV2cdMYhyBCUUqbYErihGx3rMyab76D+VbIxOuKJb2z0DS67jQG+SA3pr9/MtWsTPHV/l9g==",
"requires": {
"@firebase/component": "0.5.5",
"@firebase/installations": "0.4.31",
"@firebase/logger": "0.2.6",
"@firebase/remote-config-types": "0.1.9",
"@firebase/util": "1.2.0",
"tslib": "^2.1.0"
}
},
"@firebase/remote-config-types": {
"version": "0.1.9",
"resolved": "https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.1.9.tgz",
"integrity": "sha512-G96qnF3RYGbZsTRut7NBX0sxyczxt1uyCgXQuH/eAfUCngxjEGcZQnBdy6mvSdqdJh5mC31rWPO4v9/s7HwtzA=="
},
"@firebase/storage": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.6.1.tgz",
"integrity": "sha512-00WEdmmKoKUHBsufUIUDgBS5ghAe8tCp1QbHQnnlf3aekAgFf8UKjfR6QMaHoEIzuZPhWPStQ5KrrIcWA/MMQg==",
"requires": {
"@firebase/component": "0.5.5",
"@firebase/storage-types": "0.4.1",
"@firebase/util": "1.2.0",
"node-fetch": "2.6.1",
"tslib": "^2.1.0"
}
},
"@firebase/storage-types": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.4.1.tgz",
"integrity": "sha512-IM4cRzAnQ6QZoaxVZ5MatBzqXVcp47hOlE28jd9xXw1M9V7gfjhmW0PALGFQx58tPVmuUwIKyoEbHZjV4qRJwQ=="
},
"@firebase/util": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.2.0.tgz",
"integrity": "sha512-8W9TTGImXr9cu+oyjBJ7yjoEd/IVAv0pBZA4c1uIuKrpGZi2ee38m+8xlZOBRmsAaOU/tR9DXz1WF/oeM6Fb7Q==",
"requires": {
"tslib": "^2.1.0"
}
},
"@firebase/webchannel-wrapper": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.5.1.tgz",
"integrity": "sha512-dZMzN0uAjwJXWYYAcnxIwXqRTZw3o14hGe7O6uhwjD1ZQWPVYA5lASgnNskEBra0knVBsOXB4KXg+HnlKewN/A=="
},
"@grpc/grpc-js": {
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.3.6.tgz",
"integrity": "sha512-v7+LQFbqZKmd/Tvf5/j1Xlbq6jXL/4d+gUtm2TNX4QiEC3ELWADmGr2dGlUyLl6aKTuYfsN72vAsO5zmavYkEg==",
"requires": {
"@types/node": ">=12.12.47"
}
},
"@grpc/proto-loader": {
"version": "0.6.4",
"resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.4.tgz",
"integrity": "sha512-7xvDvW/vJEcmLUltCUGOgWRPM8Oofv0eCFSVMuKqaqWJaXSzmB+m9hiyqe34QofAl4WAzIKUZZlinIF9FOHyTQ==",
"requires": {
"@types/long": "^4.0.1",
"lodash.camelcase": "^4.3.0",
"long": "^4.0.0",
"protobufjs": "^6.10.0",
"yargs": "^16.1.1"
}
},
"@iarna/toml": { "@iarna/toml": {
"version": "2.2.5", "version": "2.2.5",
"resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz",
@ -1229,6 +1519,60 @@
"physical-cpu-count": "^2.0.0" "physical-cpu-count": "^2.0.0"
} }
}, },
"@protobufjs/aspromise": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
"integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78="
},
"@protobufjs/base64": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
"integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="
},
"@protobufjs/codegen": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
"integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="
},
"@protobufjs/eventemitter": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
"integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A="
},
"@protobufjs/fetch": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
"integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=",
"requires": {
"@protobufjs/aspromise": "^1.1.1",
"@protobufjs/inquire": "^1.1.0"
}
},
"@protobufjs/float": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
"integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E="
},
"@protobufjs/inquire": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
"integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik="
},
"@protobufjs/path": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
"integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0="
},
"@protobufjs/pool": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
"integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q="
},
"@protobufjs/utf8": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
"integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA="
},
"@types/animejs": { "@types/animejs": {
"version": "3.1.4", "version": "3.1.4",
"resolved": "https://registry.npmjs.org/@types/animejs/-/animejs-3.1.4.tgz", "resolved": "https://registry.npmjs.org/@types/animejs/-/animejs-3.1.4.tgz",
@ -1241,6 +1585,16 @@
"integrity": "sha512-7eQ2xYLLI/LsicL2nejW9Wyko3lcpN6O/z0ZLHrEQsg280zIdCv1t/0m6UtBjUHokCGBQ3gYTbHzDkZ1xOBwwg==", "integrity": "sha512-7eQ2xYLLI/LsicL2nejW9Wyko3lcpN6O/z0ZLHrEQsg280zIdCv1t/0m6UtBjUHokCGBQ3gYTbHzDkZ1xOBwwg==",
"dev": true "dev": true
}, },
"@types/long": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz",
"integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w=="
},
"@types/node": {
"version": "16.4.10",
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.4.10.tgz",
"integrity": "sha512-TmVHsm43br64js9BqHWqiDZA+xMtbUpI1MBIA0EyiBmoV9pcEYFOSdj5fr6enZNfh4fChh+AGOLIzGwJnkshyQ=="
},
"@types/p5": { "@types/p5": {
"version": "1.3.0", "version": "1.3.0",
"resolved": "https://registry.npmjs.org/@types/p5/-/p5-1.3.0.tgz", "resolved": "https://registry.npmjs.org/@types/p5/-/p5-1.3.0.tgz",
@ -2059,6 +2413,31 @@
"integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==", "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==",
"dev": true "dev": true
}, },
"cliui": {
"version": "7.0.4",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
"integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
"requires": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.0",
"wrap-ansi": "^7.0.0"
},
"dependencies": {
"ansi-regex": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
},
"strip-ansi": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
"integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
"requires": {
"ansi-regex": "^5.0.0"
}
}
}
},
"clone": { "clone": {
"version": "2.1.2", "version": "2.1.2",
"resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
@ -2745,6 +3124,11 @@
} }
} }
}, },
"dom-storage": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/dom-storage/-/dom-storage-2.1.0.tgz",
"integrity": "sha512-g6RpyWXzl0RR6OTElHKBl7nwnK87GUyZMYC7JWsB/IA73vpqK2K6LT39x4VepLxlSsWBFrPVLnsSR5Jyty0+2Q=="
},
"domain-browser": { "domain-browser": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
@ -2860,6 +3244,11 @@
} }
} }
}, },
"emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
},
"encodeurl": { "encodeurl": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
@ -2933,8 +3322,7 @@
"escalade": { "escalade": {
"version": "3.1.1", "version": "3.1.1",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
"integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
"dev": true
}, },
"escape-html": { "escape-html": {
"version": "1.0.3", "version": "1.0.3",
@ -3193,6 +3581,14 @@
"integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==",
"dev": true "dev": true
}, },
"faye-websocket": {
"version": "0.11.3",
"resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz",
"integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==",
"requires": {
"websocket-driver": ">=0.5.1"
}
},
"file-uri-to-path": { "file-uri-to-path": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
@ -3217,6 +3613,28 @@
"to-regex-range": "^2.1.0" "to-regex-range": "^2.1.0"
} }
}, },
"firebase": {
"version": "8.8.1",
"resolved": "https://registry.npmjs.org/firebase/-/firebase-8.8.1.tgz",
"integrity": "sha512-dzqQn3wwHhsStsD2gDs3XfSJ/SIqv5IA9Ht+MySnvrIsljk0V8bI/+EMPsh0h2VlYPSk51bmyNQZ4LvuSKNvlA==",
"requires": {
"@firebase/analytics": "0.6.16",
"@firebase/app": "0.6.29",
"@firebase/app-check": "0.2.1",
"@firebase/app-types": "0.6.3",
"@firebase/auth": "0.16.8",
"@firebase/database": "0.10.9",
"@firebase/firestore": "2.3.10",
"@firebase/functions": "0.6.14",
"@firebase/installations": "0.4.31",
"@firebase/messaging": "0.7.15",
"@firebase/performance": "0.4.17",
"@firebase/polyfill": "0.3.36",
"@firebase/remote-config": "0.1.42",
"@firebase/storage": "0.6.1",
"@firebase/util": "1.2.0"
}
},
"for-in": { "for-in": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
@ -3290,6 +3708,11 @@
"integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
"dev": true "dev": true
}, },
"get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
},
"get-intrinsic": { "get-intrinsic": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
@ -3711,6 +4134,11 @@
"toidentifier": "1.0.0" "toidentifier": "1.0.0"
} }
}, },
"http-parser-js": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz",
"integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg=="
},
"http-signature": { "http-signature": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
@ -3743,6 +4171,11 @@
"integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=",
"dev": true "dev": true
}, },
"idb": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/idb/-/idb-3.0.2.tgz",
"integrity": "sha512-+FLa/0sTXqyux0o6C+i2lOR0VoS60LU/jzUo5xjfY6+7sEEgy4Gz1O7yFBXvjd7N0NyIGWIRg8DcQSLEG+VSPw=="
},
"ieee754": { "ieee754": {
"version": "1.2.1", "version": "1.2.1",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
@ -3929,6 +4362,11 @@
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
"dev": true "dev": true
}, },
"is-fullwidth-code-point": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
},
"is-glob": { "is-glob": {
"version": "4.0.1", "version": "4.0.1",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
@ -4223,6 +4661,11 @@
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
}, },
"lodash.camelcase": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
"integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY="
},
"lodash.clone": { "lodash.clone": {
"version": "4.5.0", "version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz", "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz",
@ -4262,6 +4705,11 @@
"chalk": "^2.0.1" "chalk": "^2.0.1"
} }
}, },
"long": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
"integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
},
"magic-string": { "magic-string": {
"version": "0.22.5", "version": "0.22.5",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz",
@ -4547,6 +4995,11 @@
"integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==",
"dev": true "dev": true
}, },
"node-fetch": {
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
"integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
},
"node-forge": { "node-forge": {
"version": "0.10.0", "version": "0.10.0",
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
@ -5526,6 +5979,31 @@
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"dev": true "dev": true
}, },
"promise-polyfill": {
"version": "8.1.3",
"resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.1.3.tgz",
"integrity": "sha512-MG5r82wBzh7pSKDRa9y+vllNHz3e3d4CNj1PQE4BQYxLme0gKYYBm9YENq+UkEikyZ0XbiGWxYlVw3Rl9O/U8g=="
},
"protobufjs": {
"version": "6.11.2",
"resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz",
"integrity": "sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==",
"requires": {
"@protobufjs/aspromise": "^1.1.2",
"@protobufjs/base64": "^1.1.2",
"@protobufjs/codegen": "^2.0.4",
"@protobufjs/eventemitter": "^1.1.0",
"@protobufjs/fetch": "^1.1.0",
"@protobufjs/float": "^1.0.2",
"@protobufjs/inquire": "^1.1.0",
"@protobufjs/path": "^1.1.2",
"@protobufjs/pool": "^1.1.0",
"@protobufjs/utf8": "^1.1.0",
"@types/long": "^4.0.1",
"@types/node": ">=13.7.0",
"long": "^4.0.0"
}
},
"psl": { "psl": {
"version": "1.8.0", "version": "1.8.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
@ -5867,6 +6345,11 @@
"tough-cookie": "^2.3.3" "tough-cookie": "^2.3.3"
} }
}, },
"require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
"integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
},
"resolve": { "resolve": {
"version": "1.20.0", "version": "1.20.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
@ -5947,8 +6430,7 @@
"safe-buffer": { "safe-buffer": {
"version": "5.1.2", "version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
"dev": true
}, },
"safe-regex": { "safe-regex": {
"version": "1.1.0", "version": "1.1.0",
@ -6593,6 +7075,31 @@
"xtend": "^4.0.0" "xtend": "^4.0.0"
} }
}, },
"string-width": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
"integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
"requires": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
"strip-ansi": "^6.0.0"
},
"dependencies": {
"ansi-regex": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
},
"strip-ansi": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
"integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
"requires": {
"ansi-regex": "^5.0.0"
}
}
}
},
"string.prototype.trimend": { "string.prototype.trimend": {
"version": "1.0.4", "version": "1.0.4",
"resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz",
@ -7221,6 +7728,21 @@
"integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
"dev": true "dev": true
}, },
"websocket-driver": {
"version": "0.7.4",
"resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
"integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==",
"requires": {
"http-parser-js": ">=0.5.1",
"safe-buffer": ">=5.1.0",
"websocket-extensions": ">=0.1.1"
}
},
"websocket-extensions": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz",
"integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg=="
},
"whatwg-encoding": { "whatwg-encoding": {
"version": "1.0.5", "version": "1.0.5",
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
@ -7230,6 +7752,11 @@
"iconv-lite": "0.4.24" "iconv-lite": "0.4.24"
} }
}, },
"whatwg-fetch": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz",
"integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng=="
},
"whatwg-mimetype": { "whatwg-mimetype": {
"version": "2.3.0", "version": "2.3.0",
"resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
@ -7275,6 +7802,52 @@
"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
"dev": true "dev": true
}, },
"wrap-ansi": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"requires": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0"
},
"dependencies": {
"ansi-regex": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
},
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"requires": {
"color-convert": "^2.0.1"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
},
"strip-ansi": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
"integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
"requires": {
"ansi-regex": "^5.0.0"
}
}
}
},
"wrappy": { "wrappy": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@ -7302,12 +7875,41 @@
"integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
"dev": true "dev": true
}, },
"xmlhttprequest": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz",
"integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw="
},
"xtend": { "xtend": {
"version": "4.0.2", "version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
"dev": true "dev": true
}, },
"y18n": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="
},
"yargs": {
"version": "16.2.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
"integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
"requires": {
"cliui": "^7.0.2",
"escalade": "^3.1.1",
"get-caller-file": "^2.0.5",
"require-directory": "^2.1.1",
"string-width": "^4.2.0",
"y18n": "^5.0.5",
"yargs-parser": "^20.2.2"
}
},
"yargs-parser": {
"version": "20.2.9",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
"integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w=="
},
"zustand": { "zustand": {
"version": "3.5.7", "version": "3.5.7",
"resolved": "https://registry.npmjs.org/zustand/-/zustand-3.5.7.tgz", "resolved": "https://registry.npmjs.org/zustand/-/zustand-3.5.7.tgz",

View file

@ -21,6 +21,7 @@
}, },
"dependencies": { "dependencies": {
"animejs": "^3.2.1", "animejs": "^3.2.1",
"firebase": "^8.8.1",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"p5": "^1.4.0", "p5": "^1.4.0",
"rxjs": "^7.2.0", "rxjs": "^7.2.0",

65
src/logger.ts Normal file
View file

@ -0,0 +1,65 @@
import firebase from 'firebase/app';
import 'firebase/database';
import store from './store';
const firebaseConfig = {
apiKey: 'AIzaSyCORIIdFkDBagiVf0IeK0UxZL1qv0m90_E',
authDomain: 'codewanderer-d9212.firebaseapp.com',
databaseURL: 'https://codewanderer-d9212-default-rtdb.europe-west1.firebasedatabase.app',
projectId: 'codewanderer-d9212',
storageBucket: 'codewanderer-d9212.appspot.com',
messagingSenderId: '143940874668',
appId: '1:143940874668:web:d2f860b4fc5d4292cf8a09',
};
type LogEventType =
| 'CC'
| 'OC'
| 'RC'
| 'LI'
| 'LR'
| 'LS'
| 'LC'
| 'PI'
| 'PR'
| 'PS'
| 'PC'
| 'NI'
| 'NR'
| 'NS'
| 'NC'
| 'GF'
| 'SF'
| 'OTHER';
export interface LogEvent {
timestamp: number;
type: LogEventType;
message?: string;
additionalData?: any;
}
export class Logger {
database: firebase.database.Database;
constructor() {
firebase.initializeApp(firebaseConfig);
this.database = firebase.database();
}
public log(ev: LogEvent) {
console.log('Logging event');
const uid = store.getState().uid;
const logEvKey = this.database.ref(uid).child('logs').push().key;
this.database.ref(uid).update({ [`logs/${logEvKey}`]: ev });
}
public logPersonalData() {}
public logKnowledgeQuestions() {}
public logGeneralQuestions() {}
}
export const logger = new Logger();

View file

@ -2,8 +2,9 @@ import _ from 'lodash';
import { mp5 } from '../../main'; import { mp5 } from '../../main';
import { colors } from '../constants/colors'; import { colors } from '../constants/colors';
import { generateRevealableCoords } from '../helpers'; import { generateRevealableCoords } from '../helpers';
import { logger } from '../logger';
import { Player } from '../sketchObjects/Player'; import { Player } from '../sketchObjects/Player';
import { Revealable, RevealableInterface } from '../sketchObjects/Revealable'; import { Revealable, RevealableInterface, RevealableTypes } from '../sketchObjects/Revealable';
import store from '../store'; import store from '../store';
import { Coordinates } from '../types'; import { Coordinates } from '../types';
import { CompanionState } from '../ui/companion'; import { CompanionState } from '../ui/companion';
@ -92,9 +93,25 @@ export class DetailScene {
onSceneClick() { onSceneClick() {
this.revealableObjects.forEach((revObj) => { this.revealableObjects.forEach((revObj) => {
if (revObj.isHovered) { if (revObj.isHovered) {
logger.log({
type:
revObj.type === RevealableTypes.CONTRIBUTOR
? 'NI'
: revObj.type === RevealableTypes.LEGACY
? 'LI'
: 'PI',
timestamp: Date.now(),
message: `Identified ${revObj.name}`,
});
this.wasHovered = true; this.wasHovered = true;
revObj.onClick(); revObj.onClick();
} else { } else {
logger.log({
type: 'RC',
timestamp: Date.now(),
});
this.player.reveal(); this.player.reveal();
this.wasInteractedWith = true; this.wasInteractedWith = true;
} }

View file

@ -7,6 +7,7 @@ import { generateEdges } from '../helpers';
import { Scenes } from './scenes'; import { Scenes } from './scenes';
import projectMetadata from '../../metadata/project.json'; import projectMetadata from '../../metadata/project.json';
import { Area } from '../types'; import { Area } from '../types';
import { logger } from '../logger';
export class OverviewScene { export class OverviewScene {
player: Player; player: Player;
@ -30,12 +31,24 @@ export class OverviewScene {
this.edges.forEach((edge, i) => { this.edges.forEach((edge, i) => {
const dist = mp5.dist(mp5.mouseX, mp5.mouseY, edge.x, edge.y); const dist = mp5.dist(mp5.mouseX, mp5.mouseY, edge.x, edge.y);
if (dist < edge.r) { if (dist < edge.r) {
logger.log({
type: 'OC',
timestamp: Date.now(),
message: 'Click outside edge',
});
store.getState().setProjectMetadata(edge.name); store.getState().setProjectMetadata(edge.name);
store.setState({ store.setState({
showScore: true, showScore: true,
currentSubproject: edge.name, currentSubproject: edge.name,
currentScene: Scenes.DETAIL, currentScene: Scenes.DETAIL,
}); });
} else {
logger.log({
type: 'OC',
timestamp: Date.now(),
message: 'Click on edge',
});
} }
}); });
} }
@ -52,6 +65,11 @@ export class OverviewScene {
store.setState({ finishedGame: true }); store.setState({ finishedGame: true });
setTimeout(() => { setTimeout(() => {
logger.log({
timestamp: Date.now(),
type: 'GF',
});
store.getState().addUserMessage({ store.getState().addUserMessage({
text: "Nice! 😎 You made it all the way through. Now I would be very thankful if you could take some time to answer the following questions. Don't overthink the answers and write down everything that comes to your mind. The more input you give, the better no matter how well it is formulated!", text: "Nice! 😎 You made it all the way through. Now I would be very thankful if you could take some time to answer the following questions. Don't overthink the answers and write down everything that comes to your mind. The more input you give, the better no matter how well it is formulated!",
inputWanted: false, inputWanted: false,
@ -62,6 +80,12 @@ export class OverviewScene {
this.edges.forEach((edgeShape) => { this.edges.forEach((edgeShape) => {
if (store.getState().finishedSubProjects.some((fsp) => fsp === edgeShape.name)) { if (store.getState().finishedSubProjects.some((fsp) => fsp === edgeShape.name)) {
logger.log({
type: 'SF',
timestamp: Date.now(),
message: `Finished subproject: ${edgeShape.name}`,
});
edgeShape.finished = true; edgeShape.finished = true;
} }

View file

@ -2,6 +2,7 @@ import { combineLatest } from 'rxjs';
import { mp5 } from '../../main'; import { mp5 } from '../../main';
import { areasColliding, playerHead$, revealedArea$ } from '../area'; import { areasColliding, playerHead$, revealedArea$ } from '../area';
import { colors } from '../constants/colors'; import { colors } from '../constants/colors';
import { logger } from '../logger';
import store from '../store'; import store from '../store';
import { Area } from '../types'; import { Area } from '../types';
@ -85,6 +86,17 @@ export class Revealable {
this.state = RevealableStates.FOUND; this.state = RevealableStates.FOUND;
} else if (isRevealed && !isHovered) { } else if (isRevealed && !isHovered) {
this.state = RevealableStates.REVEALED; this.state = RevealableStates.REVEALED;
logger.log({
type:
this.type === RevealableTypes.CONTRIBUTOR
? 'NR'
: this.type === RevealableTypes.LEGACY
? 'LR'
: 'PR',
timestamp: Date.now(),
message: `Revealed ${this.name}`,
});
} else { } else {
this.state = RevealableStates.HIDDEN; this.state = RevealableStates.HIDDEN;
} }
@ -120,6 +132,7 @@ export class Revealable {
this.wasInteractedWith = true; this.wasInteractedWith = true;
store.getState().addInfoMessage({ store.getState().addInfoMessage({
type: this.type,
headline: this.name, headline: this.name,
innerHTML: this.contents, innerHTML: this.contents,
imgUrl: this.imageUrl, imgUrl: this.imageUrl,

View file

@ -24,12 +24,14 @@ export interface State {
finishedGame: boolean; finishedGame: boolean;
revealablesFinished: number; revealablesFinished: number;
showScore: boolean; showScore: boolean;
uid: string;
} }
const store = create<State>( const store = create<State>(
devtools((set) => ({ devtools((set) => ({
uid: null,
showScore: false, showScore: false,
currentIntroStep: 0, currentIntroStep: 1,
revealablesFinished: 0, revealablesFinished: 0,
currentScene: Scenes.OVERVIEW, currentScene: Scenes.OVERVIEW,
currentSubproject: null, currentSubproject: null,

View file

@ -1,4 +1,5 @@
import anime from 'animejs/lib/anime.es'; import anime from 'animejs/lib/anime.es';
import { logger } from '../logger';
import store from '../store'; import store from '../store';
export enum CompanionState { export enum CompanionState {
@ -93,6 +94,11 @@ export class Companion {
// Hide Message // Hide Message
this.messageRef.style.display = 'none'; this.messageRef.style.display = 'none';
store.setState({ companionState: CompanionState.IDLE }); store.setState({ companionState: CompanionState.IDLE });
logger.log({
type: 'CC',
timestamp: Date.now(),
message: 'Close message',
});
if (this.message.onNext) { if (this.message.onNext) {
this.message.onNext(); this.message.onNext();
@ -195,6 +201,10 @@ export class Companion {
} }
store.setState({ companionState: newCompanionState });*/ store.setState({ companionState: newCompanionState });*/
logger.log({
type: 'CC',
timestamp: Date.now(),
});
} }
handleMouseEnter() { handleMouseEnter() {

View file

@ -1,6 +1,9 @@
import { logger } from '../logger';
import { RevealableTypes } from '../sketchObjects/Revealable';
import store from '../store'; import store from '../store';
export interface InfoMessageType { export interface InfoMessageType {
type: RevealableTypes;
headline: string; headline: string;
innerHTML: string; innerHTML: string;
imgUrl?: string; imgUrl?: string;
@ -8,6 +11,8 @@ export interface InfoMessageType {
} }
export class InfoMessage { export class InfoMessage {
type: RevealableTypes;
name: string;
infoMessage: HTMLElement; infoMessage: HTMLElement;
infoMessageHeadline: HTMLElement; infoMessageHeadline: HTMLElement;
infoMessageContents: HTMLElement; infoMessageContents: HTMLElement;
@ -39,6 +44,9 @@ export class InfoMessage {
const newMessage = state.infoMessages[state.infoMessages.length - 1]; const newMessage = state.infoMessages[state.infoMessages.length - 1];
this.setContents(newMessage.headline, newMessage.innerHTML); this.setContents(newMessage.headline, newMessage.innerHTML);
this.type = newMessage.type;
this.name = newMessage.headline;
if (newMessage.imgUrl) { if (newMessage.imgUrl) {
this.setImg(newMessage.imgUrl); this.setImg(newMessage.imgUrl);
} else { } else {
@ -72,11 +80,33 @@ export class InfoMessage {
} }
private show() { private show() {
logger.log({
type:
this.type === RevealableTypes.CONTRIBUTOR
? 'NS'
: this.type === RevealableTypes.LEGACY
? 'LS'
: 'PS',
timestamp: Date.now(),
message: `Showing info message for ${this.name}`,
});
this.infoMessage.style.display = 'block'; this.infoMessage.style.display = 'block';
this.backdrop.style.display = 'block'; this.backdrop.style.display = 'block';
} }
private hide() { private hide() {
logger.log({
type:
this.type === RevealableTypes.CONTRIBUTOR
? 'NC'
: this.type === RevealableTypes.LEGACY
? 'LC'
: 'PC',
timestamp: Date.now(),
message: `Closing info message for ${this.name}`,
});
this.infoMessage.style.display = 'none'; this.infoMessage.style.display = 'none';
this.backdrop.style.display = 'none'; this.backdrop.style.display = 'none';
} }

View file

@ -1,3 +1,4 @@
import { logger } from '../logger';
import { Scenes } from '../scenes/scenes'; import { Scenes } from '../scenes/scenes';
import store from '../store'; import store from '../store';
@ -107,6 +108,11 @@ export class Intro {
return; return;
} else { } else {
this.errorRef.style.display = 'none'; this.errorRef.style.display = 'none';
store.setState({
uid: `${Date.now()}_${name.replace(/[^a-zA-Z ]/g, '').toLowerCase()}`,
});
this.sendDemographicData(name, age, background, experience); this.sendDemographicData(name, age, background, experience);
} }
} }