diff --git a/.eslintignore b/.eslintignore index 9064e038f1..da35ca818b 100644 --- a/.eslintignore +++ b/.eslintignore @@ -6,3 +6,4 @@ /testArtifacts /test/unit/coverage/ /.vscode/settings.json +/docs/cosmos-voyager/ diff --git a/.gitignore b/.gitignore index d84f372832..c402a43f75 100644 --- a/.gitignore +++ b/.gitignore @@ -13,4 +13,5 @@ thumbs.db yarn-error.log testArtifacts/* app/networks/local-testnet/* +docs/cosmos-voyager .idea/* diff --git a/.prettierignore b/.prettierignore index 960ed0e74e..3d0ef18b46 100644 --- a/.prettierignore +++ b/.prettierignore @@ -3,3 +3,4 @@ /package.json /test/unit/coverage/ /test/unit/tmp/ +/docs/cosmos-voyager/ \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 567af68444..5c8b99c26b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -53,6 +53,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - [\#1661](https://github.com/cosmos/voyager/issues/1661) Boot: multinode available for local-testnet @sabau - [\#1748](https://github.com/cosmos/voyager/issues/1748) display governance parameters on tab @fedekunze - [\#1660](https://github.com/cosmos/voyager/issues/1660) Add parameters and pool to store @fedekunze +- [\#1739](https://github.com/cosmos/voyager/issues/1739) Init jsDoc into project @sabau - [\#1674](https://github.com/cosmos/voyager/issues/1674) Add PageProfile component with shared styles for validator and proposal profiles @jbibla ### Changed diff --git a/README.md b/README.md index a0630949fc..5e2c54c14d 100644 --- a/README.md +++ b/README.md @@ -201,6 +201,18 @@ yarn pack node_modules/.bin/tape test/e2e/init.js ``` +### Documentation + +To produce an up-to date documentation you can run: + +```bash +$ yarn doc +``` + +This will store an HTML static website containing all the documented modules and components that you can consult. + +The output folder is: `docs/cosmos-voyager/[#version]` + ### Code coverage To check test coverage locally run following. It will spin up a webserver and provide you with a link to the coverage report web page. diff --git a/app/src/renderer/App.vue b/app/src/renderer/App.vue index 4fc3a87318..db6d293d23 100644 --- a/app/src/renderer/App.vue +++ b/app/src/renderer/App.vue @@ -30,6 +30,19 @@ import ModalReceive from "common/TmModalReceive" import Onboarding from "common/TmOnboarding" import Session from "common/TmSession" import store from "./vuex/store" + +/** + * Main App component + * @vue-prop {String} propname Just an example + * @vue-prop {Number} [niceProp=1] - A very cool incoerent prop not required but with 1 as default + * @vue-data {Object} nothing + * @vue-computed {function} notifications mapGetter + * @vue-computed {function} config mapGetter + * @vue-computed {function} themes mapGetter + * @vue-computed {function} approval mapGetter + * @vue-computed {function} required mapGetter + * @vue-computed {function} onboarding mapGetter + */ export default { name: `app`, components: { diff --git a/app/src/renderer/components/wallet/PageWallet.vue b/app/src/renderer/components/wallet/PageWallet.vue index 2503d73a5c..bb5f32c87c 100644 --- a/app/src/renderer/components/wallet/PageWallet.vue +++ b/app/src/renderer/components/wallet/PageWallet.vue @@ -64,6 +64,26 @@ import TmDataMsg from "common/TmDataMsg" import TmBalance from "common/TmBalance" import ModalSearch from "common/TmModalSearch" import ToolBar from "common/ToolBar" + +/** + * Page Wallet + * @vue-prop {Number} num Module that implements all the numerical methods + * @vue-computed {function} filters mapGetter + * @vue-computed {function} wallet mapGetter + * @vue-computed {function} committedDelegations mapGetter + * @vue-computed {function} oldBondedAtoms mapGetter + * @vue-computed {function} config mapGetter + * @vue-computed {function} connected mapGetter + * + * @vue-computed {function} somethingToSearch returns a boolean stating true if we have data and we are not in loading phase + * @vue-computed {function} allDenomBalances for denoms not in balances, add empty balance + * @vue-computed {function} filteredBalances filter the balance per coin name, returns an ordered list + * + * @vue-methods {function} updateDelegates mapAction + * @vue-methods {function} updateDelegates mapAction + * @vue-methods {function} setSearch launches the setSearchVisible action if somethingToSearch returns true + * @vue-methods {function} updateBalances dispatch a queryWalletBalances action to update the informations + */ export default { name: `page-wallet`, components: { diff --git a/app/src/renderer/google-analytics.js b/app/src/renderer/google-analytics.js index 5122c93d23..6ac2df0584 100644 --- a/app/src/renderer/google-analytics.js +++ b/app/src/renderer/google-analytics.js @@ -1,5 +1,8 @@ "use strict" - +/** + * Google analytics gets injected here + * @module google-analytics + */ import Analytics from "electron-ga" module.exports = function(gaUID) { diff --git a/app/src/renderer/main.js b/app/src/renderer/main.js index 5a1d848ff3..0789439137 100644 --- a/app/src/renderer/main.js +++ b/app/src/renderer/main.js @@ -1,4 +1,8 @@ "use strict" +/** + * Main module + * @module main + */ import Vue from "vue" import Electron from "vue-electron" @@ -71,6 +75,9 @@ Vue.directive(`focus`, { } }) +/** + * Main method to boot the renderer. It act as Entrypoint + */ async function main() { let lcdPort = config.development ? config.lcd_port : config.lcd_port_prod let localLcdURL = `https://localhost:${lcdPort}` diff --git a/app/src/renderer/routes.js b/app/src/renderer/routes.js index 0798041b34..08cf51e2ef 100644 --- a/app/src/renderer/routes.js +++ b/app/src/renderer/routes.js @@ -1,17 +1,16 @@ -function r(type, pageName) { - return require(`./components/${type}/Page${pageName}`).default -} - -let common = r.bind(null, `common`) -let governance = r.bind(null, `governance`) -let staking = r.bind(null, `staking`) -let wallet = r.bind(null, `wallet`) +/** + * In this module we took care of the definition of our routes, with parameters, children and component related to them + * @module routes + */ +/** + * Routes are all defined here + */ export default [ { path: `/governance`, name: `Governance`, - component: governance(`Governance`), + component: require(`./components/governance/PageGovernance`).default, redirect: `/governance/proposals`, children: [ { @@ -36,7 +35,7 @@ export default [ { path: `/staking`, name: `Staking`, - component: staking(`Staking`), + component: require(`./components/staking/PageStaking`).default, redirect: `/staking/my-delegations/`, children: [ { @@ -59,32 +58,32 @@ export default [ { path: `/staking/validators/:validator`, name: `validator`, - component: staking(`Validator`) + component: require(`./components/staking/PageValidator`).default }, { path: `/preferences`, name: `preferences`, - component: common(`Preferences`) + component: require(`./components/common/PagePreferences`).default }, { path: `/`, name: `wallet`, - component: wallet(`Wallet`) + component: require(`./components/wallet/PageWallet`).default }, { path: `/wallet/send/:denom?`, name: `send`, props: true, - component: wallet(`Send`) + component: require(`./components/wallet/PageSend`).default }, { path: `/transactions`, name: `transactions`, - component: wallet(`Transactions`) + component: require(`./components/wallet/PageTransactions`).default }, - { path: `/404`, component: common(`404`) }, - { path: `*`, component: common(`404`) } + { path: `/404`, component: require(`./components/common/Page404`).default }, + { path: `*`, component: require(`./components/common/Page404`).default } ] diff --git a/app/src/renderer/scripts/num.js b/app/src/renderer/scripts/num.js index 7edc9f2c04..b991b9f17c 100644 --- a/app/src/renderer/scripts/num.js +++ b/app/src/renderer/scripts/num.js @@ -1,4 +1,8 @@ "use strict" +/** + * Defines all numerical methods + * @module num + */ const numeral = require(`numeral`) function usd(num) { diff --git a/app/src/renderer/vuex/store.js b/app/src/renderer/vuex/store.js index b3178373e0..f80f1936ce 100644 --- a/app/src/renderer/vuex/store.js +++ b/app/src/renderer/vuex/store.js @@ -1,4 +1,8 @@ "use strict" +/** + * Main store module + * @module store + */ import Vue from "vue" import Vuex from "vuex" @@ -8,6 +12,11 @@ import modules from "./modules" Vue.use(Vuex) +/** + * Module Store + * @param opts + * @returns {Vuex.Store} + */ export default (opts = {}) => { // provide commit and dispatch to tests opts.commit = (...args) => store.commit(...args) @@ -57,6 +66,10 @@ export default (opts = {}) => { return store } +/** + * Persist the state passed as parameter + * @param state + */ function persistState(state) { const cachedState = JSON.stringify({ transactions: { @@ -88,12 +101,22 @@ function persistState(state) { localStorage.setItem(getStorageKey(state), cachedState) } +/** + * Get a storage key + * @param state + * @returns {string} + */ function getStorageKey(state) { const chainId = state.connection.lastHeader.chain_id const address = state.user.address return `store_${chainId}_${address}` } +/** + * load persisted state + * @param state + * @param commit + */ function loadPersistedState({ state, commit }) { const storageKey = getStorageKey(state) let cachedState diff --git a/jsdoc.json b/jsdoc.json new file mode 100644 index 0000000000..809ca52d5e --- /dev/null +++ b/jsdoc.json @@ -0,0 +1,27 @@ +{ + "plugins": [ + "plugins/markdown", + "plugins/summarize", + "node_modules/jsdoc-vuejs" + ], + "recurseDepth": 10, + "source": { + "include": ["./package.json", "./app/src/"], + "includePattern": "\\.((js(doc|x)?)|vuex?)$", + "excludePattern": "(^|\\/|\\\\)_" + }, + "sourceType": "module", + "tags": { + "allowUnknownTags": true, + "dictionaries": ["jsdoc", "closure"] + }, + "templates": { + "cleverLinks": false, + "monospaceLinks": false + }, + "opts": { + "encoding": "utf8", + "destination": "./docs/", + "recurse": true + } +} diff --git a/package.json b/package.json index fc3484648c..5d642e8d36 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "build:testnets": "cd tasks/build/testnets && ./localBuild.sh", "build:gaia": "cd tasks/build/Gaia && ./localBuild.sh", "build:local": "node tasks/build/local/build", + "doc": "jsdoc -r -c jsdoc.json", "start": "node tasks/testnet.js", "testnet": "echo \"'yarn testnet' has been deprecated. Please use 'yarn start'\"", "lint": "yarn lint:eslint && yarn lint:format", @@ -70,6 +71,8 @@ "html-webpack-plugin": "2.30.1", "http-server": "0.11.1", "husky": "0.14.3", + "jsdoc": "3.5.5", + "jsdoc-vuejs": "2.3.3", "jest": "23.6.0", "jest-localstorage-mock": "2.3.0", "json-loader": "0.5.7", diff --git a/yarn.lock b/yarn.lock index 18bab45d2d..8944b0e352 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1246,6 +1246,11 @@ babel-types@^6.0.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.23. lodash "^4.17.4" to-fast-properties "^1.0.3" +babylon@7.0.0-beta.19: + version "7.0.0-beta.19" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.19.tgz#e928c7e807e970e0536b078ab3e0c48f9e052503" + integrity sha512-Vg0C9s/REX6/WIXN37UKpv5ZhRi6A4pjHlpkE34+8/a6c2W1Q692n3hmc+SZG5lKRnaExLUbxtJ1SVT+KaCQ/A== + babylon@^6.17.0, babylon@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" @@ -1332,6 +1337,11 @@ bluebird@^3.0.5, bluebird@^3.1.1, bluebird@^3.4.7, bluebird@^3.5.0: version "3.5.1" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" +bluebird@~3.5.0: + version "3.5.3" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" + integrity sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw== + bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.8" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" @@ -1659,6 +1669,13 @@ caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" +catharsis@~0.8.9: + version "0.8.9" + resolved "https://registry.yarnpkg.com/catharsis/-/catharsis-0.8.9.tgz#98cc890ca652dd2ef0e70b37925310ff9e90fc8b" + integrity sha1-mMyJDKZS3S7w5ws3klMQ/56Q/Is= + dependencies: + underscore-contrib "~0.3.0" + center-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" @@ -2663,6 +2680,11 @@ ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" +ejs@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.6.1.tgz#498ec0d495655abc6f23cd61868d926464071aa0" + integrity sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ== + ejs@~2.5.6: version "2.5.9" resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.9.tgz#7ba254582a560d267437109a68354112475b0ce5" @@ -2935,7 +2957,7 @@ escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5, escape-string-regexp@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -5040,10 +5062,44 @@ js-yaml@~3.7.0: argparse "^1.0.7" esprima "^2.6.0" +js2xmlparser@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/js2xmlparser/-/js2xmlparser-3.0.0.tgz#3fb60eaa089c5440f9319f51760ccd07e2499733" + integrity sha1-P7YOqgicVED5MZ9RdgzNB+JJlzM= + dependencies: + xmlcreate "^1.0.1" + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" +jsdoc-vuejs@2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/jsdoc-vuejs/-/jsdoc-vuejs-2.3.3.tgz#d0ec9f981957df7c84ee3e8ab6438723f944404e" + integrity sha512-A+5XVXkAS7mxmO/s/6CpwmGmPbFpgaKpp2nkjK/PvmJwLYU+iHRK5kbY/Vx68nCzLYk9gS8rE0ohgqVYzX241w== + dependencies: + ejs "^2.6.1" + jsdoc "^3.5.5" + vue-template-compiler "^2.5.16" + +jsdoc@3.5.5, jsdoc@^3.5.5: + version "3.5.5" + resolved "https://registry.yarnpkg.com/jsdoc/-/jsdoc-3.5.5.tgz#484521b126e81904d632ff83ec9aaa096708fa4d" + integrity sha512-6PxB65TAU4WO0Wzyr/4/YhlGovXl0EVYfpKbpSroSj0qBxT4/xod/l40Opkm38dRHRdQgdeY836M0uVnJQG7kg== + dependencies: + babylon "7.0.0-beta.19" + bluebird "~3.5.0" + catharsis "~0.8.9" + escape-string-regexp "~1.0.5" + js2xmlparser "~3.0.0" + klaw "~2.0.0" + marked "~0.3.6" + mkdirp "~0.5.1" + requizzle "~0.2.1" + strip-json-comments "~2.0.1" + taffydb "2.6.2" + underscore "~1.8.3" + jsdom@^11.5.1: version "11.12.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" @@ -5191,6 +5247,13 @@ klaw@^1.0.0: optionalDependencies: graceful-fs "^4.1.9" +klaw@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-2.0.0.tgz#59c128e0dc5ce410201151194eeb9cbf858650f6" + integrity sha1-WcEo4Nxc5BAgEVEZTuucv4WGUPY= + dependencies: + graceful-fs "^4.1.9" + kleur@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/kleur/-/kleur-2.0.2.tgz#b704f4944d95e255d038f0cb05fb8a602c55a300" @@ -5409,6 +5472,11 @@ markdown-it@8.4.1: mdurl "^1.0.1" uc.micro "^1.0.5" +marked@~0.3.6: + version "0.3.19" + resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.19.tgz#5d47f709c4c9fc3c216b6d46127280f40b39d790" + integrity sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg== + math-expression-evaluator@^1.2.14: version "1.2.17" resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" @@ -7305,6 +7373,13 @@ requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" +requizzle@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/requizzle/-/requizzle-0.2.1.tgz#6943c3530c4d9a7e46f1cddd51c158fc670cdbde" + integrity sha1-aUPDUwxNmn5G8c3dUcFY/GcM294= + dependencies: + underscore "~1.6.0" + resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" @@ -8102,6 +8177,11 @@ table@^5.0.2: slice-ansi "1.0.0" string-width "^2.1.1" +taffydb@2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/taffydb/-/taffydb-2.6.2.tgz#7cbcb64b5a141b6a2efc2c5d2c67b4e150b2a268" + integrity sha1-fLy2S1oUG2ou/CxdLGe04VCyomg= + tapable@^0.2.7: version "0.2.8" resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22" @@ -8474,6 +8554,23 @@ ultron@1.0.x: version "1.0.2" resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" +underscore-contrib@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/underscore-contrib/-/underscore-contrib-0.3.0.tgz#665b66c24783f8fa2b18c9f8cbb0e2c7d48c26c7" + integrity sha1-ZltmwkeD+PorGMn4y7Dix9SMJsc= + dependencies: + underscore "1.6.0" + +underscore@1.6.0, underscore@~1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8" + integrity sha1-izixDKze9jM3uLJOT/htRa6lKag= + +underscore@~1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" + integrity sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI= + union-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" @@ -8726,7 +8823,7 @@ vue-style-loader@4.1.0, vue-style-loader@^4.1.0: hash-sum "^1.0.2" loader-utils "^1.0.2" -vue-template-compiler@2.5.21: +vue-template-compiler@2.5.21, vue-template-compiler@^2.5.16: version "2.5.21" resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.5.21.tgz#a57ceb903177e8f643560a8d639a0f8db647054a" integrity sha512-Vmk5Cv7UcmI99B9nXJEkaK262IQNnHp5rJYo+EwYpe2epTAXqcVyExhV6pk8jTkxQK2vRc8v8KmZBAwdmUZvvw== @@ -9057,6 +9154,11 @@ xmlbuilder@8.2.2: version "8.2.2" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-8.2.2.tgz#69248673410b4ba42e1a6136551d2922335aa773" +xmlcreate@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/xmlcreate/-/xmlcreate-1.0.2.tgz#fa6bf762a60a413fb3dd8f4b03c5b269238d308f" + integrity sha1-+mv3YqYKQT+z3Y9LA8WyaSONMI8= + xmldom@0.1.x: version "0.1.27" resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9"