diff --git a/.gitignore b/.gitignore index 9053ccb..5107dd5 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ node_modules dist .yarn pnp.js +sourceproject diff --git a/index.html b/index.html index d4d0e2f..92b1371 100644 --- a/index.html +++ b/index.html @@ -7,6 +7,11 @@
+
+
0
+
/
+
6
+
@@ -24,11 +29,20 @@
-

Test

+
+

+

Test

+
-
Test
- Check this out on Github +
+
+
+
+

Last Commits

+
+
+ Check this out in detail
+
+
+

Hello there 👋,

+

+ thanks for participating in an interactive study for this research project. If there are + any problems with this study do not hesitate to contact me via mail: + me@dnsc.io +

+

+ You are participating in a study on Playful Experiences within the Onboarding Process of + Software Development Projects. In the following you are going to be guided through an + interactive visualization of a software project. Within that visualization you are going + to be able to reveal certain parts of the project, that might be of value in an + onboarding process. The visualizations are going to be accompanied by some questions on + the visualization itself but also on the broader aspect of using game mechanics in + software development. There is additional information on the study background and the + study procedure in the next step. +

+
+

Disclaimer

+

+ Do not expect a real game experience within this study. This study aims to gather + initial feedback on certain aspects of which information could be interesting to + include within software development onboarding and how its presentation changes how it + is perceived. The visualization of the in-game elements is therefore very abstract. + The arguably more important part of this study are the answers to the questions you + will be asked in the end, so please answer them carefully. Thanks in advance, let's + start now! +

+
+
+
+

Information about data protection and declaration of consent

+

Dear participant,

+

+ thank you for your interest in participating in this study on ”Playful Experiences in + the Onboarding Process of Software Development Projects”. This study takes place as a + part of my master thesis on “Onboarding in Software Development Projects as a Space of + Play”. The thesis is written as a part of the new Joint Master "Human-Computer + Interaction" of the FH Salzburg and the University of Salzburg. In order to use your + personal data, we would need your written declaration of consent. Please, carefully read + the following information. +

+

General Study Information

+

+ The goal of this study is to research how software developers experience playful + approaches on the onboarding process into new projects. The results of this study are + going to contribute to the research body of both the software development field but also + the field of “Play”. From the study results conclusions are going to be drawn about: The + openness towards playful experiences in the software development field, possible hurdles + on implementing such experiences, the general attitude of developers towards play in the + field and the selection of what information to include in onboarding processes. +

+

Overall study procedure

+

+ The participant will take part in a hybrid-study setting. Part of the study consists of + going through an interactive visualization of an open-source software project and + revealing parts of information within some parts of the project. The other part of the + study consists of questions on the visualization and general questions on the + intersection of Play and software development. The study can be accessed online and can + be finished online without additional work on the participants side. Overall the + procedure should take between 15 and 25 minutes. +

+

Rights

+

+ The participation in this study is voluntary. You may withdraw or stop your + participation at any time without incurring any consequences. Moreover, you can request + information about the processed personal data at any time, even after the termination of + the study (for further information see also Confidentiality and data processing). If you + have any questions please contact the study leader. +

+

Risks

+

+ You do not incur any risks by participating in this study. If you feel uncomfortable + during the study you can cancel at any time without giving reasons and without incurring + any consequences. +

+

Confidentiality and Data Processing

+

+ Your data will only be processed within the aforementioned project if you give your + written consent. The data is going to be processed via the Firebase platform + (https://firebase.google.com/) on european servers. For additional information on their + privacy and data protection guidelines visit their documentation at + https://policies.google.com/u/0/privacy. The following data is going to be processed + within the study: +

+
    +
  • + Demographic Information (Name, Age, Professional Background, Years of Experience, + Gender) +
  • +
  • + Your actions within the visualization (Timestamps of Clicks and Mouse moves together + with the timestamps of certain events) +
  • +
  • Your answers to the questions that are part of the study
  • +
+

+ After the end of the study, the data is going to be exported from Firebase and the + underlying app instance is going to be deleted. This data is going to be kept strictly + confidential and is not going to be passed on to further third parties. The data is + going to be analyzed and then used within my master thesis. If you only want to be + mentioned anonymously in my thesis please indicate so at the bottom. If you are doing + that your name and age are going to be hidden in my thesis and your data is only going + to be connected to a random ID. +

+

Renumeration

+

You will not receive an expense allowance for participation.

+

Consent

+

+ I have carefully read and understood the declaration of consent. Any additional + questions were answered to my satisfaction. My participation is voluntary, and I know + that I can withdraw at any time, even without giving reasons, without incurring any + disadvantages. By clicking on “Agree” below I agree to the processing of my personal + data collected for this study and I am willing to participate. +

+ +
+
+

General Questions

+

Please provide some additional information about you below:

+ + + + +
Please provide a value for all inputs
+
+
+

The study itself

+

+ Now we're ready to dive into this study. After clicking on the button below you are + dropped into a visualization of a software development project. This project is a + monorepo, more specifically the + ethereumjs monorepo. You + are controlling a little player character with your mouse. The character consists of a + head and tail. As soon as its head touches elements on the screen you are able to + interact with them. That should be all you need for now, just drop in now and take a + look at what is there. +

+

Have fun! 🤟

+
+
+

Questions about this visualization sepcifically

+

+ After the project-specific "knowledge" questions in the last step I want to get your + valuable input as a developer for the following questions: +

+ +
+
+

Questions about Play in Software Development

+

+ After the project-specific "knowledge" questions in the last step I want to get your + valuable input as a developer for the following questions: +

+ + + + + + + + + + +
+
+

Thank you so much! 🙏

+

+ Thank you for your participation. If you have additional feedback please contact me: + me@dnsc.io. You can now safely close the browser window. +

+
+ +
+
+
diff --git a/main.ts b/main.ts index 8dacdc4..0d38bab 100644 --- a/main.ts +++ b/main.ts @@ -1,4 +1,5 @@ import p5 from 'p5'; +import firebase from 'firebase/app'; import { SCREEN_WIDTH, SCREEN_HEIGHT } from './src/constants/screen'; import { DetailScene } from './src/scenes/DetailScene'; import { OverviewScene } from './src/scenes/OverviewScene'; @@ -6,6 +7,8 @@ import { Scenes } from './src/scenes/scenes'; import store from './src/store'; import { Companion, CompanionState } from './src/ui/companion'; import { InfoMessage } from './src/ui/info'; +import { Intro } from './src/ui/intro'; +import { Score } from './src/ui/score'; const sketch = (s: p5) => { // Scenes @@ -16,8 +19,10 @@ const sketch = (s: p5) => { s.createCanvas(SCREEN_WIDTH, SCREEN_HEIGHT); s.noCursor(); + new Intro(); new Companion(); new InfoMessage(); + new Score(); overviewScene = new OverviewScene(); detailScene = new DetailScene(); @@ -36,7 +41,11 @@ const sketch = (s: p5) => { s.mousePressed = () => { const { currentScene, companionState, infoMessageShown } = store.getState(); - if (companionState !== CompanionState.ACTIVE || !infoMessageShown) { + if ( + companionState !== CompanionState.ACTIVE && + !infoMessageShown && + store.getState().currentIntroStep === 0 + ) { if (currentScene === Scenes.OVERVIEW) { overviewScene.onSceneClick(); } else if (currentScene === Scenes.DETAIL) { diff --git a/metadata/project.json b/metadata/project.json index 4f2bb57..33c876f 100644 --- a/metadata/project.json +++ b/metadata/project.json @@ -3,36 +3,1111 @@ { "name": "block", "path": "packages/block", - "size": 2450, + "filePath": "/home/dennis/projects/codewanderer/sourceproject/ethereumjs-monorepo/packages/block", + "size": 7602, + "links": [ + "@ethereumjs/common", + "@ethereumjs/tx" + ], "revealables": [ { - "type": "LEGACY", - "name": "trieNode", - "path": "src/trieNode.ts", - "size": 85, - "contents": "This file is a bit long, you might want to take a clear look and refactor it. The contributors of this subpackage could help here. Try to reveal them to see their contact info.", - "url": "https://github.com/ethereumjs/ethereumjs-monorepo/blob/master/packages/trie/src/trieNode.ts", - "imageUrl": null + "type": "PACKAGE", + "name": "merkle-patricia-tree", + "path": "path.to.package.json", + "version": "^4.2.0", + "size": 211, + "contents": "This package is used throughout this part of the repository. Below you can see the version that is installed currently. If you want to take a look at the package documentation, past versions and much more, click the button in the lower right corner. It'll lead you to the npmjs website of the package.", + "url": "https://www.npmjs.com/package/merkle-patricia-tree" }, { "type": "CONTRIBUTOR", - "name": "Holger Drewes (holgerd77)", - "path": null, - "size": 40, - "contents": "This contributor has a lot of commits in this sub package, below you can find the contact information and a few commits from this repo.", - "url": "https://github.com/ethereumjs/ethereumjs-monorepo/blob/master/packages/trie/src/trieNode.ts", - "imageUrl": "https://avatars.githubusercontent.com/u/931137?v=4" + "name": "holgerd77", + "url": "https://github.com/holgerd77", + "size": 2060, + "imageUrl": "https://avatars.githubusercontent.com/u/931137?v=4", + "contents": "This is one of the main contributors to the overall repository and this part of the repository specifically. Below you can see the contributors latest commits and the button on the right will take you straight to the respective Github profile.", + "commits": [ + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/bfd53752d8d589a38fc3fb41bb67f5f5acb74f9d", + "message": "Client: central event bus implementation (#1187)", + "time": "2021-07-17T02:01:55Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/3e69efdaba3ab1f11e99f23c5595de7ca6288a89", + "message": "Merge pull request #1165 from ethereumjs/add-client-cli-test\n\nclient: add basic cli test", + "time": "2021-07-12T09:51:11Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/2ba896ea10d6d85416710377a05a8755b8450c34", + "message": "Merge pull request #1327 from ethereumjs/new-releases\n\nNew Library Releases (tx.supports() integration, Common custom chains + enum Chain/HF, Util v7.1.0)", + "time": "2021-07-08T09:08:29Z" + } + ] + }, + { + "type": "CONTRIBUTOR", + "name": "vpulim", + "url": "https://github.com/vpulim", + "size": 105, + "imageUrl": "https://avatars.githubusercontent.com/u/100092?v=4", + "contents": "This is one of the main contributors to the overall repository and this part of the repository specifically. Below you can see the contributors latest commits and the button on the right will take you straight to the respective Github profile.", + "commits": [ + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/ddef972fa2434e7e16be767a7b6b7cde806e6a4f", + "message": "Merge pull request #110 from ethereumjs/fix/synchronized-event-remove-stats\n\nfix: remove references to old synchronize event stats obj", + "time": "2019-05-16T12:40:47Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/fd485b803e49ad02a38d641c993017a26825b420", + "message": "Merge branch 'master' into fix/synchronized-event-remove-stats", + "time": "2019-05-16T12:28:28Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/d5bab71de3b9d624a365d1a0a6092f674f2ecc6c", + "message": "Merge pull request #106 from ethereumjs/fix/browser-ethereumjs-common\n\nfix(browser): correctly import ethereumjs-common", + "time": "2019-05-16T12:27:08Z" + } + ] + }, + { + "type": "CONTRIBUTOR", + "name": "acolytec3", + "url": "https://github.com/acolytec3", + "size": 21, + "imageUrl": "https://avatars.githubusercontent.com/u/17355484?v=4", + "contents": "This is one of the main contributors to the overall repository and this part of the repository specifically. Below you can see the contributors latest commits and the button on the right will take you straight to the respective Github profile.", + "commits": [ + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/f01403a2b598c9232885dba43c6442e34d0d3ab7", + "message": "tx: clarify documentation for `gasPrice` under `FeeMarketEIP1559TxData` interface (#1387)", + "time": "2021-08-02T17:54:03Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/5ac0ff827b9220f77515ccbb34a4ea8611d36ee8", + "message": "Client: Small types clean-up (#1377)", + "time": "2021-07-27T19:01:02Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/6461858868d9350bb58dac4fc55877e30ed79258", + "message": "trie: remove use of deprecated setRoot (#1376)", + "time": "2021-07-26T19:28:18Z" + } + ] + }, + { + "type": "LEGACY", + "name": "header.ts", + "path": "/packages/block/src/header.ts", + "size": 899, + "contents": "This file seems pretty big compared to the other files in this part of the project. It's 29101 bytes and has 899 lines of code. That could make it hard to read for new contributors and people looking at the repository. You might want to look into a refactoring in order to keep it at a more readable size. What you could also do is contact one of the contributors to help in understanding what's going on. They must be hiding somewhere in this package as well, try to reveal them to access their Github profiles.", + "fileContents": " public readonly parentHash: Buffer\n public readonly uncleHash: Buffer\n public readonly coinbase: Address\n public readonly stateRoot: Buffer\n public readonly transactionsTrie: Buffer\n public readonly receiptTrie: Buffer\n public readonly bloom: Buffer\n public readonly difficulty: BN\n public readonly number: BN\n public readonly gasLimit: BN", + "fileSize": 29101, + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/blob/master/packages/block/src/header.ts" + }, + { + "type": "LEGACY", + "name": "block.ts", + "path": "/packages/block/src/block.ts", + "size": 487, + "contents": "This file seems pretty big compared to the other files in this part of the project. It's 15740 bytes and has 487 lines of code. That could make it hard to read for new contributors and people looking at the repository. You might want to look into a refactoring in order to keep it at a more readable size. What you could also do is contact one of the contributors to help in understanding what's going on. They must be hiding somewhere in this package as well, try to reveal them to access their Github profiles.", + "fileContents": " public static fromBlockData(blockData: BlockData = {}, opts?: BlockOptions) {\n const { header: headerData, transactions: txsData, uncleHeaders: uhsData } = blockData\n\n const header = BlockHeader.fromHeaderData(headerData, opts)\n\n // parse transactions\n const transactions = []\n for (const txData of txsData ?? []) {\n const tx = TransactionFactory.fromTxData(txData, {\n ...opts,", + "fileSize": 15740, + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/blob/master/packages/block/src/block.ts" + } + ] + }, + { + "name": "blockchain", + "path": "packages/blockchain", + "filePath": "/home/dennis/projects/codewanderer/sourceproject/ethereumjs-monorepo/packages/blockchain", + "size": 247, + "links": [ + "@ethereumjs/block", + "@ethereumjs/common", + "@ethereumjs/ethash" + ], + "revealables": [ + { + "type": "PACKAGE", + "name": "debug", + "path": "path.to.package.json", + "version": "^2.2.0", + "size": 248, + "contents": "This package is used throughout this part of the repository. Below you can see the version that is installed currently. If you want to take a look at the package documentation, past versions and much more, click the button in the lower right corner. It'll lead you to the npmjs website of the package.", + "url": "https://www.npmjs.com/package/debug" + }, + { + "type": "PACKAGE", + "name": "level-mem", + "path": "path.to.package.json", + "version": "^5.0.1", + "size": 146, + "contents": "This package is used throughout this part of the repository. Below you can see the version that is installed currently. If you want to take a look at the package documentation, past versions and much more, click the button in the lower right corner. It'll lead you to the npmjs website of the package.", + "url": "https://www.npmjs.com/package/level-mem" + }, + { + "type": "PACKAGE", + "name": "lru-cache", + "path": "path.to.package.json", + "version": "^5.1.1", + "size": 87, + "contents": "This package is used throughout this part of the repository. Below you can see the version that is installed currently. If you want to take a look at the package documentation, past versions and much more, click the button in the lower right corner. It'll lead you to the npmjs website of the package.", + "url": "https://www.npmjs.com/package/lru-cache" + }, + { + "type": "CONTRIBUTOR", + "name": "ryanio", + "url": "https://github.com/ryanio", + "size": 599, + "imageUrl": "https://avatars.githubusercontent.com/u/22116?v=4", + "contents": "This is one of the main contributors to the overall repository and this part of the repository specifically. Below you can see the contributors latest commits and the button on the right will take you straight to the respective Github profile.", + "commits": [ + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/3a989d0d9d59dca1113759c8babd1d1fb55c6f8e", + "message": "ci: fix hardhat e2e resolutions (#1391)", + "time": "2021-08-06T02:30:08Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/f0ade046e2c4205bf27d86dc4f1462f444a2980b", + "message": "common: fix hardforkBlockBN() to correctly return null for unscheduled hardforks (#1329)", + "time": "2021-08-06T02:17:07Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/b463d8ea96c8655b7d4d3b638b459e16ae8d76d8", + "message": "VM: New release v5.5.2 (#1390)", + "time": "2021-08-03T22:14:01Z" + } + ] + }, + { + "type": "CONTRIBUTOR", + "name": "jwasinger", + "url": "https://github.com/jwasinger", + "size": 82, + "imageUrl": "https://avatars.githubusercontent.com/u/3411040?v=4", + "contents": "This is one of the main contributors to the overall repository and this part of the repository specifically. Below you can see the contributors latest commits and the button on the right will take you straight to the respective Github profile.", + "commits": [ + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/45f1ef8adaf7d3b44e0f64121ed643dd3df6c74b", + "message": "add EXTCODEHASH opcode implementation\n\nadd EXTCODEHASH rules for nonexistent accounts and precompiles\n\n.\n\nReplace removed state manager method\n\nFix lint", + "time": "2018-07-30T21:17:53Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/67520736e4673750a43ed3bc2bf68a98269d0cf5", + "message": "add support for CREATE2\n\ntrap if not constantinople\n\nadd check if nonce or code at address\n\nFix lint errors\n\nRefactoring\n\nFix lint\n\nUse invalid init code on colission\n\nFix lint", + "time": "2018-08-04T06:38:32Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/94ef9331a84d5ee4e9eba3f23a7d1762487045c5", + "message": "add generateAddress2 for CREATE2", + "time": "2018-08-04T06:10:49Z" + } + ] + }, + { + "type": "CONTRIBUTOR", + "name": "whymarrh", + "url": "https://github.com/whymarrh", + "size": 19, + "imageUrl": "https://avatars.githubusercontent.com/u/1623628?v=4", + "contents": "This is one of the main contributors to the overall repository and this part of the repository specifically. Below you can see the contributors latest commits and the button on the right will take you straight to the respective Github profile.", + "commits": [ + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/81ecb3590c018ab7d9197b6f244fc87dabb76023", + "message": "Update ethereumjs-blockchain to v4.0.1 (#469)", + "time": "2019-07-08T12:19:20Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/8301c829fb5b32df8333506ebe7b4f358721497f", + "message": "Migrate to TypeScript", + "time": "2019-03-06T20:07:19Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/79570f92cffe04c63f8822f53353058745c38842", + "message": "Remove src/ directory from npm package files", + "time": "2019-03-12T01:39:13Z" + } + ] + }, + { + "type": "LEGACY", + "name": "index.ts", + "path": "/packages/blockchain/src/index.ts", + "size": 1562, + "contents": "This file seems pretty big compared to the other files in this part of the project. It's 54159 bytes and has 1562 lines of code. That could make it hard to read for new contributors and people looking at the repository. You might want to look into a refactoring in order to keep it at a more readable size. What you could also do is contact one of the contributors to help in understanding what's going on. They must be hiding somewhere in this package as well, try to reveal them to access their Github profiles.", + "fileContents": " * Adds a block to the blockchain.\n *\n * @param block - The block to be added to the blockchain.\n */\n putBlock(block: Block): Promise\n\n /**\n * Deletes a block from the blockchain. All child blocks in the chain are\n * deleted and any encountered heads are set to the parent block.\n *", + "fileSize": 54159, + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/blob/master/packages/blockchain/src/index.ts" + }, + { + "type": "LEGACY", + "name": "manager.ts", + "path": "/packages/blockchain/src/db/manager.ts", + "size": 257, + "contents": "This file seems pretty big compared to the other files in this part of the project. It's 7391 bytes and has 257 lines of code. That could make it hard to read for new contributors and people looking at the repository. You might want to look into a refactoring in order to keep it at a more readable size. What you could also do is contact one of the contributors to help in understanding what's going on. They must be hiding somewhere in this package as well, try to reveal them to access their Github profiles.", + "fileContents": " * Abstraction over a DB to facilitate storing/fetching blockchain-related\n * data, such as blocks and headers, indices, and the head block.\n * @hidden\n */\nexport class DBManager {\n private _cache: CacheMap\n private _common: Common\n private _db: LevelUp\n\n constructor(db: LevelUp, common: Common) {", + "fileSize": 7391, + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/blob/master/packages/blockchain/src/db/manager.ts" + } + ] + }, + { + "name": "client", + "path": "packages/client", + "filePath": "/home/dennis/projects/codewanderer/sourceproject/ethereumjs-monorepo/packages/client", + "size": 3369, + "links": [ + "@ethereumjs/block", + "@ethereumjs/blockchain", + "@ethereumjs/common", + "@ethereumjs/devp2p", + "@ethereumjs/tx", + "@ethereumjs/vm" + ], + "revealables": [ + { + "type": "PACKAGE", + "name": "merkle-patricia-tree", + "path": "path.to.package.json", + "version": "^4.2.0", + "size": 260, + "contents": "This package is used throughout this part of the repository. Below you can see the version that is installed currently. If you want to take a look at the package documentation, past versions and much more, click the button in the lower right corner. It'll lead you to the npmjs website of the package.", + "url": "https://www.npmjs.com/package/merkle-patricia-tree" }, { "type": "PACKAGE", "name": "chalk", - "path": "https://github.com/ethereumjs/ethereumjs-monorepo/blob/master/packages/client/package.json", - "size": 65, - "contents": "This package is used in this part of the project. Take a look at the documentation in order to make yourself familiar with it", - "url": "https://github.com/chalk/chalk", - "imageUrl": null + "path": "path.to.package.json", + "version": "^2.4.2", + "size": 244, + "contents": "This package is used throughout this part of the repository. Below you can see the version that is installed currently. If you want to take a look at the package documentation, past versions and much more, click the button in the lower right corner. It'll lead you to the npmjs website of the package.", + "url": "https://www.npmjs.com/package/chalk" + }, + { + "type": "PACKAGE", + "name": "fs-extra", + "path": "path.to.package.json", + "version": "^7.0.1", + "size": 169, + "contents": "This package is used throughout this part of the repository. Below you can see the version that is installed currently. If you want to take a look at the package documentation, past versions and much more, click the button in the lower right corner. It'll lead you to the npmjs website of the package.", + "url": "https://www.npmjs.com/package/fs-extra" + }, + { + "type": "CONTRIBUTOR", + "name": "axic", + "url": "https://github.com/axic", + "size": 364, + "imageUrl": "https://avatars.githubusercontent.com/u/20340?v=4", + "contents": "This is one of the main contributors to the overall repository and this part of the repository specifically. Below you can see the contributors latest commits and the button on the right will take you straight to the respective Github profile.", + "commits": [ + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/068db32fbcd262597a9e6780bc7c376a511110a5", + "message": "Optimise SIGNEXTEND by using bn.js only (#172)", + "time": "2019-05-23T08:40:59Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/1905b14cc7187f2c5d7aae2a03e51b403fe1c8ff", + "message": "Merge pull request #88 from BelfordZ/patch-1\n\nUpdate README.md", + "time": "2019-02-05T12:08:06Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/08079ee71032ccca7f7151eb36d0f8d2a67a5ec1", + "message": "Fix error handling in runCode (in case loadContract fails)", + "time": "2018-12-12T10:54:39Z" + } + ] + }, + { + "type": "CONTRIBUTOR", + "name": "gabrocheleau", + "url": "https://github.com/gabrocheleau", + "size": 55, + "imageUrl": "https://avatars.githubusercontent.com/u/18757482?v=4", + "contents": "This is one of the main contributors to the overall repository and this part of the repository specifically. Below you can see the contributors latest commits and the button on the right will take you straight to the respective Github profile.", + "commits": [ + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/ba6de670bfac5d110350125a352ec968dfe7e928", + "message": "Merge pull request #1314 from ethereumjs/client/chainId_sync_RPC\n\nClient: eth_chainID and eth_syncing RPC implementations", + "time": "2021-07-07T11:39:39Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/b480c0e5dcb913e1228e42ee6f771d1eec5e661b", + "message": "Merge branch 'master' into client/chainId_sync_RPC", + "time": "2021-07-06T23:40:38Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/dcf70de85a3e9dfca518bb8e82efc6114aaf26a9", + "message": "client: reset testDouble in eth_syncing test", + "time": "2021-07-05T12:48:55Z" + } + ] + }, + { + "type": "CONTRIBUTOR", + "name": "rumkin", + "url": "https://github.com/rumkin", + "size": 19, + "imageUrl": "https://avatars.githubusercontent.com/u/609373?v=4", + "contents": "This is one of the main contributors to the overall repository and this part of the repository specifically. Below you can see the contributors latest commits and the button on the right will take you straight to the respective Github profile.", + "commits": [ + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/98e20f4d2ab3d7e2a1c5198f7ef16ceae89f0947", + "message": "Update mcl-wasm to v0.7.1", + "time": "2020-11-16T09:17:14Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/da0e44b5cc2ce5d7c41a359084a275a172cc1580", + "message": "Remove redundant contributor from tx", + "time": "2020-11-16T08:36:14Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/7e6e27cefe5df2b47272f932bf84ec00ec4656f1", + "message": "Update jayson package", + "time": "2020-11-02T20:48:02Z" + } + ] + }, + { + "type": "LEGACY", + "name": "eth.ts", + "path": "/packages/client/lib/rpc/modules/eth.ts", + "size": 545, + "contents": "This file seems pretty big compared to the other files in this part of the project. It's 18203 bytes and has 545 lines of code. That could make it hard to read for new contributors and people looking at the repository. You might want to look into a refactoring in order to keep it at a more readable size. What you could also do is contact one of the contributors to help in understanding what's going on. They must be hiding somewhere in this package as well, try to reveal them to access their Github profiles.", + "fileContents": " private _vm: VM | undefined\n public ethVersion: number\n\n /**\n * Create eth_* RPC module\n * @param client Client to which the module binds\n */\n constructor(client: EthereumClient) {\n this.client = client\n this.service = client.services.find((s) => s.name === 'eth') as EthereumService", + "fileSize": 18203, + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/blob/master/packages/client/lib/rpc/modules/eth.ts" + }, + { + "type": "LEGACY", + "name": "config.ts", + "path": "/packages/client/lib/config.ts", + "size": 373, + "contents": "This file seems pretty big compared to the other files in this part of the project. It's 10536 bytes and has 373 lines of code. That could make it hard to read for new contributors and people looking at the repository. You might want to look into a refactoring in order to keep it at a more readable size. What you could also do is contact one of the contributors to help in understanding what's going on. They must be hiding somewhere in this package as well, try to reveal them to access their Github profiles.", + "fileContents": " *\n * Default: VM instance created by client\n */\n vm?: VM\n\n /**\n * Serve light peer requests\n *\n * Default: `false`\n */", + "fileSize": 10536, + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/blob/master/packages/client/lib/config.ts" + } + ] + }, + { + "name": "common", + "path": "packages/common", + "filePath": "/home/dennis/projects/codewanderer/sourceproject/ethereumjs-monorepo/packages/common", + "size": 1000, + "links": [], + "revealables": [ + { + "type": "PACKAGE", + "name": "crc-32", + "path": "path.to.package.json", + "version": "^1.2.0", + "size": 86, + "contents": "This package is used throughout this part of the repository. Below you can see the version that is installed currently. If you want to take a look at the package documentation, past versions and much more, click the button in the lower right corner. It'll lead you to the npmjs website of the package.", + "url": "https://www.npmjs.com/package/crc-32" + }, + { + "type": "CONTRIBUTOR", + "name": "jochem-brouwer", + "url": "https://github.com/jochem-brouwer", + "size": 280, + "imageUrl": "https://avatars.githubusercontent.com/u/29359032?v=4", + "contents": "This is one of the main contributors to the overall repository and this part of the repository specifically. Below you can see the contributors latest commits and the button on the right will take you straight to the respective Github profile.", + "commits": [ + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/755c4a6b4f84475edf70ecc818d90dc2e88bc652", + "message": "ethereum/tests: update to 904 (#1379)", + "time": "2021-07-28T16:24:29Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/008a4c3a044908614d2f0da22583537b7b383289", + "message": "VM: add tests for wrong transactions (#1374)", + "time": "2021-07-22T22:59:11Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/7a2301c2fc00f3350634bcc7f4a50c41d1445094", + "message": "VM: fix EIP1559 bug to include tx value in balance check, fix nonce check (#1372)", + "time": "2021-07-22T03:08:07Z" + } + ] + }, + { + "type": "CONTRIBUTOR", + "name": "cdetrio", + "url": "https://github.com/cdetrio", + "size": 51, + "imageUrl": "https://avatars.githubusercontent.com/u/997681?v=4", + "contents": "This is one of the main contributors to the overall repository and this part of the repository specifically. Below you can see the contributors latest commits and the button on the right will take you straight to the respective Github profile.", + "commits": [ + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/87a739cdda6e7650e43678713b8599ae47f8129c", + "message": "catch errors parsing state tests", + "time": "2017-12-18T21:53:14Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/d9092f9ad0ccb6c2eee2f8508153401bb8a92cc0", + "message": "remove redundant push to stateManager.touched", + "time": "2017-12-20T12:38:47Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/fba7652f5192f6b77f53899669159986d2ebe41a", + "message": "update deps for byzantium release", + "time": "2017-09-25T15:18:01Z" + } + ] + }, + { + "type": "CONTRIBUTOR", + "name": "chikeichan", + "url": "https://github.com/chikeichan", + "size": 16, + "imageUrl": "https://avatars.githubusercontent.com/u/8507735?v=4", + "contents": "This is one of the main contributors to the overall repository and this part of the repository specifically. Below you can see the contributors latest commits and the button on the right will take you straight to the respective Github profile.", + "commits": [ + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/37cc36f0a52f3808cce8dcbd3f79239c143c4c80", + "message": "Remove duplicate gitignore path", + "time": "2019-04-16T00:12:51Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/3fc889a794e21421edfda2a01762817f560d27c6", + "message": "Kick travis", + "time": "2019-03-12T00:17:02Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/512a49b89b7661c60bb496ad853ba570be4a5494", + "message": "Update Travis CI to run on node v8, v10", + "time": "2019-03-11T23:35:07Z" + } + ] + }, + { + "type": "LEGACY", + "name": "index.ts", + "path": "/packages/common/src/index.ts", + "size": 963, + "contents": "This file seems pretty big compared to the other files in this part of the project. It's 30341 bytes and has 963 lines of code. That could make it hard to read for new contributors and people looking at the repository. You might want to look into a refactoring in order to keep it at a more readable size. What you could also do is contact one of the contributors to help in understanding what's going on. They must be hiding somewhere in this package as well, try to reveal them to access their Github profiles.", + "fileContents": " /**\n * xDai EVM sidechain with a native stable token\n *\n * - [Documentation](https://www.xdaichain.com/)\n */\n xDaiChain = 'x-dai-chain',\n}\n\nexport enum Chain {\n Mainnet = 1,", + "fileSize": 30341, + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/blob/master/packages/common/src/index.ts" + }, + { + "type": "LEGACY", + "name": "types.ts", + "path": "/packages/common/src/types.ts", + "size": 69, + "contents": "This file seems pretty big compared to the other files in this part of the project. It's 1212 bytes and has 69 lines of code. That could make it hard to read for new contributors and people looking at the repository. You might want to look into a refactoring in order to keep it at a more readable size. What you could also do is contact one of the contributors to help in understanding what's going on. They must be hiding somewhere in this package as well, try to reveal them to access their Github profiles.", + "fileContents": " type: string\n algorithm: string\n clique?: {\n period: number\n epoch: number\n }\n ethash?: any\n }\n}\n", + "fileSize": 1212, + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/blob/master/packages/common/src/types.ts" + } + ] + }, + { + "name": "devp2p", + "path": "packages/devp2p", + "filePath": "/home/dennis/projects/codewanderer/sourceproject/ethereumjs-monorepo/packages/devp2p", + "size": 1651, + "links": [ + "@ethereumjs/common" + ], + "revealables": [ + { + "type": "PACKAGE", + "name": "base64url", + "path": "path.to.package.json", + "version": "^3.0.1", + "size": 87, + "contents": "This package is used throughout this part of the repository. Below you can see the version that is installed currently. If you want to take a look at the package documentation, past versions and much more, click the button in the lower right corner. It'll lead you to the npmjs website of the package.", + "url": "https://www.npmjs.com/package/base64url" + }, + { + "type": "PACKAGE", + "name": "bl", + "path": "path.to.package.json", + "version": "^1.1.2", + "size": 61, + "contents": "This package is used throughout this part of the repository. Below you can see the version that is installed currently. If you want to take a look at the package documentation, past versions and much more, click the button in the lower right corner. It'll lead you to the npmjs website of the package.", + "url": "https://www.npmjs.com/package/bl" + }, + { + "type": "PACKAGE", + "name": "debug", + "path": "path.to.package.json", + "version": "^2.2.0", + "size": 152, + "contents": "This package is used throughout this part of the repository. Below you can see the version that is installed currently. If you want to take a look at the package documentation, past versions and much more, click the button in the lower right corner. It'll lead you to the npmjs website of the package.", + "url": "https://www.npmjs.com/package/debug" + }, + { + "type": "CONTRIBUTOR", + "name": "wanderer", + "url": "https://github.com/wanderer", + "size": 251, + "imageUrl": "https://avatars.githubusercontent.com/u/158211?v=4", + "contents": "This is one of the main contributors to the overall repository and this part of the repository specifically. Below you can see the contributors latest commits and the button on the right will take you straight to the respective Github profile.", + "commits": [ + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/1ae809ebd9a27eb41f3dca3e9942bc06e53f1a72", + "message": "Merge pull request #5 from NexusDevelopment/master\n\nremove compiled prefix from stored contract code", + "time": "2016-06-25T09:08:10Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/7da49e45f39928916e310c0f8e581da62865f8f0", + "message": "Merge pull request #73 from ethereumjs/hooked\n\nadd hooked-vm utility and test", + "time": "2016-06-19T23:05:39Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/89d6ecfb527f93accba57eaf6d6827239771392d", + "message": "Merge pull request #76 from ethereumjs/kumavis-patch-1\n\nopcodes - rm unused 'async' property", + "time": "2016-06-14T20:45:17Z" + } + ] + }, + { + "type": "CONTRIBUTOR", + "name": "fanatid", + "url": "https://github.com/fanatid", + "size": 40, + "imageUrl": "https://avatars.githubusercontent.com/u/2633065?v=4", + "contents": "This is one of the main contributors to the overall repository and this part of the repository specifically. Below you can see the contributors latest commits and the button on the right will take you straight to the respective Github profile.", + "commits": [ + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/50cbf93b0b91d3b8bccaa5a764b58f58b0c61050", + "message": "Update ethjs-util, require minimum 0.1.6\n\nSee details in https://github.com/ethereumjs/ethereumjs-util/issues/132", + "time": "2018-06-13T19:02:42Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/a73cc663b6f46b995a9b1be1e18ac8dc4d89d2f0", + "message": "Merge pull request #100 from fckt/patch-1\n\nFix comment for getChainId()", + "time": "2018-06-10T18:32:50Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/d2827001c3b209f3eaad8dd4c0cd6b7caaac74c4", + "message": "Merge pull request #105 from egodigitus/master\n\nTypo fixed", + "time": "2017-11-22T15:20:29Z" + } + ] + }, + { + "type": "CONTRIBUTOR", + "name": "youfoundron", + "url": "https://github.com/youfoundron", + "size": 16, + "imageUrl": "https://avatars.githubusercontent.com/u/4658359?v=4", + "contents": "This is one of the main contributors to the overall repository and this part of the repository specifically. Below you can see the contributors latest commits and the button on the right will take you straight to the respective Github profile.", + "commits": [ + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/b3cc6b4df1ec07065dce2d1c5a644b61421b1a08", + "message": "improve test converage", + "time": "2019-02-06T18:43:51Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/90540b8c0eb09b263891be5a2b07c157b61364d5", + "message": "fix tests", + "time": "2019-02-06T00:22:36Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/b85f98514e33a34223bc7bf748c2b01edab08ebf", + "message": "stop defaulting to sending supportedHardForks option to ethereumjs-common", + "time": "2019-02-04T18:41:45Z" + } + ] + }, + { + "type": "LEGACY", + "name": "peer.ts", + "path": "/packages/devp2p/src/rlpx/peer.ts", + "size": 584, + "contents": "This file seems pretty big compared to the other files in this part of the project. It's 15775 bytes and has 584 lines of code. That could make it hard to read for new contributors and people looking at the repository. You might want to look into a refactoring in order to keep it at a more readable size. What you could also do is contact one of the contributors to help in understanding what's going on. They must be hiding somewhere in this package as well, try to reveal them to access their Github profiles.", + "fileContents": " PROTOCOL_ERROR = 0x02,\n USELESS_PEER = 0x03,\n TOO_MANY_PEERS = 0x04,\n ALREADY_CONNECTED = 0x05,\n INCOMPATIBLE_VERSION = 0x06,\n INVALID_IDENTITY = 0x07,\n CLIENT_QUITTING = 0x08,\n UNEXPECTED_IDENTITY = 0x09,\n SAME_IDENTITY = 0x0a,\n TIMEOUT = 0x0b,", + "fileSize": 15775, + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/blob/master/packages/devp2p/src/rlpx/peer.ts" + }, + { + "type": "LEGACY", + "name": "ecies.ts", + "path": "/packages/devp2p/src/rlpx/ecies.ts", + "size": 390, + "contents": "This file seems pretty big compared to the other files in this part of the project. It's 13437 bytes and has 390 lines of code. That could make it hard to read for new contributors and people looking at the repository. You might want to look into a refactoring in order to keep it at a more readable size. What you could also do is contact one of the contributors to help in understanding what's going on. They must be hiding somewhere in this package as well, try to reveal them to access their Github profiles.", + "fileContents": " return Buffer.from(ecdh(publicKey, privateKey, { hashfn }, Buffer.alloc(33)).slice(1))\n}\n\n// a straigth rip from python interop w/go ecies implementation\n// for sha3, blocksize is 136 bytes\n// for sha256, blocksize is 64 bytes\n// NIST SP 800-56a Concatenation Key Derivation Function (see section 5.8.1).\n// https://github.com/ethereum/pydevp2p/blob/master/devp2p/crypto.py#L295\n// https://github.com/ethereum/go-ethereum/blob/fe532a98f9f32bb81ef0d8d013cf44327830d11e/crypto/ecies/ecies.go#L165\n// https://github.com/ethereum/cpp-ethereum/blob/develop/libdevcrypto/CryptoPP.cpp#L36", + "fileSize": 13437, + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/blob/master/packages/devp2p/src/rlpx/ecies.ts" + } + ] + }, + { + "name": "ethash", + "path": "packages/ethash", + "filePath": "/home/dennis/projects/codewanderer/sourceproject/ethereumjs-monorepo/packages/ethash", + "size": 75, + "links": [], + "revealables": [ + { + "type": "PACKAGE", + "name": "buffer-xor", + "path": "path.to.package.json", + "version": "^2.0.1", + "size": 94, + "contents": "This package is used throughout this part of the repository. Below you can see the version that is installed currently. If you want to take a look at the package documentation, past versions and much more, click the button in the lower right corner. It'll lead you to the npmjs website of the package.", + "url": "https://www.npmjs.com/package/buffer-xor" + }, + { + "type": "PACKAGE", + "name": "miller-rabin", + "path": "path.to.package.json", + "version": "^4.0.0", + "size": 111, + "contents": "This package is used throughout this part of the repository. Below you can see the version that is installed currently. If you want to take a look at the package documentation, past versions and much more, click the button in the lower right corner. It'll lead you to the npmjs website of the package.", + "url": "https://www.npmjs.com/package/miller-rabin" + }, + { + "type": "CONTRIBUTOR", + "name": "s1na", + "url": "https://github.com/s1na", + "size": 239, + "imageUrl": "https://avatars.githubusercontent.com/u/1591639?v=4", + "contents": "This is one of the main contributors to the overall repository and this part of the repository specifically. Below you can see the contributors latest commits and the button on the right will take you straight to the respective Github profile.", + "commits": [ + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/4f7829fb343fc7068d7e956ce373cb5f922fcac8", + "message": "types: add Address type", + "time": "2019-03-18T14:06:38Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/026ff50be7c77f24fc71443d3bc6496806a226fa", + "message": "vm: add simple benchmarking tool for mainnet blocks", + "time": "2020-06-26T16:09:58Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/56a87310467152cd97e7604a79dd3cb3a2433941", + "message": "Make clearOriginalStorageCache private, implicitly run on commit, revert", + "time": "2020-06-05T15:49:26Z" + } + ] + }, + { + "type": "CONTRIBUTOR", + "name": "danjm", + "url": "https://github.com/danjm", + "size": 38, + "imageUrl": "https://avatars.githubusercontent.com/u/7499938?v=4", + "contents": "This is one of the main contributors to the overall repository and this part of the repository specifically. Below you can see the contributors latest commits and the button on the right will take you straight to the respective Github profile.", + "commits": [ + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/002172c94ad1d3c3e6ffc20cc1f5a284393ceee5", + "message": "Merge pull request #143 from ethereumjs/fix-signing-eip155-transactions\n\nCorrectly support signing and serializing of EIP155 valid transaction", + "time": "2019-04-23T14:07:53Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/eb7ae3c0b0c3eb53f24f253d76531b221f80c749", + "message": "Add additional signing + hashing api tests.", + "time": "2019-04-04T13:25:20Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/1583bea11b8f90690e1648be9f685b640540d30b", + "message": "Correctly support signing and serializing of EIP155 valid transaction.", + "time": "2019-03-30T23:07:25Z" + } + ] + }, + { + "type": "CONTRIBUTOR", + "name": "alextsg", + "url": "https://github.com/alextsg", + "size": 15, + "imageUrl": "https://avatars.githubusercontent.com/u/8051479?v=4", + "contents": "This is one of the main contributors to the overall repository and this part of the repository specifically. Below you can see the contributors latest commits and the button on the right will take you straight to the respective Github profile.", + "commits": [ + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/96a63258d4457b0fef860ae97f968547ed6c9b90", + "message": "Fix JSDoc comments. Rebuild docs", + "time": "2018-12-11T03:51:01Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/d61da4b96db94df9bf232dbdd8451328e819b53c", + "message": "Remove ethereumjs-testing dependency", + "time": "2018-12-08T04:25:06Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/c2da4c34d8001120dfc08aa45e2a9894a7927aab", + "message": "Fix syntax for tests", + "time": "2018-11-28T04:05:51Z" + } + ] + }, + { + "type": "LEGACY", + "name": "index.ts", + "path": "/packages/ethash/src/index.ts", + "size": 222, + "contents": "This file seems pretty big compared to the other files in this part of the project. It's 5764 bytes and has 222 lines of code. That could make it hard to read for new contributors and people looking at the repository. You might want to look into a refactoring in order to keep it at a more readable size. What you could also do is contact one of the contributors to help in understanding what's going on. They must be hiding somewhere in this package as well, try to reveal them to access their Github profiles.", + "fileContents": " this.cache = []\n }\n\n mkcache(cacheSize: number, seed: Buffer) {\n // console.log('generating cache')\n // console.log('size: ' + cacheSize)\n // console.log('seed: ' + seed.toString('hex'))\n const n = Math.floor(cacheSize / params.HASH_BYTES)\n const o = [keccak(seed, 512)]\n", + "fileSize": 5764, + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/blob/master/packages/ethash/src/index.ts" + }, + { + "type": "LEGACY", + "name": "util.ts", + "path": "/packages/ethash/src/util.ts", + "size": 81, + "contents": "This file seems pretty big compared to the other files in this part of the project. It's 2328 bytes and has 81 lines of code. That could make it hard to read for new contributors and people looking at the repository. You might want to look into a refactoring in order to keep it at a more readable size. What you could also do is contact one of the contributors to help in understanding what's going on. They must be hiding somewhere in this package as well, try to reveal them to access their Github profiles.", + "fileContents": "export function getFullSize(epoc: number) {\n const mr = new MR()\n let sz =\n (exports.params.DATASET_BYTES_INIT as number) +\n (exports.params.DATASET_BYTES_GROWTH as number) * epoc\n sz -= exports.params.MIX_BYTES\n while (!mr.test(new BN(sz / exports.params.MIX_BYTES))) {\n sz -= 2 * exports.params.MIX_BYTES\n }\n return sz", + "fileSize": 2328, + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/blob/master/packages/ethash/src/util.ts" + } + ] + }, + { + "name": "trie", + "path": "packages/trie", + "filePath": "/home/dennis/projects/codewanderer/sourceproject/ethereumjs-monorepo/packages/trie", + "size": 202, + "links": [], + "revealables": [ + { + "type": "PACKAGE", + "name": "level-mem", + "path": "path.to.package.json", + "version": "^5.0.1", + "size": 210, + "contents": "This package is used throughout this part of the repository. Below you can see the version that is installed currently. If you want to take a look at the package documentation, past versions and much more, click the button in the lower right corner. It'll lead you to the npmjs website of the package.", + "url": "https://www.npmjs.com/package/level-mem" + }, + { + "type": "PACKAGE", + "name": "level-ws", + "path": "path.to.package.json", + "version": "^2.0.0", + "size": 117, + "contents": "This package is used throughout this part of the repository. Below you can see the version that is installed currently. If you want to take a look at the package documentation, past versions and much more, click the button in the lower right corner. It'll lead you to the npmjs website of the package.", + "url": "https://www.npmjs.com/package/level-ws" + }, + { + "type": "PACKAGE", + "name": "readable-stream", + "path": "path.to.package.json", + "version": "^3.6.0", + "size": 171, + "contents": "This package is used throughout this part of the repository. Below you can see the version that is installed currently. If you want to take a look at the package documentation, past versions and much more, click the button in the lower right corner. It'll lead you to the npmjs website of the package.", + "url": "https://www.npmjs.com/package/readable-stream" + }, + { + "type": "CONTRIBUTOR", + "name": "evertonfraga", + "url": "https://github.com/evertonfraga", + "size": 231, + "imageUrl": "https://avatars.githubusercontent.com/u/47108?v=4", + "contents": "This is one of the main contributors to the overall repository and this part of the repository specifically. Below you can see the contributors latest commits and the button on the right will take you straight to the respective Github profile.", + "commits": [ + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/01243f01a75f5b58e625f1506739a3d4fcd6a484", + "message": "Fixes codecov badges after repo renaming (#1071)", + "time": "2021-01-27T18:12:25Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/342319bf4ad9c5397adb15ba05822f8df726fea7", + "message": "ci: on-demand testing for VM State and Blockchain", + "time": "2020-11-12T22:43:52Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/d40c8df99d44590f6ed25b2a6f8db98f64367dc1", + "message": "ci: removing debug entries", + "time": "2020-11-14T07:08:49Z" + } + ] + }, + { + "type": "CONTRIBUTOR", + "name": "greenkeeper[bot]", + "url": "https://github.com/apps/greenkeeper", + "size": 32, + "imageUrl": "https://avatars.githubusercontent.com/in/505?v=4", + "contents": "This is one of the main contributors to the overall repository and this part of the repository specifically. Below you can see the contributors latest commits and the button on the right will take you straight to the respective Github profile.", + "commits": [] + }, + { + "type": "CONTRIBUTOR", + "name": "mattdean-digicatapult", + "url": "https://github.com/mattdean-digicatapult", + "size": 15, + "imageUrl": "https://avatars.githubusercontent.com/u/29942957?v=4", + "contents": "This is one of the main contributors to the overall repository and this part of the repository specifically. Below you can see the contributors latest commits and the button on the right will take you straight to the respective Github profile.", + "commits": [ + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/784cfeb90b024ef558d116675779e883b7b1e98e", + "message": "Linting fixes", + "time": "2019-01-15T15:31:21Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/a9c3e8c8d4c012b203c0df728b739c2dba7c5a56", + "message": "Clear stateManager cache after setStateRoot", + "time": "2019-01-15T15:21:33Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/eddd9db5a1430631d3482d0c17b21e4b44fc6f60", + "message": "StateManager documentation\n\nInitial `StateManager` documentation. In the process of writing this a couple of inconsistencies in the code were found. Firstly several methods, which should only be called when there are no outstanding checkpoints, were found and updated to error when this is not the case. Secondly the `checkpoint` function was made asynchronous to match other methods.", + "time": "2018-11-19T14:08:08Z" + } + ] + }, + { + "type": "LEGACY", + "name": "baseTrie.ts", + "path": "/packages/trie/src/baseTrie.ts", + "size": 753, + "contents": "This file seems pretty big compared to the other files in this part of the project. It's 21964 bytes and has 753 lines of code. That could make it hard to read for new contributors and people looking at the repository. You might want to look into a refactoring in order to keep it at a more readable size. What you could also do is contact one of the contributors to help in understanding what's going on. They must be hiding somewhere in this package as well, try to reveal them to access their Github profiles.", + "fileContents": " nodeRef: Buffer,\n node: TrieNode | null,\n key: Nibbles,\n walkController: WalkController\n) => void\n\n/**\n * The basic trie interface, use with `import { BaseTrie as Trie } from 'merkle-patricia-tree'`.\n * In Ethereum applications stick with the {@link SecureTrie} overlay.\n * The API for the base and the secure interface are about the same.", + "fileSize": 21964, + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/blob/master/packages/trie/src/baseTrie.ts" + }, + { + "type": "LEGACY", + "name": "trieNode.ts", + "path": "/packages/trie/src/trieNode.ts", + "size": 197, + "contents": "This file seems pretty big compared to the other files in this part of the project. It's 4105 bytes and has 197 lines of code. That could make it hard to read for new contributors and people looking at the repository. You might want to look into a refactoring in order to keep it at a more readable size. What you could also do is contact one of the contributors to help in understanding what's going on. They must be hiding somewhere in this package as well, try to reveal them to access their Github profiles.", + "fileContents": "\n set value(v: Buffer | null) {\n this._value = v\n }\n\n setBranch(i: number, v: EmbeddedNode | null) {\n this._branches[i] = v\n }\n\n raw(): (EmbeddedNode | null)[] {", + "fileSize": 4105, + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/blob/master/packages/trie/src/trieNode.ts" + } + ] + }, + { + "name": "tx", + "path": "packages/tx", + "filePath": "/home/dennis/projects/codewanderer/sourceproject/ethereumjs-monorepo/packages/tx", + "size": 374, + "links": [ + "@ethereumjs/common" + ], + "revealables": [ + { + "type": "CONTRIBUTOR", + "name": "alcuadrado", + "url": "https://github.com/alcuadrado", + "size": 197, + "imageUrl": "https://avatars.githubusercontent.com/u/176499?v=4", + "contents": "This is one of the main contributors to the overall repository and this part of the repository specifically. Below you can see the contributors latest commits and the button on the right will take you straight to the respective Github profile.", + "commits": [ + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/e7cf3d50c48afa97b62cb90f3d4f187fac946f03", + "message": "Remove all the debug traces from the vm", + "time": "2021-04-12T16:16:33Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/36dd340cfd57e2f992e4545c7811aaf94110cd51", + "message": "Add an option to disable the block gas limit check in runTx", + "time": "2021-01-09T22:03:27Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/25254da2bbb5003555b833b015f510a86e94f4ed", + "message": "Add a script to lint dependencies (#770)\n\nOnce we have all checks passing (https://github.com/ethereumjs/ethereumjs-vm/issues/832), we can include it on our regular CI process", + "time": "2020-08-13T20:59:19Z" + } + ] + }, + { + "type": "CONTRIBUTOR", + "name": "dryajov", + "url": "https://github.com/dryajov", + "size": 27, + "imageUrl": "https://avatars.githubusercontent.com/u/1094341?v=4", + "contents": "This is one of the main contributors to the overall repository and this part of the repository specifically. Below you can see the contributors latest commits and the button on the right will take you straight to the respective Github profile.", + "commits": [ + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/41d2bec49abf7e53fdbe7d49866e9f569813fe1a", + "message": "fix: lint", + "time": "2020-03-30T16:14:25Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/4a6cbf45e39d34560baf16e062679b23d89ba5a9", + "message": "fix: lint", + "time": "2020-03-30T16:09:56Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/2273badbc9a782787ef45e7c851c6d8ed5fde2a6", + "message": "Update tsconfig.prod.json\n\nCo-Authored-By: PhilippLgh ", + "time": "2020-03-30T15:53:01Z" + } + ] + }, + { + "type": "CONTRIBUTOR", + "name": "greenkeeperio-bot", + "url": "https://github.com/greenkeeperio-bot", + "size": 15, + "imageUrl": "https://avatars.githubusercontent.com/u/14790466?v=4", + "contents": "This is one of the main contributors to the overall repository and this part of the repository specifically. Below you can see the contributors latest commits and the button on the right will take you straight to the respective Github profile.", + "commits": [ + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/c3b74dd000cd027b15f84cdc5d47bc7e5ce8bb19", + "message": "chore(package): update karma-detect-browsers to version 2.2.5\n\nhttps://greenkeeper.io/", + "time": "2017-03-20T10:58:13Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/f0e3ea1b2d30f3a63153a82e4d117787b1132516", + "message": "chore(package): update dependencies\n\nhttps://greenkeeper.io/", + "time": "2017-02-10T01:09:40Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/6c727ffc0d5624336926faf5bd66a8091f315ef0", + "message": "chore(package): update ethereumjs-tx to version 1.1.4\n\nhttps://greenkeeper.io/", + "time": "2016-11-17T22:12:04Z" + } + ] + }, + { + "type": "LEGACY", + "name": "eip1559Transaction.ts", + "path": "/packages/tx/src/eip1559Transaction.ts", + "size": 414, + "contents": "This file seems pretty big compared to the other files in this part of the project. It's 12677 bytes and has 414 lines of code. That could make it hard to read for new contributors and people looking at the repository. You might want to look into a refactoring in order to keep it at a more readable size. What you could also do is contact one of the contributors to help in understanding what's going on. They must be hiding somewhere in this package as well, try to reveal them to access their Github profiles.", + "fileContents": " */\nexport default class FeeMarketEIP1559Transaction extends BaseTransaction {\n public readonly chainId: BN\n public readonly accessList: AccessListBuffer\n public readonly AccessListJSON: AccessList\n public readonly maxPriorityFeePerGas: BN\n public readonly maxFeePerGas: BN\n\n public readonly common: Common\n", + "fileSize": 12677, + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/blob/master/packages/tx/src/eip1559Transaction.ts" + }, + { + "type": "LEGACY", + "name": "legacyTransaction.ts", + "path": "/packages/tx/src/legacyTransaction.ts", + "size": 385, + "contents": "This file seems pretty big compared to the other files in this part of the project. It's 12073 bytes and has 385 lines of code. That could make it hard to read for new contributors and people looking at the repository. You might want to look into a refactoring in order to keep it at a more readable size. What you could also do is contact one of the contributors to help in understanding what's going on. They must be hiding somewhere in this package as well, try to reveal them to access their Github profiles.", + "fileContents": " * - All parameters are optional and have some basic default values\n */\n public static fromTxData(txData: TxData, opts: TxOptions = {}) {\n return new Transaction(txData, opts)\n }\n\n /**\n * Instantiate a transaction from the serialized tx.\n *\n * Format: `rlp([nonce, gasPrice, gasLimit, to, value, data, v, r, s])`", + "fileSize": 12073, + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/blob/master/packages/tx/src/legacyTransaction.ts" + } + ] + }, + { + "name": "util", + "path": "packages/util", + "filePath": "/home/dennis/projects/codewanderer/sourceproject/ethereumjs-monorepo/packages/util", + "size": 340, + "links": [], + "revealables": [ + { + "type": "PACKAGE", + "name": "bn.js", + "path": "path.to.package.json", + "version": "^5.1.2", + "size": 206, + "contents": "This package is used throughout this part of the repository. Below you can see the version that is installed currently. If you want to take a look at the package documentation, past versions and much more, click the button in the lower right corner. It'll lead you to the npmjs website of the package.", + "url": "https://www.npmjs.com/package/bn.js" + }, + { + "type": "PACKAGE", + "name": "create-hash", + "path": "path.to.package.json", + "version": "^1.1.2", + "size": 55, + "contents": "This package is used throughout this part of the repository. Below you can see the version that is installed currently. If you want to take a look at the package documentation, past versions and much more, click the button in the lower right corner. It'll lead you to the npmjs website of the package.", + "url": "https://www.npmjs.com/package/create-hash" + }, + { + "type": "PACKAGE", + "name": "ethereum-cryptography", + "path": "path.to.package.json", + "version": "^0.1.3", + "size": 108, + "contents": "This package is used throughout this part of the repository. Below you can see the version that is installed currently. If you want to take a look at the package documentation, past versions and much more, click the button in the lower right corner. It'll lead you to the npmjs website of the package.", + "url": "https://www.npmjs.com/package/ethereum-cryptography" + }, + { + "type": "CONTRIBUTOR", + "name": "kumavis", + "url": "https://github.com/kumavis", + "size": 185, + "imageUrl": "https://avatars.githubusercontent.com/u/1474978?v=4", + "contents": "This is one of the main contributors to the overall repository and this part of the repository specifically. Below you can see the contributors latest commits and the button on the right will take you straight to the respective Github profile.", + "commits": [ + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/5807f4bdc073c6986cea3835d290d98c0bab9044", + "message": "fix: remove references to old synchronize event stats obj", + "time": "2019-05-13T09:38:01Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/bc6e779f8a8b42a1586ef1b734dd58ada91bab78", + "message": "fix(doc): \"npm r\" is not an alias for \"npm run\"", + "time": "2019-05-13T07:43:17Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/78d323cd93b7074b60c01c88416150b32a0ca648", + "message": "fix(browser): correctly import ethereumjs-common", + "time": "2019-05-13T07:40:50Z" + } + ] + }, + { + "type": "CONTRIBUTOR", + "name": "tcoulter", + "url": "https://github.com/tcoulter", + "size": 24, + "imageUrl": "https://avatars.githubusercontent.com/u/92629?v=4", + "contents": "This is one of the main contributors to the overall repository and this part of the repository specifically. Below you can see the contributors latest commits and the button on the right will take you straight to the respective Github profile.", + "commits": [ + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/aea11d1d3e0dd7215e03f5ea25993d641d78f08d", + "message": "Typo fix: StateManger => StateManager", + "time": "2020-08-20T19:20:00Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/5c985f574a5fad9d64203bb1f5715818fe1634ca", + "message": "Remove extra comment.", + "time": "2016-04-01T18:58:07Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/daf4ebd6120258e696e958c5ca6c086a159130fa", + "message": "Fix some issues brought up by @wanderer", + "time": "2016-04-01T18:55:27Z" + } + ] + }, + { + "type": "CONTRIBUTOR", + "name": "sdtsui", + "url": "https://github.com/sdtsui", + "size": 13, + "imageUrl": "https://avatars.githubusercontent.com/u/8230144?v=4", + "contents": "This is one of the main contributors to the overall repository and this part of the repository specifically. Below you can see the contributors latest commits and the button on the right will take you straight to the respective Github profile.", + "commits": [ + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/fb2172e310ed337a402c2393e0261f476c833fa1", + "message": "Fix lint errors in opFns, runCode, and test hooks", + "time": "2017-07-10T06:20:48Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/001033c508d6ee4219574fa05ddb27228cc8831f", + "message": "Add @inclu-media\\'s use of BN in checkOutofGas", + "time": "2017-07-05T17:59:27Z" + }, + { + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/commit/78357ebd76b36352ca8b7b73b1cb436218c083ec", + "message": "Cleanup, remove commented code", + "time": "2017-07-05T02:05:31Z" + } + ] + }, + { + "type": "LEGACY", + "name": "account.ts", + "path": "/packages/util/src/account.ts", + "size": 320, + "contents": "This file seems pretty big compared to the other files in this part of the project. It's 9203 bytes and has 320 lines of code. That could make it hard to read for new contributors and people looking at the repository. You might want to look into a refactoring in order to keep it at a more readable size. What you could also do is contact one of the contributors to help in understanding what's going on. They must be hiding somewhere in this package as well, try to reveal them to access their Github profiles.", + "fileContents": " const { nonce, balance, stateRoot, codeHash } = accountData\n\n return new Account(\n nonce ? new BN(toBuffer(nonce)) : undefined,\n balance ? new BN(toBuffer(balance)) : undefined,\n stateRoot ? toBuffer(stateRoot) : undefined,\n codeHash ? toBuffer(codeHash) : undefined\n )\n }\n", + "fileSize": 9203, + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/blob/master/packages/util/src/account.ts" + }, + { + "type": "LEGACY", + "name": "bytes.ts", + "path": "/packages/util/src/bytes.ts", + "size": 228, + "contents": "This file seems pretty big compared to the other files in this part of the project. It's 5795 bytes and has 228 lines of code. That could make it hard to read for new contributors and people looking at the repository. You might want to look into a refactoring in order to keep it at a more readable size. What you could also do is contact one of the contributors to help in understanding what's going on. They must be hiding somewhere in this package as well, try to reveal them to access their Github profiles.", + "fileContents": " if (msg.length < length) {\n msg.copy(buf, length - msg.length)\n return buf\n }\n return msg.slice(-length)\n }\n}\n\n/**\n * Left Pads a `Buffer` with leading zeros till it has `length` bytes.", + "fileSize": 5795, + "url": "https://github.com/ethereumjs/ethereumjs-monorepo/blob/master/packages/util/src/bytes.ts" } ] } ] -} +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index f151f38..3b34ea2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1157,6 +1157,296 @@ "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": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", @@ -1179,6 +1469,108 @@ "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", "dev": true }, + "@octokit/auth-token": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.5.tgz", + "integrity": "sha512-BpGYsPgJt05M7/L/5FoE1PiAbdxXFZkX/3kDYcsvd1v6UhlnE5e96dTDr0ezX/EFwciQxf3cNV0loipsURU+WA==", + "dev": true, + "requires": { + "@octokit/types": "^6.0.3" + } + }, + "@octokit/core": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.5.1.tgz", + "integrity": "sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==", + "dev": true, + "requires": { + "@octokit/auth-token": "^2.4.4", + "@octokit/graphql": "^4.5.8", + "@octokit/request": "^5.6.0", + "@octokit/request-error": "^2.0.5", + "@octokit/types": "^6.0.3", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/endpoint": { + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", + "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", + "dev": true, + "requires": { + "@octokit/types": "^6.0.3", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true + } + } + }, + "@octokit/graphql": { + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.6.4.tgz", + "integrity": "sha512-SWTdXsVheRmlotWNjKzPOb6Js6tjSqA2a8z9+glDJng0Aqjzti8MEWOtuT8ZSu6wHnci7LZNuarE87+WJBG4vg==", + "dev": true, + "requires": { + "@octokit/request": "^5.6.0", + "@octokit/types": "^6.0.3", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/openapi-types": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-9.4.0.tgz", + "integrity": "sha512-rKRkXikOJgDNImPl49IJuECLVXjj+t4qOXHhl8SBjMQCGGp1w4m5Ud/0kfdUx+zCpTvBN8vaOUDF4nnboZoOtQ==", + "dev": true + }, + "@octokit/request": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.0.tgz", + "integrity": "sha512-4cPp/N+NqmaGQwbh3vUsYqokQIzt7VjsgTYVXiwpUP2pxd5YiZB2XuTedbb0SPtv9XS7nzAKjAuQxmY8/aZkiA==", + "dev": true, + "requires": { + "@octokit/endpoint": "^6.0.1", + "@octokit/request-error": "^2.1.0", + "@octokit/types": "^6.16.1", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.1", + "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true + } + } + }, + "@octokit/request-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", + "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", + "dev": true, + "requires": { + "@octokit/types": "^6.0.3", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "@octokit/types": { + "version": "6.24.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.24.0.tgz", + "integrity": "sha512-MfEimJeQ8AV1T2nI5kOfHqsqPHaAnG0Dw3MVoHSEsEq6iLKx2N91o+k2uAgXhPYeSE76LVBqjgTShnFFgNwe0A==", + "dev": true, + "requires": { + "@octokit/openapi-types": "^9.4.0" + } + }, "@parcel/fs": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-1.11.0.tgz", @@ -1229,6 +1621,75 @@ "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=" + }, + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "requires": { + "defer-to-connect": "^1.0.1" + } + }, "@types/animejs": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/animejs/-/animejs-3.1.4.tgz", @@ -1241,6 +1702,16 @@ "integrity": "sha512-7eQ2xYLLI/LsicL2nejW9Wyko3lcpN6O/z0ZLHrEQsg280zIdCv1t/0m6UtBjUHokCGBQ3gYTbHzDkZ1xOBwwg==", "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": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@types/p5/-/p5-1.3.0.tgz", @@ -1259,6 +1730,12 @@ "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", "dev": true }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, "acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", @@ -1312,6 +1789,55 @@ "resolved": "https://registry.npmjs.org/animejs/-/animejs-3.2.1.tgz", "integrity": "sha512-sWno3ugFryK5nhiDm/2BKeFCpZv7vzerWUcUPyAZLDhMek3+S/p418ldZJbJXo5ZUOpfm2kP2XRO4NJcULMy9A==" }, + "ansi-align": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "dev": true, + "requires": { + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", @@ -1643,6 +2169,12 @@ "tweetnacl": "^0.14.3" } }, + "before-after-hook": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", + "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", + "dev": true + }, "binary-extensions": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", @@ -1670,6 +2202,73 @@ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", "dev": true }, + "boxen": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "dev": true, + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "cli-boxes": "^2.2.0", + "string-width": "^4.1.0", + "term-size": "^2.1.0", + "type-fest": "^0.8.1", + "widest-line": "^3.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1879,6 +2478,44 @@ "unset-value": "^1.0.0" } }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + }, + "normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true + } + } + }, "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -1919,6 +2556,12 @@ "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", "dev": true }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, "caniuse-api": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", @@ -1974,6 +2617,12 @@ "upath": "^1.1.1" } }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", @@ -2044,6 +2693,12 @@ } } }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true + }, "cli-cursor": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", @@ -2059,12 +2714,46 @@ "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==", "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": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", "dev": true }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, "coa": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", @@ -2172,6 +2861,20 @@ "typedarray": "^0.0.6" } }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, "console-browserify": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", @@ -2318,6 +3021,12 @@ "randomfill": "^1.0.3" } }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true + }, "css-color-names": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", @@ -2638,6 +3347,21 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", @@ -2661,6 +3385,12 @@ } } }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -2692,6 +3422,12 @@ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true }, + "deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", + "dev": true + }, "des.js": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", @@ -2745,6 +3481,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": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", @@ -2815,6 +3556,12 @@ "readable-stream": "^2.0.2" } }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -2860,12 +3607,26 @@ } } }, + "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": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "dev": true }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, "entities": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", @@ -2933,7 +3694,12 @@ "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", "dev": true }, "escape-html": { @@ -3193,6 +3959,14 @@ "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", "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": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", @@ -3217,6 +3991,28 @@ "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": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -3284,12 +4080,32 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "gar": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/gar/-/gar-1.0.4.tgz", + "integrity": "sha512-w4n9cPWyP7aHxKxYHFQMegj7WIAsL/YX/C4Bs5Rr8s1H9M1rNtRWRsw+ovYMkXDQ5S4ZbYHsHAPmevPjPgw44w==", + "dev": true + }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "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-folder-size": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/get-folder-size/-/get-folder-size-3.1.0.tgz", + "integrity": "sha512-/I7q+x1HCd22IXP4+kp2Wkz8+au7VfNwNyMfM4Z0gwaTMs+dJ1ShXUWDGSWXi+rDU59MI/j7NBP7+kd7zejnPw==", + "dev": true, + "requires": { + "gar": "^1.0.4" + } + }, "get-intrinsic": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", @@ -3307,6 +4123,15 @@ "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=", "dev": true }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -3363,12 +4188,40 @@ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", "dev": true }, + "global-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", + "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", + "dev": true, + "requires": { + "ini": "1.3.7" + } + }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } + }, "graceful-fs": { "version": "4.2.6", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", @@ -3477,6 +4330,12 @@ } } }, + "has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true + }, "hash-base": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", @@ -3698,6 +4557,12 @@ } } }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, "http-errors": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", @@ -3711,6 +4576,11 @@ "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": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -3743,12 +4613,23 @@ "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", "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": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true + }, "import-fresh": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", @@ -3759,6 +4640,18 @@ "resolve-from": "^3.0.0" } }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, "indexes-of": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", @@ -3781,6 +4674,12 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "ini": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", + "dev": true + }, "is-absolute-url": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", @@ -3846,6 +4745,15 @@ "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", "dev": true }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, "is-color-stop": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", @@ -3929,6 +4837,11 @@ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "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": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", @@ -3947,12 +4860,28 @@ "html-tags": "^1.0.0" } }, + "is-installed-globally": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "dev": true, + "requires": { + "global-dirs": "^2.0.1", + "is-path-inside": "^3.0.1" + } + }, "is-negative-zero": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", "dev": true }, + "is-npm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", + "dev": true + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -3974,6 +4903,12 @@ "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -4038,6 +4973,12 @@ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", "dev": true }, + "is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -4154,6 +5095,12 @@ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -4199,6 +5146,15 @@ "verror": "1.10.0" } }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -4208,6 +5164,15 @@ "is-buffer": "^1.1.5" } }, + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "requires": { + "package-json": "^6.3.0" + } + }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -4223,6 +5188,11 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "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": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz", @@ -4262,6 +5232,17 @@ "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==" + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, "magic-string": { "version": "0.22.5", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", @@ -4271,6 +5252,23 @@ "vlq": "^0.2.2" } }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -4419,6 +5417,12 @@ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -4476,6 +5480,11 @@ "minimist": "^1.2.5" } }, + "moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -4547,6 +5556,11 @@ "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", "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": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", @@ -4590,6 +5604,143 @@ "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", "dev": true }, + "nodemon": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.12.tgz", + "integrity": "sha512-egCTmNZdObdBxUBw6ZNwvZ/xzk24CKRs5K6d+5zbmrMr7rOpPmfPeF6OxM3DDpaRx331CQRFEktn+wrFFfBSOA==", + "dev": true, + "requires": { + "chokidar": "^3.2.2", + "debug": "^3.2.6", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.7", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.3", + "update-notifier": "^4.1.0" + }, + "dependencies": { + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -4822,11 +5973,37 @@ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true + }, "p5": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/p5/-/p5-1.4.0.tgz", "integrity": "sha512-U888W2ChcIzPhRhnv4FkNhaa4f5BDIWZfLhzvx9ZrQ5KtkZr/+o1UPIicV3yWTRy0HEG23NviHyDR3kgjaJ9wA==" }, + "package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "requires": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, "pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", @@ -5508,6 +6685,12 @@ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, "prettier": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz", @@ -5526,12 +6709,43 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "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": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", "dev": true }, + "pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, "public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", @@ -5554,12 +6768,31 @@ } } }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true }, + "pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, + "requires": { + "escape-goat": "^2.0.0" + } + }, "purgecss": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-2.3.0.tgz", @@ -5660,6 +6893,18 @@ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -5772,6 +7017,24 @@ "unicode-match-property-value-ecmascript": "^1.2.0" } }, + "registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, "regjsgen": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", @@ -5867,6 +7130,11 @@ "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": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", @@ -5889,6 +7157,15 @@ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, "restore-cursor": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", @@ -5947,8 +7224,7 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "safe-regex": { "version": "1.1.0", @@ -6096,6 +7372,23 @@ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, + "semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "requires": { + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, "send": { "version": "0.17.1", "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", @@ -6593,6 +7886,31 @@ "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": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", @@ -6639,6 +7957,12 @@ "ansi-regex": "^3.0.0" } }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, "stylehacks": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", @@ -6699,6 +8023,12 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, + "term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true + }, "terser": { "version": "3.17.0", "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", @@ -6762,6 +8092,12 @@ "kind-of": "^3.0.2" } }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true + }, "to-regex": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", @@ -6811,6 +8147,15 @@ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", "dev": true }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "requires": { + "nopt": "~1.0.10" + } + }, "tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", @@ -6881,12 +8226,27 @@ "prelude-ls": "~1.1.2" } }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, "typescript": { "version": "4.3.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", @@ -6941,6 +8301,32 @@ } } }, + "undefsafe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", + "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", + "dev": true, + "requires": { + "debug": "^2.2.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", @@ -7011,6 +8397,21 @@ "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", "dev": true }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "universal-user-agent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", + "dev": true + }, "unquote": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", @@ -7063,6 +8464,78 @@ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", "dev": true }, + "update-notifier": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", + "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", + "dev": true, + "requires": { + "boxen": "^4.2.0", + "chalk": "^3.0.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.3.1", + "is-npm": "^4.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.0.0", + "pupa": "^2.0.1", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -7104,6 +8577,15 @@ } } }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "requires": { + "prepend-http": "^2.0.0" + } + }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -7221,6 +8703,21 @@ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", "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": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", @@ -7230,6 +8727,11 @@ "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": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", @@ -7269,18 +8771,85 @@ "is-symbol": "^1.0.3" } }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "requires": { + "string-width": "^4.0.0" + } + }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "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": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, "ws": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.3.tgz", @@ -7290,6 +8859,12 @@ "async-limiter": "~1.0.0" } }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true + }, "xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", @@ -7302,12 +8877,41 @@ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "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": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "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": { "version": "3.5.7", "resolved": "https://registry.npmjs.org/zustand/-/zustand-3.5.7.tgz", diff --git a/package.json b/package.json index 1ab2615..a054f63 100644 --- a/package.json +++ b/package.json @@ -5,15 +5,23 @@ "repository": "git@github.com:dennisschoepf/codewanderer.git", "author": "Dennis Schoepf ", "license": "MIT", + "type": "module", "scripts": { "dev": "parcel index.html", "build": "parcel build index.html", - "deploy": "./deploy.sh" + "deploy": "./deploy.sh", + "dev:meta": "nodemon --ignore '**/*.json' ./scripts/get-metadata.js", + "generate": "node ./scripts/get-metadata.js" }, "devDependencies": { + "@octokit/core": "^3.5.1", "@types/animejs": "^3.1.4", "@types/lodash": "^4.14.171", "@types/p5": "^1.3.0", + "get-folder-size": "^3.1.0", + "glob": "^7.1.7", + "node-fetch": "^2.6.1", + "nodemon": "^2.0.12", "parcel-bundler": "^1.12.5", "prettier": "^2.3.2", "sass": "^1.35.2", @@ -21,7 +29,9 @@ }, "dependencies": { "animejs": "^3.2.1", + "firebase": "^8.8.1", "lodash": "^4.17.21", + "moment": "^2.29.1", "p5": "^1.4.0", "rxjs": "^7.2.0", "zustand": "^3.5.7" diff --git a/scripts/get-metadata.js b/scripts/get-metadata.js new file mode 100644 index 0000000..b46c9f0 --- /dev/null +++ b/scripts/get-metadata.js @@ -0,0 +1,66 @@ +import { resolve } from 'path'; +import { readdir, writeFile } from 'fs/promises'; +import getItemSize from 'get-folder-size'; +import { + getLegaciesForSubproject, + getLinksForSubproject, + getPackagesForSubproject, + getProjectContributors, +} from './helpers.js'; + +const __dirname = resolve(); +export const PROJECT_PATH = resolve(__dirname, 'sourceproject/ethereumjs-monorepo'); +export const SUBPACKAGE_PATH = resolve(PROJECT_PATH, 'packages'); + +const main = async () => { + const subprojectPaths = await readdir(SUBPACKAGE_PATH); + const subprojectOverviewData = await Promise.all( + subprojectPaths.map(async (subprojectPath) => { + const size = await getItemSize.loose(resolve(PROJECT_PATH, SUBPACKAGE_PATH, subprojectPath)); + + return { + name: subprojectPath, + path: `packages/${subprojectPath}`, + filePath: resolve(PROJECT_PATH, SUBPACKAGE_PATH, subprojectPath), + size: Math.floor(size * 0.001), + }; + }) + ); + + const subprojects = subprojectOverviewData.filter( + (subprojectData) => subprojectData.name !== 'vm' && subprojectData.name !== 'ethereum-tests' + ); + + const projectContributors = await getProjectContributors(); + + const subprojectsWithRevealables = await Promise.all( + subprojects.map(async (subproject, i) => { + const packages = await getPackagesForSubproject(subproject); + const links = await getLinksForSubproject(subproject); + const legacies = await getLegaciesForSubproject(subproject); + const contributors = [ + projectContributors[0 + i], + projectContributors[10 + i], + projectContributors[20 + i], + ]; + + return { + ...subproject, + links, + revealables: [...packages, ...contributors, ...legacies], + }; + }) + ); + + const jsonToWrite = JSON.stringify( + { + subprojects: subprojectsWithRevealables, + }, + null, + 2 + ); + + writeFile(resolve(__dirname, 'metadata/project.json'), jsonToWrite); +}; + +main(); diff --git a/scripts/helpers.js b/scripts/helpers.js new file mode 100644 index 0000000..895b7d6 --- /dev/null +++ b/scripts/helpers.js @@ -0,0 +1,154 @@ +import { resolve, basename } from 'path'; +import { readFile } from 'fs/promises'; +import { promisify } from 'util'; +import { Octokit } from '@octokit/core'; +import child_process from 'child_process'; +import nodeGlob from 'glob'; +import { PROJECT_PATH, SUBPACKAGE_PATH } from './get-metadata.js'; +import getItemSize from 'get-folder-size'; + +const exec = promisify(child_process.exec); +const glob = promisify(nodeGlob); + +const octokit = new Octokit({ + auth: '', +}); + +export async function getLegaciesForSubproject(subproject) { + // Get all paths to project files + const files = await glob(resolve(SUBPACKAGE_PATH, subproject.name, '**/*.ts')); + const filteredFilePaths = files.filter( + (filePath) => + !filePath.includes('spec.') && !filePath.includes('/test/') && !filePath.includes('@types') + ); + + // Get line counts for files + const filesWithWordCounts = await Promise.all( + filteredFilePaths.map(async (filteredFilePath) => { + const { stdout } = await exec(`wc -l < ${filteredFilePath}`); + + return { + path: filteredFilePath, + count: Number(stdout.replace('\n', '')), + }; + }) + ); + + const largestFiles = filesWithWordCounts + .sort((fwcA, fwcB) => fwcB.count - fwcA.count) + .slice(0, 2); + + // Transform to legacy object + const legacies = await Promise.all( + largestFiles.map(async (largeFile) => await createLegacy(largeFile)) + ); + + // Return 2 highest line counts + return legacies; +} + +export async function getProjectContributors() { + const contribs = await octokit.request('/repos/ethereumjs/ethereumjs-monorepo/contributors'); + const contributors = await Promise.all( + contribs.data.map(async (contrib) => await createContributor(contrib)) + ); + + return contributors; +} + +export async function getLinksForSubproject(subproject) { + const subprojectPackageJson = await readFile( + resolve(subproject.filePath, 'package.json'), + 'utf8' + ); + const { dependencies } = JSON.parse(subprojectPackageJson); + const links = Object.keys(dependencies).filter((dependency) => + dependency.includes('@ethereumjs') + ); + + return links; +} + +export async function getPackagesForSubproject(subproject) { + const subprojectPackageJson = await readFile( + resolve(subproject.filePath, 'package.json'), + 'utf8' + ); + const { dependencies } = JSON.parse(subprojectPackageJson); + const relevantDependencies = Object.keys(dependencies) + .filter((dependency) => !dependency.includes('ethereumjs') && !dependency.includes('@types')) + .slice(0, 3) + .map((dependencyKey) => ({ + name: dependencyKey, + version: dependencies[dependencyKey], + })); + + const formattedDependencies = relevantDependencies.map((dep) => createPackage(dep)); + + return formattedDependencies; +} + +const createContributor = async (contrib) => { + if (!contrib) return; + + let commits; + + try { + const rawCommits = await octokit.request(`/repos/ethereumjs/ethereumjs-monorepo/commits`, { + author: contrib.login, + }); + + const lastRawCommits = rawCommits.data.slice(0, 3); + + commits = lastRawCommits.map((commit) => ({ + url: commit.html_url, + message: commit.commit.message, + time: commit.commit.author.date, + })); + } catch (e) {} + + return { + type: 'CONTRIBUTOR', + name: contrib.login, + url: contrib.html_url, + size: contrib.contributions, + imageUrl: contrib.avatar_url, + contents: + 'This is one of the main contributors to the overall repository and this part of the repository specifically. Below you can see the contributors latest commits and the button on the right will take you straight to the respective Github profile.', + commits, + }; +}; + +const createPackage = ({ name, version }) => { + const path = 'path.to.package.json'; + const size = Math.floor(Math.random() * 250) + 50; + + return { + type: 'PACKAGE', + name, + path, + version, + size, + contents: `This package is used throughout this part of the repository. Below you can see the version that is installed currently. If you want to take a look at the package documentation, past versions and much more, click the button in the lower right corner. It'll lead you to the npmjs website of the package.`, + url: `https://www.npmjs.com/package/${name}`, + }; +}; + +const createLegacy = async ({ path, count }) => { + const fileSize = await getItemSize(path); + const rawFileContents = await readFile(path, 'utf-8'); + const projectPath = path.replace(PROJECT_PATH, ''); + + const fileContents = rawFileContents.replace(/\r\n/g, '\n').split('\n').slice(30, 40).join('\n'); + + return { + type: 'LEGACY', + name: basename(projectPath), + path: projectPath, + size: count, + contents: `This file seems pretty big compared to the other files in this part of the project. It's ${fileSize.size} bytes and has ${count} lines of code. That could make it hard to read for new contributors and people looking at the repository. You might want to look into a refactoring in order to keep it at a more readable size. What you could also do is contact one of the contributors to help in understanding what's going on. They must be hiding somewhere in this package as well, try to reveal them to access their Github profiles.`, + fileContents, + fileSize: fileSize.size, + url: `https://github.com/ethereumjs/ethereumjs-monorepo/blob/master${projectPath}`, + }; +}; diff --git a/src/helpers.ts b/src/helpers.ts index bce806b..4f76a5f 100644 --- a/src/helpers.ts +++ b/src/helpers.ts @@ -1,7 +1,7 @@ import { mp5 } from '../main'; import { SCREEN_HEIGHT, SCREEN_WIDTH } from './constants/screen'; import { Edge } from './sketchObjects/Edge'; -import { RevealableInterface, RevealableTypes } from './sketchObjects/Revealable'; +import { Revealable, RevealableInterface, RevealableTypes } from './sketchObjects/Revealable'; import { Coordinates, JSONSubproject, SubProject } from './types'; export function getEdgeDimensions({ size }: JSONSubproject): number { @@ -11,8 +11,8 @@ export function getEdgeDimensions({ size }: JSONSubproject): number { export function generateRandomEdgeCoordinates(): Coordinates { return { - x: mp5.random(150, SCREEN_WIDTH - 150), - y: mp5.random(150, SCREEN_HEIGHT - 150), + x: mp5.random(200, SCREEN_WIDTH - 200), + y: mp5.random(200, SCREEN_HEIGHT - 200), }; } @@ -90,17 +90,37 @@ export function getRevealablesforSubproject( })); } -export function generateRevealableCoords(): Coordinates[] { - const areaWidth = mp5.width / 3; - const rowHeight = mp5.height / 2; +export function generateRevealableCoords(existingRevealables: Revealable[]): Coordinates { + let newCoords: Coordinates; + const existingCoordinates = existingRevealables.map(({ area }) => ({ x: area.x, y: area.y })); - // Max. 6 revealables one in each area - return [ - { x: mp5.random(25, areaWidth), y: mp5.random(25, rowHeight) }, - { x: mp5.random(areaWidth, areaWidth * 2), y: mp5.random(25, rowHeight) }, - { x: mp5.random(areaWidth * 2, areaWidth * 3), y: mp5.random(25, rowHeight) }, - { x: mp5.random(25, areaWidth), y: mp5.random(rowHeight, rowHeight * 2) }, - { x: mp5.random(areaWidth, areaWidth * 2), y: mp5.random(rowHeight, rowHeight * 2) }, - { x: mp5.random(areaWidth * 2, areaWidth * 3), y: mp5.random(rowHeight, rowHeight * 2) }, - ]; + if (existingRevealables.length === 0) { + return generateRandomEdgeCoordinates(); + } else { + do { + newCoords = generateRandomEdgeCoordinates(); + } while (isColliding(newCoords, existingCoordinates)); + } + + return newCoords; +} + +export function generateRevealables(revealables: RevealableInterface[]): Revealable[] { + let revObjs = []; + + revealables.forEach((revealable) => { + const coordinates = generateRevealableCoords(revObjs); + revObjs.push({ + revealable, + area: { + x: coordinates.x, + y: coordinates.y, + w: revealable.size < 50 ? 50 : revealable.size > 400 ? 400 : revealable.size, + }, + }); + }); + + console.log(revObjs); + + return revObjs.map((revObj) => new Revealable(revObj.revealable, revObj.area)); } diff --git a/src/logger.ts b/src/logger.ts new file mode 100644 index 0000000..67f2a30 --- /dev/null +++ b/src/logger.ts @@ -0,0 +1,89 @@ +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; + + if (uid) { + const logEvKey = this.database.ref(uid).child('logs').push().key; + + this.database.ref(uid).update({ [`logs/${logEvKey}`]: ev }); + } + } + + public logPersonalData( + name: string, + age: number, + background: string, + experience: string, + anonymous: boolean + ) { + const uid = store.getState().uid; + + this.database.ref(uid).set({ + name, + age, + background, + experience, + anonymous, + }); + } + + public logQuestions(answers: string[], isKQ: boolean = false) { + const uid = store.getState().uid; + + this.database + .ref(uid) + .child(`${isKQ ? 'knowledge' : 'general'}Questions`) + .set(answers); + } +} + +export const logger = new Logger(); diff --git a/src/scenes/DetailScene.ts b/src/scenes/DetailScene.ts index 47aa3c2..b347fda 100644 --- a/src/scenes/DetailScene.ts +++ b/src/scenes/DetailScene.ts @@ -1,9 +1,10 @@ import _ from 'lodash'; import { mp5 } from '../../main'; import { colors } from '../constants/colors'; -import { generateRevealableCoords } from '../helpers'; +import { generateRevealables } from '../helpers'; +import { logger } from '../logger'; import { Player } from '../sketchObjects/Player'; -import { Revealable, RevealableInterface } from '../sketchObjects/Revealable'; +import { Revealable, RevealableInterface, RevealableTypes } from '../sketchObjects/Revealable'; import store from '../store'; import { Coordinates } from '../types'; import { CompanionState } from '../ui/companion'; @@ -14,6 +15,9 @@ export class DetailScene { revealables: RevealableInterface[]; revealableCoords: Coordinates[]; revealableObjects: Revealable[]; + startTime?: number = null; + wasInteractedWith: boolean = false; + wasHovered: boolean = false; constructor() { this.player = new Player(); @@ -21,20 +25,35 @@ export class DetailScene { store.subscribe((state, prevState) => { if (!_.isEqual(state.revealables, prevState.revealables)) { this.revealables = state.revealables; - this.revealableCoords = generateRevealableCoords(); - this.revealableObjects = this.revealables.map( - (revealable, i) => - new Revealable(revealable, { - x: this.revealableCoords[i].x, - y: this.revealableCoords[i].y, - w: this.revealables[i].size, - }) - ); + this.revealableObjects = generateRevealables(this.revealables); + console.log(this.revealableObjects); } }); } draw() { + if (this.startTime === null) { + this.startTime = mp5.millis(); + } + + if (mp5.millis() > this.startTime + 6000 && !this.wasInteractedWith) { + this.wasInteractedWith = true; + store.getState().addUserMessage({ + inputWanted: false, + text: 'Trouble knowing what to do? You should try clicking somewhere in order to spawn reveal bubbles. Try this in different parts of the canvas to see what you can find', + }); + } else if ( + mp5.millis() > this.startTime + 16000 && + !this.wasHovered && + this.wasInteractedWith + ) { + this.wasHovered = true; + store.getState().addUserMessage({ + inputWanted: false, + text: "Good job with your reveal bubbles, in order to truly find out what is important in this part of the project, try to catch the revealed objects with your character's head to be able to interact with them.", + }); + } + mp5.background(mp5.color(colors.greyLighter)); this.player.drawOnReveal(); @@ -44,20 +63,36 @@ export class DetailScene { revObj.draw(); }); + store.setState({ + revealablesFinished: this.revealableObjects.filter((revObj) => revObj.wasInteractedWith) + .length, + }); + this.player.move(); if ( this.revealableObjects.every((revObj) => revObj.wasInteractedWith) && - !(store.getState().companionState === CompanionState.ACTIVE) + !(store.getState().companionState === CompanionState.ACTIVE) && + !store.getState().infoMessageShown ) { - store.setState((state) => ({ - finishedSubProjects: [...state.finishedSubProjects, state.currentSubproject], - })); - + if (!store.getState().finishedSubProjects.includes(store.getState().currentSubproject)) { + store.setState((state) => ({ + finishedSubProjects: [...state.finishedSubProjects, state.currentSubproject], + })); + } store.getState().addUserMessage({ text: "Yaay! You've found all of the important parts of this part of the repository. You will be returned to the subproject overview now. Pick the next subproject you want to take a look at there.", inputWanted: false, - onNext: () => store.setState({ currentScene: Scenes.OVERVIEW }), + onNext: () => { + logger.log({ + type: 'SF', + timestamp: Date.now(), + message: `Finished subprojects: ${JSON.stringify( + store.getState().finishedSubProjects + )}`, + }); + store.setState({ showScore: false, currentScene: Scenes.OVERVIEW }); + }, showIdle: false, }); } @@ -66,9 +101,27 @@ export class DetailScene { onSceneClick() { this.revealableObjects.forEach((revObj) => { 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; revObj.onClick(); } else { + logger.log({ + type: 'RC', + timestamp: Date.now(), + }); + this.player.reveal(); + this.wasInteractedWith = true; } }); } diff --git a/src/scenes/OverviewScene.ts b/src/scenes/OverviewScene.ts index 1dba359..ed57536 100644 --- a/src/scenes/OverviewScene.ts +++ b/src/scenes/OverviewScene.ts @@ -6,13 +6,14 @@ import store from '../store'; import { generateEdges } from '../helpers'; import { Scenes } from './scenes'; import projectMetadata from '../../metadata/project.json'; -import { playerHead$ } from '../area'; import { Area } from '../types'; +import { logger } from '../logger'; export class OverviewScene { player: Player; playerHead: Area; edges: Edge[]; + sfLogged: boolean; constructor() { this.edges = generateEdges(projectMetadata.subprojects); @@ -30,14 +31,47 @@ export class OverviewScene { public onSceneClick() { this.edges.forEach((edge, i) => { const dist = mp5.dist(mp5.mouseX, mp5.mouseY, edge.x, edge.y); - if (dist < edge.r) { + if (dist < edge.currentSize) { + logger.log({ + type: 'OC', + timestamp: Date.now(), + message: 'Click inside edge', + }); + store.getState().setProjectMetadata(edge.name); - store.setState({ currentSubproject: edge.name, currentScene: Scenes.DETAIL }); + store.setState({ + showScore: true, + currentSubproject: edge.name, + currentScene: Scenes.DETAIL, + }); + } else { + logger.log({ + type: 'OC', + timestamp: Date.now(), + message: 'Click outside edge', + }); } }); } private drawLocations() { + if (store.getState().finishedSubProjects.length === 3 && !store.getState().finishedGame) { + store.setState({ finishedGame: true }); + + setTimeout(() => { + logger.log({ + timestamp: Date.now(), + type: 'GF', + }); + + 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!", + inputWanted: false, + onNext: () => store.setState({ currentIntroStep: 5 }), + }); + }, 800); + } + this.edges.forEach((edgeShape) => { if (store.getState().finishedSubProjects.some((fsp) => fsp === edgeShape.name)) { edgeShape.finished = true; diff --git a/src/sketchObjects/Revealable.ts b/src/sketchObjects/Revealable.ts index 98aed78..4af7cad 100644 --- a/src/sketchObjects/Revealable.ts +++ b/src/sketchObjects/Revealable.ts @@ -2,8 +2,10 @@ import { combineLatest } from 'rxjs'; import { mp5 } from '../../main'; import { areasColliding, playerHead$, revealedArea$ } from '../area'; import { colors } from '../constants/colors'; +import { logger } from '../logger'; import store from '../store'; import { Area } from '../types'; +import { Commit } from '../ui/info'; export enum RevealableTypes { LEGACY = 'LEGACY', @@ -19,6 +21,9 @@ export interface RevealableInterface { size: number; path?: string; imageUrl?: string; + version?: string; + commits?: Commit[]; + fileContents?: string; } enum RevealableStates { @@ -38,10 +43,14 @@ export class Revealable { contents: string; url: string; imageUrl: string; + version: string; + commits: Commit[]; + fileContents: string; isHovered: boolean; isRevealed: boolean; wasInteractedWith: boolean; + wasRevealed: boolean; minSize: number = 5; currentSize: number; @@ -51,12 +60,28 @@ export class Revealable { pulseOpacity: number = 255; pulseCountUp: boolean; - constructor({ type, name, path, contents, url, imageUrl }: RevealableInterface, area: Area) { + constructor( + { + type, + name, + path, + contents, + url, + imageUrl, + version, + commits, + fileContents, + }: RevealableInterface, + area: Area + ) { this.type = type; this.name = name; this.path = path; this.contents = contents; this.url = url; + this.version = version; + this.commits = commits; + this.fileContents = fileContents; this.imageUrl = imageUrl; this.area = area; this.currentSize = this.minSize; @@ -85,6 +110,21 @@ export class Revealable { this.state = RevealableStates.FOUND; } else if (isRevealed && !isHovered) { this.state = RevealableStates.REVEALED; + + if (!this.wasRevealed) { + logger.log({ + type: + this.type === RevealableTypes.CONTRIBUTOR + ? 'NR' + : this.type === RevealableTypes.LEGACY + ? 'LR' + : 'PR', + timestamp: Date.now(), + message: `Revealed ${this.name}`, + }); + } + + this.wasRevealed = true; } else { this.state = RevealableStates.HIDDEN; } @@ -108,10 +148,27 @@ export class Revealable { mp5.fill(mp5.color(colors.red)); mp5.ellipse(this.area.x, this.area.y, this.currentSize); } else if (this.state === RevealableStates.INACTIVE) { + this.minSize = 35; this.reduceSize(); - mp5.fill(mp5.color(colors.greyDark)); + mp5.fill(mp5.color(colors.redDark)); mp5.ellipse(this.area.x, this.area.y, this.currentSize); + mp5.strokeWeight(4); + mp5.stroke(mp5.color(colors.greyLighter)); + + mp5.line( + this.area.x + this.currentSize / 5, + this.area.y - this.currentSize / 5, + this.area.x - this.currentSize / 5, + this.area.y + this.currentSize / 5 + ); + + mp5.line( + this.area.x - this.currentSize / 5, + this.area.y - this.currentSize / 5, + this.area.x + this.currentSize / 5, + this.area.y + this.currentSize / 5 + ); } } @@ -119,11 +176,26 @@ export class Revealable { if (this.isHovered && !this.wasInteractedWith) { this.wasInteractedWith = true; + logger.log({ + type: + this.type === RevealableTypes.CONTRIBUTOR + ? 'NS' + : this.type === RevealableTypes.LEGACY + ? 'LS' + : 'PS', + timestamp: Date.now(), + message: `Showing info message for ${this.name}`, + }); + store.getState().addInfoMessage({ + type: this.type, headline: this.name, innerHTML: this.contents, imgUrl: this.imageUrl, url: this.url, + version: this.version, + commits: this.commits, + fileContents: this.fileContents, }); } } diff --git a/src/store.ts b/src/store.ts index 1e0b677..adfafdf 100644 --- a/src/store.ts +++ b/src/store.ts @@ -6,9 +6,9 @@ import project from '../metadata/project.json'; import { InfoMessageType } from './ui/info'; import { RevealableInterface, RevealableTypes } from './sketchObjects/Revealable'; import { getRevealablesforSubproject } from './helpers'; -import { SubProject } from './types'; export interface State { + currentIntroStep: number; currentScene: Scenes; currentSubproject?: string; companionState: CompanionState; @@ -20,15 +20,26 @@ export interface State { revealables: RevealableInterface[]; finishedSubProjects: string[]; setProjectMetadata: (projectName: string) => void; + participantAnonymous: boolean; + finishedGame: boolean; + revealablesFinished: number; + showScore: boolean; + uid: string; } const store = create( devtools((set) => ({ + uid: null, + showScore: false, + currentIntroStep: 1, + revealablesFinished: 0, currentScene: Scenes.OVERVIEW, currentSubproject: null, + participantAnonymous: false, companionState: CompanionState.IDLE, infoMessageShown: false, infoMessages: [], + finishedGame: false, addInfoMessage: (newMessage) => set((state) => ({ ...state, infoMessages: [...state.infoMessages, newMessage] })), userMessages: [], diff --git a/src/ui/companion.ts b/src/ui/companion.ts index 3c610da..2cabd6d 100644 --- a/src/ui/companion.ts +++ b/src/ui/companion.ts @@ -1,4 +1,5 @@ import anime from 'animejs/lib/anime.es'; +import { logger } from '../logger'; import store from '../store'; export enum CompanionState { @@ -22,6 +23,7 @@ export class Companion { messageTextRef: HTMLElement; messageInputRef: HTMLElement; messageButtonRef: HTMLElement; + backdrop: HTMLElement; hoverAnimation: any; message: CompanionMessage; @@ -31,6 +33,7 @@ export class Companion { this.messageTextRef = document.getElementById('message-text'); this.messageInputRef = document.getElementById('message-input'); this.messageButtonRef = document.getElementById('message-confirm'); + this.backdrop = document.getElementById('comp-backdrop'); this.ref.addEventListener('click', () => this.handleClick()); this.ref.addEventListener('mouseover', () => this.handleMouseEnter()); @@ -43,11 +46,13 @@ export class Companion { store.subscribe( (companionState) => { if (companionState === CompanionState.ACTIVE) { + this.backdrop.style.display = 'block'; this.stopAwaitAnimation(); this.showActiveShape(); this.scaleUpCompanion(); this.showMessage(this.message); } else if (companionState === CompanionState.IDLE) { + this.backdrop.style.display = 'none'; this.scaleDownCompanion(); this.showIdleShape(); this.stopAwaitAnimation(); @@ -93,6 +98,11 @@ export class Companion { // Hide Message this.messageRef.style.display = 'none'; store.setState({ companionState: CompanionState.IDLE }); + logger.log({ + type: 'CC', + timestamp: Date.now(), + message: 'Close message', + }); if (this.message.onNext) { this.message.onNext(); @@ -185,7 +195,7 @@ export class Companion { } handleClick() { - const { companionState } = store.getState(); + /*const { companionState } = store.getState(); let newCompanionState: CompanionState; if (companionState === CompanionState.ACTIVE) { @@ -194,7 +204,11 @@ export class Companion { newCompanionState = CompanionState.ACTIVE; } - store.setState({ companionState: newCompanionState }); + store.setState({ companionState: newCompanionState });*/ + logger.log({ + type: 'CC', + timestamp: Date.now(), + }); } handleMouseEnter() { diff --git a/src/ui/info.ts b/src/ui/info.ts index d434108..370ec01 100644 --- a/src/ui/info.ts +++ b/src/ui/info.ts @@ -1,28 +1,55 @@ +import moment from 'moment'; +import { logger } from '../logger'; +import { RevealableTypes } from '../sketchObjects/Revealable'; import store from '../store'; +export interface Commit { + url: string; + message: string; + time: string; +} export interface InfoMessageType { + type: RevealableTypes; headline: string; innerHTML: string; imgUrl?: string; url?: string; + commits?: Commit[]; + version?: string; + fileContents?: string; } export class InfoMessage { + type: RevealableTypes; + name: string; infoMessage: HTMLElement; + infoMessageSubheadline: HTMLElement; infoMessageHeadline: HTMLElement; infoMessageContents: HTMLElement; infoMessageClose: HTMLElement; infoMessageImgRef: HTMLImageElement; infoMessageLinkRef: HTMLAnchorElement; + + infoMessageCommitsHeadlineRef: HTMLElement; + infoMessageCommitsRef: HTMLElement; + infoMessageVersionRef: HTMLElement; + infoMessageLegacyRef: HTMLElement; backdrop: HTMLElement; constructor() { this.infoMessage = document.getElementById('info-message'); this.infoMessageHeadline = document.getElementById('info-message-headline'); - this.infoMessageContents = document.getElementById('info-message-contents'); + this.infoMessageSubheadline = document.getElementById('info-message-subheadline'); + this.infoMessageContents = document.getElementById('info-message-contents-text'); this.infoMessageClose = document.getElementById('info-message-close'); this.infoMessageImgRef = document.getElementById('info-message-img') as HTMLImageElement; this.infoMessageLinkRef = document.getElementById('info-message-link') as HTMLAnchorElement; + this.infoMessageCommitsRef = document.getElementById('info-message-contents-commits'); + this.infoMessageCommitsHeadlineRef = document.getElementById( + 'info-message-content-commits-headline' + ); + this.infoMessageVersionRef = document.getElementById('info-message-contents-version'); + this.infoMessageLegacyRef = document.getElementById('info-message-contents-legacy'); this.backdrop = document.getElementById('backdrop'); this.backdrop.addEventListener('click', this.onBackdropClick); @@ -39,6 +66,11 @@ export class InfoMessage { const newMessage = state.infoMessages[state.infoMessages.length - 1]; this.setContents(newMessage.headline, newMessage.innerHTML); + this.type = newMessage.type; + this.name = newMessage.headline; + + this.infoMessageSubheadline.innerHTML = this.getTextForType(); + if (newMessage.imgUrl) { this.setImg(newMessage.imgUrl); } else { @@ -51,16 +83,77 @@ export class InfoMessage { this.infoMessageLinkRef.style.display = 'none'; } + if (this.type === RevealableTypes.CONTRIBUTOR) { + this.infoMessageCommitsRef.style.display = 'block'; + this.infoMessageCommitsHeadlineRef.style.display = 'block'; + this.setCommits(newMessage.commits); + } else { + this.infoMessageCommitsRef.style.display = 'none'; + this.infoMessageCommitsHeadlineRef.style.display = 'none'; + } + + if (this.type === RevealableTypes.PACKAGE) { + this.infoMessageVersionRef.style.display = 'block'; + this.setVersion(newMessage.version); + } else { + this.infoMessageVersionRef.style.display = 'none'; + } + + if (this.type === RevealableTypes.LEGACY) { + this.infoMessageLegacyRef.style.display = 'block'; + this.setLegacy(newMessage.fileContents); + } else { + this.infoMessageLegacyRef.style.display = 'none'; + } + store.setState({ infoMessageShown: true }); } }); } + private getTextForType(): string { + if (this.type === RevealableTypes.CONTRIBUTOR) { + return 'Contributor'; + } else if (this.type === RevealableTypes.PACKAGE) { + return 'NPM Package'; + } else { + return 'Legacy Alert'; + } + } + private setContents(headline: string, innerHTML: string) { this.infoMessageHeadline.innerText = headline; this.infoMessageContents.innerHTML = innerHTML; } + private setVersion(version: string) { + this.infoMessageVersionRef.innerHTML = `This package is installed at

${version}

`; + } + + private setLegacy(fileContents: string) { + this.infoMessageLegacyRef.innerHTML = ` +

Excerpt from the file:

+
${fileContents}
+ `; + } + + private setCommits(commits: Commit[]) { + const commitEls = commits.map( + ({ message, url, time }) => + `
+

${message}

+
+ ${moment(time).format( + 'LLL' + )}Take a look on Github +
+
` + ); + console.log(commitEls); + + this.infoMessageCommitsRef.innerHTML = commitEls.join(''); + } + private setImg(imgUrl: string) { this.infoMessageImgRef.src = imgUrl; this.infoMessageImgRef.style.display = 'block'; @@ -82,10 +175,30 @@ export class InfoMessage { } private onBackdropClick() { + logger.log({ + type: + this.type === RevealableTypes.CONTRIBUTOR + ? 'NC' + : this.type === RevealableTypes.LEGACY + ? 'LC' + : 'PC', + timestamp: Date.now(), + message: `Closing info message for ${this.name}`, + }); store.setState({ infoMessageShown: false }); } private onCloseClick() { + logger.log({ + type: + this.type === RevealableTypes.CONTRIBUTOR + ? 'NC' + : this.type === RevealableTypes.LEGACY + ? 'LC' + : 'PC', + timestamp: Date.now(), + message: `Closing info message for ${this.name}`, + }); store.setState({ infoMessageShown: false }); } } diff --git a/src/ui/intro.ts b/src/ui/intro.ts new file mode 100644 index 0000000..d711f9c --- /dev/null +++ b/src/ui/intro.ts @@ -0,0 +1,269 @@ +import { logger } from '../logger'; +import { Scenes } from '../scenes/scenes'; +import store from '../store'; + +export class Intro { + currentStep: number; + anonymous: boolean; + + nextButton: HTMLElement; + anonymousCheckbox: HTMLInputElement; + introContainer: HTMLElement; + introBackdrop: HTMLElement; + step1Container: HTMLElement; + step2Container: HTMLElement; + step3Container: HTMLElement; + step4Container: HTMLElement; + step5Container: HTMLElement; + step6Container: HTMLElement; + step7Container: HTMLElement; + + nameRef: HTMLInputElement; + ageRef: HTMLInputElement; + backgroundRef: HTMLInputElement; + experienceRef: HTMLSelectElement; + + fb1: HTMLTextAreaElement; + fb2: HTMLTextAreaElement; + fb3: HTMLTextAreaElement; + fb4: HTMLTextAreaElement; + fb5: HTMLTextAreaElement; + fb6: HTMLTextAreaElement; + fb7: HTMLTextAreaElement; + fb8: HTMLTextAreaElement; + fb9: HTMLTextAreaElement; + fb10: HTMLTextAreaElement; + + k1: HTMLTextAreaElement; + + errorRef: HTMLElement; + + constructor() { + this.step1Container = document.getElementById('intro-step1'); + this.step2Container = document.getElementById('intro-step2'); + this.step3Container = document.getElementById('intro-step3'); + this.step4Container = document.getElementById('intro-step4'); + this.step5Container = document.getElementById('intro-step5'); + this.step6Container = document.getElementById('intro-step6'); + this.step7Container = document.getElementById('intro-step7'); + this.nextButton = document.getElementById('intro-button'); + this.anonymousCheckbox = document.querySelector('#intro-anonymous'); + this.introContainer = document.querySelector('#intro'); + this.introBackdrop = document.querySelector('#intro-backdrop'); + + this.nameRef = document.querySelector('#intro-name'); + this.ageRef = document.querySelector('#intro-age'); + this.backgroundRef = document.querySelector('#intro-background'); + this.experienceRef = document.querySelector('#intro-experience'); + + this.fb1 = document.querySelector('#fb-1'); + this.fb2 = document.querySelector('#fb-2'); + this.fb3 = document.querySelector('#fb-3'); + this.fb4 = document.querySelector('#fb-4'); + this.fb5 = document.querySelector('#fb-5'); + this.fb6 = document.querySelector('#fb-6'); + this.fb7 = document.querySelector('#fb-7'); + this.fb8 = document.querySelector('#fb-8'); + this.fb9 = document.querySelector('#fb-9'); + this.fb10 = document.querySelector('#fb-10'); + + this.k1 = document.querySelector('#k-1'); + + this.errorRef = document.querySelector('#intro-error'); + + this.nextButton.addEventListener('click', () => this.onNextClick()); + + this.currentStep = store.getState().currentIntroStep; + + if (this.currentStep === 0) { + this.introContainer.style.display = 'none'; + this.introBackdrop.style.display = 'none'; + } else { + this.showStep(); + } + + store.subscribe((state) => { + this.currentStep = state.currentIntroStep; + this.anonymous = state.participantAnonymous; + + if (state.currentIntroStep === 2) { + this.nextButton.innerHTML = 'Agree'; + } else if (state.currentIntroStep === 3) { + this.nextButton.innerHTML = 'Confirm'; + } else if (state.currentIntroStep === 4) { + this.nextButton.innerHTML = 'Start already!'; + } else if (state.currentIntroStep === 7) { + this.nextButton.style.display = 'none'; + } else if (state.currentIntroStep === 0) { + this.introContainer.style.display = 'none'; + this.introBackdrop.style.display = 'none'; + } else { + this.nextButton.innerHTML = 'Continue'; + } + + if (state.currentIntroStep !== 0) { + this.introContainer.style.display = 'block'; + this.introBackdrop.style.display = 'block'; + } + + if (this.anonymous) { + this.hideNameInput(); + } + + this.showStep(); + }); + } + + private onNextClick() { + const currentStep = store.getState().currentIntroStep; + + // Track if particpant wants to be anon + if (currentStep === 2) { + store.setState({ participantAnonymous: this.anonymousCheckbox.checked }); + } + + // Validate input + if (currentStep === 3) { + const name = this.nameRef.value; + const age = Number(this.ageRef.value); + const background = this.backgroundRef.value; + const experience = this.experienceRef.value; + + if ( + (this.anonymous ? false : !name) || + !age || + !background || + experience === 'Choose an option...' + ) { + this.errorRef.style.display = 'block'; + return; + } else { + this.errorRef.style.display = 'none'; + + store.setState({ + uid: `${Date.now()}_${name.replace(/[^a-zA-Z ]/g, '').toLowerCase()}`, + }); + + this.sendDemographicData(name, age, background, experience); + } + } + + if (currentStep === 4) { + store.setState({ currentIntroStep: 0 }); + + setTimeout(() => { + if (store.getState().currentScene !== Scenes.DETAIL) { + store.getState().addUserMessage({ + inputWanted: false, + text: "Hey there! Need help here? You'll have to touch the parts of the project you want to take a look at with you character's head. As soon as the project part (packages/...) is highlighted, you can click it to dive deeper into what lies behind 🔬", + }); + } + }, 3000); + + return; + } + + if (currentStep === 6) { + this.sendGeneralQuestionAnswers(); + } + + if (currentStep === 5) { + this.sendKnowledgeQuestionAnswers(); + } + + store.setState((state) => ({ currentIntroStep: state.currentIntroStep + 1 })); + } + + private sendDemographicData(name: string, age: number, background: string, experience: string) { + logger.logPersonalData(name, age, background, experience, this.anonymous); + } + + private sendGeneralQuestionAnswers() { + const answers = [ + this.fb1.value, + this.fb2.value, + this.fb3.value, + this.fb4.value, + this.fb5.value, + this.fb6.value, + this.fb7.value, + this.fb8.value, + this.fb9.value, + this.fb10.value, + ]; + + logger.logQuestions(answers); + } + + private sendKnowledgeQuestionAnswers() { + const answers = [this.k1.value]; + + logger.logQuestions(answers, true); + } + + private hideNameInput() { + this.nameRef.style.display = 'none'; + const label = document.querySelector('#name-label') as HTMLElement; + label.style.display = 'none'; + } + + private showStep() { + if (this.currentStep === 1) { + this.step1Container.style.display = 'flex'; + this.step2Container.style.display = 'none'; + this.step3Container.style.display = 'none'; + this.step4Container.style.display = 'none'; + this.step5Container.style.display = 'none'; + this.step6Container.style.display = 'none'; + this.step7Container.style.display = 'none'; + } else if (this.currentStep === 2) { + this.step1Container.style.display = 'none'; + this.step2Container.style.display = 'flex'; + this.step3Container.style.display = 'none'; + this.step4Container.style.display = 'none'; + this.step5Container.style.display = 'none'; + this.step6Container.style.display = 'none'; + this.step7Container.style.display = 'none'; + } else if (this.currentStep === 3) { + this.step1Container.style.display = 'none'; + this.step2Container.style.display = 'none'; + this.step3Container.style.display = 'flex'; + this.step4Container.style.display = 'none'; + this.step5Container.style.display = 'none'; + this.step6Container.style.display = 'none'; + this.step7Container.style.display = 'none'; + } else if (this.currentStep === 4) { + this.step1Container.style.display = 'none'; + this.step2Container.style.display = 'none'; + this.step3Container.style.display = 'none'; + this.step4Container.style.display = 'flex'; + this.step5Container.style.display = 'none'; + this.step6Container.style.display = 'none'; + this.step7Container.style.display = 'none'; + } else if (this.currentStep === 5) { + this.step1Container.style.display = 'none'; + this.step2Container.style.display = 'none'; + this.step3Container.style.display = 'none'; + this.step4Container.style.display = 'none'; + this.step5Container.style.display = 'flex'; + this.step6Container.style.display = 'none'; + this.step7Container.style.display = 'none'; + } else if (this.currentStep === 6) { + this.step1Container.style.display = 'none'; + this.step2Container.style.display = 'none'; + this.step3Container.style.display = 'none'; + this.step4Container.style.display = 'none'; + this.step5Container.style.display = 'none'; + this.step6Container.style.display = 'flex'; + this.step7Container.style.display = 'none'; + } else if (this.currentStep === 7) { + this.step1Container.style.display = 'none'; + this.step2Container.style.display = 'none'; + this.step3Container.style.display = 'none'; + this.step4Container.style.display = 'none'; + this.step5Container.style.display = 'none'; + this.step6Container.style.display = 'none'; + this.step7Container.style.display = 'flex'; + } + } +} diff --git a/src/ui/score.ts b/src/ui/score.ts new file mode 100644 index 0000000..8aa50ba --- /dev/null +++ b/src/ui/score.ts @@ -0,0 +1,42 @@ +import store from '../store'; + +export class Score { + showScore: boolean; + + scoreFound: number; + scoreTotal: number; + + scoreRef: HTMLElement; + scoreFoundRef: HTMLElement; + scoreTotalRef: HTMLElement; + + constructor() { + this.scoreRef = document.querySelector('#score'); + this.scoreFoundRef = document.querySelector('#score-found'); + this.scoreTotalRef = document.querySelector('#score-total'); + + this.scoreFound = 0; + this.scoreTotal = store.getState().revealables.length; + + this.scoreFoundRef.innerHTML = this.scoreFound.toString(); + this.scoreTotalRef.innerHTML = this.scoreTotal.toString(); + + if (store.getState().showScore) { + this.scoreRef.style.display = 'flex'; + } + + store.subscribe((state) => { + if (state.showScore) { + this.scoreRef.style.display = 'flex'; + } else { + this.scoreRef.style.display = 'none'; + } + + this.scoreTotal = state.revealables.length; + this.scoreFound = state.revealablesFinished; + + this.scoreFoundRef.innerHTML = this.scoreFound.toString(); + this.scoreTotalRef.innerHTML = this.scoreTotal.toString(); + }); + } +} diff --git a/styles.scss b/styles.scss index c254d7f..79ca5a0 100644 --- a/styles.scss +++ b/styles.scss @@ -23,6 +23,60 @@ main { button { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; + font-size: 16px; + + padding: 6px 15px; + background-color: transparent; + border: 2px solid black; + border-radius: 5px; + font-weight: bold; + max-width: 180px; + + &:hover { + cursor: pointer; + background-color: black; + color: white; + } +} + +label { + font-weight: bold; + margin-top: 15px; +} + +input[type='text'], +input[type='number'] { + display: block; + width: 100%; + margin-top: 10px; + font-size: 18px; + padding: 8px 12px; + outline: 0; + border: 2px solid black; + border-radius: 5px; +} + +select { + display: block; + width: 100%; + margin-top: 10px; + font-size: 18px; + padding: 8px 12px; + outline: 0; + border: 2px solid black; + border-radius: 5px; +} + +textarea { + display: block; + width: 100%; + margin-top: 25px; + min-height: 8rem; + font-size: 18px; + padding: 8px 12px; + outline: 0; + border: 2px solid black; + border-radius: 5px; } .ui { @@ -32,9 +86,11 @@ button { right: 40px; display: flex; justify-content: flex-end; + align-items: center; #companion { position: relative; + z-index: 10; &:hover { cursor: pointer; @@ -90,6 +146,7 @@ button { #message { display: none; position: absolute; + z-index: 10; right: 60px; bottom: 50px; margin-right: 100px; @@ -143,6 +200,25 @@ button { } } + #score { + display: none; + position: absolute; + left: 0; + align-items: flex-end; + color: #b0b7bf; + font-size: 32px; + + #score-found { + font-size: 60px; + font-weight: bold; + } + + #score-divider { + font-size: 42px; + align-self: flex-end; + } + } + #info-message { display: none; position: fixed; @@ -159,10 +235,81 @@ button { box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); + #info-message-contents { + #info-message-contents-text { + margin: 1.5rem 0; + } + + #info-message-contents-legacy { + p { + margin: 0; + font-size: 14px; + color: #4e4e4e; + font-style: italic; + } + pre { + background-color: black; + color: white; + padding: 0.5rem; + border-radius: 10px; + } + } + + h4 { + text-transform: uppercase; + letter-spacing: 1px; + font-weight: bold; + color: #b0b7bf; + margin: 0 0 1rem 0; + } + + #info-message-contents-version { + h3 { + display: inline-block; + margin: 1rem 0 0 0; + padding: 0.4rem 0.6rem; + background-color: #4e4e4e; + color: #fff; + border-radius: 10px; + font-size: 30px; + letter-spacing: 2px; + font-weight: bold; + } + } + + #info-message-contents-commits { + .info-message-contents-commit { + background-color: #d0d5d9; + border-radius: 10px; + padding: 1rem; + + &:not(:last-child) { + margin-bottom: 1.5rem; + } + + p { + margin: 0; + } + + div { + span { + font-size: 14px; + color: #4e4e4e; + } + + a { + color: #0d0d0d; + font-size: 14px; + } + } + } + } + } + #info-message-header { display: flex; - justify-content: space-between; - align-items: flex-end; + justify-content: flex-start; + align-items: center; margin-bottom: 25px; #info-message-img { @@ -170,11 +317,22 @@ button { height: 100px; width: 100px; border-radius: 50%; + margin-right: 1.5rem; } - #info-message-headline { - margin: 0; - text-align: center; + #info-message-header-text { + #info-message-subheadline { + text-transform: uppercase; + letter-spacing: 1px; + font-weight: bold; + color: #b0b7bf; + margin: 0; + } + #info-message-headline { + margin: 0; + padding: 0; + text-align: left; + } } } @@ -211,6 +369,97 @@ button { } } } + + #intro { + background-color: white; + position: fixed; + z-index: 10; + top: 50%; + left: 50%; + min-width: 60%; + max-width: 90%; + max-height: 90%; + overflow-y: auto; + transform: translate(-50%, -50%); + background-color: #fff; + padding: 2.5rem 4rem; + border-radius: 15px; + --tw-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), + var(--tw-shadow); + + #intro-step1 { + display: flex; + flex-direction: column; + + h3 { + margin: 0.6rem 0 0rem 0; + } + + p { + margin: 0.6rem 0 1rem; + } + + #intro-disclaimer { + background-color: #ffedd5; + color: #7c2d12; + padding: 4px 20px; + border-radius: 5px; + border-left: 7px solid #7c2d12; + margin-top: 15px; + } + } + + #intro-step2 { + display: none; + flex-direction: column; + } + + #intro-step3 { + display: none; + flex-direction: column; + } + + #intro-step4 { + display: none; + flex-direction: column; + } + + #intro-step5 { + display: none; + flex-direction: column; + } + + #intro-step6 { + display: none; + flex-direction: column; + + label { + margin-top: 60px; + } + } + + #intro-step7 { + display: none; + flex-direction: column; + } + + #intro-button { + float: right; + margin-top: 25px; + } + + #intro-error { + display: none; + margin-top: 25px; + background-color: #fecaca; + color: #7f1d1d; + padding: 8px 20px; + border-radius: 5px; + border-left: 7px solid #7f1d1d; + margin-top: 15px; + } + } } #backdrop { @@ -223,3 +472,25 @@ button { bottom: 0; background-color: rgba(0, 0, 0, 0.7); } + +#comp-backdrop { + display: none; + position: fixed; + z-index: 3; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.8); +} + +#intro-backdrop { + display: block; + position: fixed; + z-index: 3; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(255, 255, 255, 0.95); +}