This utility is under heavy dev. Still trying to find an optimal way to merge multiple subgraph data into one unified API.
A utility to query vault data across amms.
- Uniswap V3
- Sushiswap
- Babel - Write next generation JavaScript today.
- Jest - JavaScript testing framework used by Facebook.
- ESLint - Make sure you are writing a quality code.
- Prettier - Enforces a consistent style by parsing your code and re-printing it.
- Flow - A static type checker for JavaScript used heavily within Facebook.
- Travis CI - Automate tests and linting for every push or pull request.
- Documentation - A documentation system so good, you'll actually write documentation.
- Standard Version - Automate versioning and CHANGELOG generation.
- Rollup - Aggregate code into one compact file.
- Babel Minify - Slim down code for streamlined, low impact CDN delivery.
Just make sure to edit package.json
, README.md
and LICENSE
files accordingly with your module's info.
CDN Build
-
Install dependencies:
npm i -D rollup rollup-plugin-babel rollup-plugin-babel-minify rollup-plugin-commonjs rollup-plugin-node-resolve rollup-plugin-replace rollup-watch
-
Add a
rollup.config.js
file in the root of the repository with the following contents:import minify from "rollup-plugin-babel-minify"; module.exports = { input: "dist/index.js", plugins: [ minify({ comments: false // Any other options for babel-minify. }) ] };
-
Replace the build script/line in the
package.json
file with the following lines (make sure to replace the{YOUR_PKG_NAME}
below with the actual name of your module):"build": "npm run build:common-js && npm run build:umd && npm run build:umd:min", "build:common-js": "babel src -d dist", "build:umd": "node_modules/.bin/rollup src/index.js --file dist/{YOUR_PKG_NAME}.umd.js --format umd --name {YOUR_PKG_NAME}", "build:umd:watch": "npm run build:umd -- --watch", "build:umd:min": "node_modules/.bin/rollup src/index.js --file dist/{YOUR_PKG_NAME}.umd.min.js --config --format umd --compact --name {YOUR_PKG_NAME}",
-
Add appropriate entry points to your package.json file:
"browser": "dist/{YOUR_PKG_NAME}.umd.min.js", "cdn": "dist/{YOUR_PKG_NAME}.umd.min.js",
TypeScript
-
Install dependencies:
yarn add -D @babel/preset-typescript @types/jest @typescript-eslint/eslint-plugin @typescript-eslint/parser typescript
-
Update
package.json
:+ "types": "dist/ts/src", "scripts": { + "type-check": "tsc --noEmit", - "lint": "eslint .", + "lint": "eslint . --ext js,ts,tsx", - "build": "babel src -d dist", + "build": "tsc --emitDeclarationOnly && babel src -d dist -x .js,.ts,.tsx", }, "lint-staged": { - "*.js": [ + "*.{js,ts,tsx}": [ - "eslint --fix", + "eslint --fix --ext js,ts,tsx", "git add" ] }
-
Create
tsconfig.json
{ "compilerOptions": { "outDir": "dist/ts", "target": "esnext", "module": "esnext", "moduleResolution": "node", "jsx": "react", "strict": true, "declaration": true, "noFallthroughCasesInSwitch": true, "noImplicitReturns": true, "noUnusedLocals": true, "noUnusedParameters": true, "stripInternal": true } }
-
Update
.babelrc
:"presets": [ + "@babel/preset-typescript" ]
-
Update
.eslintrc
with these settings:"settings": { "import/resolver": { "node": { "extensions": [".js", ".jsx", ".ts", ".tsx"] } } }, "overrides": [ { "files": ["**/*.ts", "**/*.tsx"], "parser": "@typescript-eslint/parser", "parserOptions": { "project": "./tsconfig.json" }, "plugins": [ "@typescript-eslint" ], "rules": { "no-undef": "off", "no-unused-vars": "off", "no-restricted-globals": "off" } } ]
Flow
-
Remove
.flowconfig
file. -
Remove
flow
frompackage.json
"scripts": { - "flow": "flow check", - "flowbuild": "flow-copy-source src dist", - "prebuild": "npm run docs && npm run clean && npm run flowbuild", + "prebuild": "npm run docs && npm run clean", }, "devDependencies": { - "@babel/preset-flow": "^7.0.0", - "eslint-plugin-flowtype": "^2.50.0", - "eslint-plugin-flowtype-errors": "^3.5.1", - "flow-bin": "^0.81.0", - "flow-copy-source": "^2.0.2", }
-
Remove
flow
from.babelrc
:"presets": [ - "@babel/preset-flow" ]
-
Remove
flow
from.eslintrc
:"extends": [ - "plugin:flowtype/recommended", - "prettier/flowtype" ], "plugins": [ - "flowtype", - "flowtype-errors" ], "rules": { - "flowtype-errors/show-errors": "error" }
-
Run
yarn
.
Documentation
-
Remove
documentation
frompackage.json
:"scripts": { - "docs": "documentation readme src --section=API", - "postdocs": "git add README.md", - "prebuild": "npm run docs && npm run clean", + "prebuild": "npm run clean", }, "devDependencies": { - "documentation": "^8.0.0", }
-
Run
yarn
.
npm test # run tests with Jest
npm run coverage # run tests with coverage and open it on browser
npm run lint # lint code
npm run docs # generate docs
npm run build # transpile code and build module
npm run release
npm publish
It'll automatically run test
, lint
, docs
, build
, generate CHANGELOG.md
, and push commits and tags to the remote repository.