-
To make an npm package which would be published to
npmjs.com
. -
The entire package has to be written in typescript.
-
Use the tool tsdx to get an initial setup. (Sample npm packages written in typescript: Link1 | Link2)
-
This package would point to the erc20 Contracts in different chains.
-
Example usage
import { tokens } from "your-package"; const usdc = tokens.homestead.USDC; // This is a JS object console.log(usdc); // should return the following // { // name: "USD Coin", // symbol: "USDC", // address: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48" // } const wmatic = tokens[137].WMATIC; // Also chainId(s) are accepted and not just the name console.log(wmatic); // should return the following // { // name: "Wrapped Matic", // symbol: "WMATIC", // address: "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270" // } // The format is tokens.name.symbol // where the name is homestead or polygon // Can also accept chainId // And the token is symbol
-
This package would exist to give users easy access to the tokens present in the blockchain while writing scripts.
-
Network homestead and polygon required. Others optional. Only mainnet chains required.
-
Top ten popular tokens required per network. Others optional.
-
Avoid reduplication of code for each network.
-
Code should be properly commented and maintainable
- Go to github.com/BuildBearLabs/TokenList.
- Star the repo.
- Fork the repo.
- Start from that code as a base and build up the project.
- Submit a PR.
- Fill this form
- How to create a package in
npmjs.com
. - How to write libraries in Typescript.
- Learning of good coding style and practices
Congrats! You just saved yourself hours of work by bootstrapping this project with TSDX. Let’s get you oriented with what’s here and how to use it.
This TSDX setup is meant for developing libraries (not apps!) that can be published to NPM. If you’re looking to build a Node app, you could use
ts-node-dev
, plaints-node
, or simpletsc
.
If you’re new to TypeScript, checkout this handy cheatsheet
TSDX scaffolds your new library inside /src
.
To run TSDX, use:
npm start # or yarn start
This builds to /dist
and runs the project in watch mode so any edits you save inside src
causes a rebuild to /dist
.
To do a one-off build, use npm run build
or yarn build
.
To run tests, use npm test
or yarn test
.
Code quality is set up for you with prettier
, husky
, and lint-staged
. Adjust the respective fields in package.json
accordingly.
Jest tests are set up to run with npm test
or yarn test
.
size-limit
is set up to calculate the real cost of your library with npm run size
and visualize the bundle with npm run analyze
.
This is the folder structure we set up for you:
/src
index.tsx # EDIT THIS
/test
blah.test.tsx # EDIT THIS
.gitignore
package.json
README.md # EDIT THIS
tsconfig.json
TSDX uses Rollup as a bundler and generates multiple rollup configs for various module formats and build settings. See Optimizations for details.
tsconfig.json
is set up to interpret dom
and esnext
types, as well as react
for jsx
. Adjust according to your needs.
Two actions are added by default:
main
which installs deps w/ cache, lints, tests, and builds on all pushes against a Node and OS matrixsize
which comments cost comparison of your library on every pull request usingsize-limit
Please see the main tsdx
optimizations docs. In particular, know that you can take advantage of development-only optimizations:
// ./types/index.d.ts
declare var __DEV__: boolean;
// inside your code...
if (__DEV__) {
console.log('foo');
}
You can also choose to install and use invariant and warning functions.
CJS, ESModules, and UMD module formats are supported.
The appropriate paths are configured in package.json
and dist/index.js
accordingly. Please report if any issues are found.
Per Palmer Group guidelines, always use named exports. Code split inside your React app instead of your React library.
There are many ways to ship styles, including with CSS-in-JS. TSDX has no opinion on this, configure how you like.
For vanilla CSS, you can include it at the root directory and add it to the files
section in your package.json
, so that it can be imported separately by your users and run through their bundler's loader.
We recommend using np.