Skip to content

Commit

Permalink
chore: Update package versions and dependencies
Browse files Browse the repository at this point in the history
  • Loading branch information
ewhal committed Jun 6, 2024
1 parent 3bc39e4 commit 99f95f6
Show file tree
Hide file tree
Showing 45 changed files with 21,473 additions and 362 deletions.
File renamed without changes.
5 changes: 5 additions & 0 deletions legacy/moon-react/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
*.log
.DS_Store
node_modules
.cache
dist
File renamed without changes.
File renamed without changes
160 changes: 160 additions & 0 deletions legacy/moon-react/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
# DTS React User Guide

Congrats! You just saved yourself hours of work by bootstrapping this project with DTS. Let’s get you oriented with what’s here and how to use it.

> This DTS setup is meant for developing React component libraries (not apps!) that can be published to NPM. If you’re looking to build a React-based app, you should use `create-react-app`, `razzle`, `nextjs`, `gatsby`, or `react-static`.
> If you’re new to TypeScript and React, checkout [this handy cheatsheet](https://github.com/sw-yx/react-typescript-cheatsheet/)
## Commands

DTS scaffolds your new library inside `/src`, and also sets up a [Vite-based](https://vitejs.dev) playground for it inside `/example`.

The recommended workflow is to run DTS in one terminal:

```bash
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`.

Then run the example inside another:

```bash
cd example
npm i # or yarn to install dependencies
npm start # or yarn start
```

The default example imports and live reloads whatever is in `/dist`, so if you are seeing an out of date component, make sure DTS is running in watch mode like we recommend above.

To do a one-off build, use `npm run build` or `yarn build`.

To run tests, use `npm test` or `yarn test`.

## Configuration

Code quality is set up for you with `prettier`, `husky`, and `lint-staged`. Adjust the respective fields in `package.json` accordingly.

### Jest

Jest tests are set up to run with `npm test` or `yarn test`.

### Bundle analysis

Calculates the real cost of your library using [size-limit](https://github.com/ai/size-limit) with `npm run size` and visulize it with `npm run analyze`.

#### Setup Files

This is the folder structure we set up for you:

```txt
/example
index.html
index.tsx # test your component here in a demo app
package.json
tsconfig.json
/src
index.tsx # EDIT THIS
/test
index.test.tsx # EDIT THIS
.gitignore
package.json
README.md # EDIT THIS
tsconfig.json
```

#### React Testing Library

We do not set up `react-testing-library` for you yet, we welcome contributions and documentation on this.

### Rollup

DTS uses [Rollup](https://rollupjs.org) as a bundler and generates multiple rollup configs for various module formats and build settings. See [Optimizations](#optimizations) for details.

### TypeScript

`tsconfig.json` is set up to interpret `dom` and `esnext` types, as well as `react` for `jsx`. Adjust according to your needs.

## Continuous Integration

### GitHub Actions

Two actions are added by default:

- `main` which installs deps w/ cache, lints, tests, and builds on all pushes against a Node and OS matrix
- `size` which comments cost comparison of your library on every pull request using [`size-limit`](https://github.com/ai/size-limit)

## Optimizations

Please see the main `dts` [optimizations docs](https://github.com/weiran-zsd/dts-cli#optimizations). In particular, know that you can take advantage of development-only optimizations:

```js
// ./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](https://github.com/weiran-zsd/dts-cli#invariant) and [warning](https://github.com/weiran-zsd/dts-cli#warning) functions.

## Module Formats

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.

## Deploying the Example Playground

The Playground is just a simple [Vite](https://vitejs.dev) app, you can deploy it anywhere you would normally deploy that. Here are some guidelines for **manually** deploying with the Netlify CLI (`npm i -g netlify-cli`):

```bash
cd example # if not already in the example folder
npm run build # builds to dist
netlify deploy # deploy the dist folder
```

Alternatively, if you already have a git repo connected, you can set up continuous deployment with Netlify:

```bash
netlify init
# build command: yarn build && cd example && yarn && yarn build
# directory to deploy: example/dist
# pick yes for netlify.toml
```

## Named Exports

Per Palmer Group guidelines, [always use named exports.](https://github.com/palmerhq/typescript#exports) Code split inside your React app instead of your React library.

## Including Styles

There are many ways to ship styles, including with CSS-in-JS. DTS 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.

## Publishing to NPM

We recommend using [np](https://github.com/sindresorhus/np).

## Usage with Lerna

When creating a new package with DTS within a project set up with Lerna, you might encounter a `Cannot resolve dependency` error when trying to run the `example` project. To fix that you will need to make changes to the `package.json` file _inside the `example` directory_.

The problem is that due to the nature of how dependencies are installed in Lerna projects, the aliases in the example project's `package.json` might not point to the right place, as those dependencies might have been installed in the root of your Lerna project.

Change the `alias` to point to where those packages are actually installed. This depends on the directory structure of your Lerna project, so the actual path might be different from the diff below.

```diff
"alias": {
- "react": "../node_modules/react",
- "react-dom": "../node_modules/react-dom"
+ "react": "../../../node_modules/react",
+ "react-dom": "../../../node_modules/react-dom"
},
```

An alternative to fixing this problem would be to remove aliases altogether and define the dependencies referenced as aliases as dev dependencies instead. [However, that might cause other problems.](https://github.com/formium/tsdx/issues/64)
126 changes: 126 additions & 0 deletions legacy/moon-react/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
{
"name": "@moonup/moon-react",
"version": "1.0.9",
"license": "MIT",
"author": "0xEwhal <[email protected]>",
"type": "commonjs",
"main": "./dist/index.js",
"module": "./dist/index.mjs",
"typings": "./dist/index.d.ts",
"types": "./dist/index.d.ts",
"exports": {
"import": {
"types": "./dist/index.d.mts",
"default": "./dist/index.mjs"
},
"require": {
"types": "./dist/index.d.ts",
"default": "./dist/index.js"
}
},
"files": [
"dist",
"src"
],
"scripts": {
"analyze": "size-limit --why",
"prepare": "tsup",
"size": "size-limit",
"start": "tsup --watch",
"prettier": "prettier --check src/",
"prettier:fix": "prettier --write src/",
"lint": "eslint src/ --ext .ts,.tsx",
"lint:fix": "npm run lint --fix",
"verify": "run-p prettier lint",
"verify:fix": "npm run prettier:fix && npm run lint:fix",
"build": "tsup src -- --dts-resolve",
"build:fast": "tsup src",
"dev": "tsup src --watch",
"test": "vitest",
"test:watch": "vitest watch",
"coverage": "vitest run --coverage"
},
"husky": {
"hooks": {
"pre-commit": "npm run lint"
}
},
"prettier": {
"printWidth": 80,
"semi": true,
"singleQuote": true,
"trailingComma": "es5"
},
"jest": {
"testEnvironment": "jsdom"
},
"peerDependencies": {
"react": ">=16"
},
"engines": {
"node": ">=12"
},
"size-limit": [
{
"path": "dist/moon-react.cjs.production.min.js",
"limit": "10 KB"
},
{
"path": "dist/moon-react.esm.js",
"limit": "10 KB"
}
],
"dependencies": {
"@moonup/ethers": "workspace:*",
"@moonup/moon-api": "workspace:*",
"@moonup/moon-sdk": "workspace:*",
"@moonup/wagmi-connector": "workspace:*",
"@rainbow-me/rainbowkit": "^2.0.7",
"@simplewebauthn/browser": "^10.0.0",
"@supabase/auth-ui-react": "^0.4.7",
"@supabase/auth-ui-shared": "^0.1.8",
"@supabase/supabase-js": "^2.42.5",
"@tanstack/react-query": "^5.32.0",
"@supabase/auth-helpers-react": "^0.4.2",
"bn.js": "^5.2.1",
"crypto-browserify": "^3.12.0",
"ethers": "^5.7.2",
"web3": "^4.3.0",
"mipd": "^0.0.7",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-modal": "^3.16.1",
"react-tabs": "^6.0.2",
"siwe": "^2.1.4",
"viem": "^2.9.25",
"wagmi": "^2.5.20"
},
"devDependencies": {
"@size-limit/preset-small-lib": "^11.0.1",
"@tsconfig/recommended": "^1.0.3",
"@tsconfig/vite-react": "^3.0.0",
"@types/bn.js": "^5.1.5",
"@vitest/coverage-v8": "^0.34.2",
"happy-dom": "^6.0.4",
"husky": "^8.0.3",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"size-limit": "^11.0.1",
"tslib": "^2.6.2",
"tsup": "^8.0.1",
"typescript": "^5.3.3",
"@simplewebauthn/typescript-types": "^8.3.4",
"@types/react": "^18.2.66",
"@types/react-dom": "^18.2.22",
"@types/react-modal": "^3.16.3",
"@typescript-eslint/eslint-plugin": "^7.2.0",
"@typescript-eslint/parser": "^7.2.0",
"@vitejs/plugin-react": "^4.2.1",
"autoprefixer": "^10.4.19",
"eslint": "^8.57.0",
"eslint-plugin-react-hooks": "^4.6.0",
"eslint-plugin-react-refresh": "^0.4.6",
"postcss": "^8.4.38",
"tailwindcss": "^3.4.3"
}
}
4 changes: 4 additions & 0 deletions legacy/moon-react/src/hooks/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
export * from './types';
export * from './useMoon';
export * from './useMoonEthers';
export * from './useMoonEthersSkale';
File renamed without changes.
31 changes: 31 additions & 0 deletions legacy/moon-react/src/hooks/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import { MoonProvider } from '@moonup/ethers';
import { MoonSDK } from '@moonup/moon-sdk';
import { ethers } from 'ethers';

export interface MoonSDKHook {
moon: MoonSDK | null;
initialize: () => Promise<void>;
disconnect: () => Promise<void>;
}

export interface MoonEthersHook {
moonProvider: MoonProvider | null;
moon: MoonSDK | null;
initialize: () => Promise<void>;
disconnect: () => Promise<void>;
}

export interface Transaction {
from?: string;
nonce?: ethers.BigNumberish;
gasLimit?: ethers.BigNumberish;
gasPrice?: ethers.BigNumberish;
}

export interface MoonSkaleEthersHook {
moonProvider: MoonProvider | null;
moon: MoonSDK | null;
initialize: () => Promise<void>;
disconnect: () => Promise<void>;
mineForGas: (contractAddress: string, address: string) => Promise<string>;
}
15 changes: 15 additions & 0 deletions legacy/moon-react/src/hooks/useMoon.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { MoonSDK } from '@moonup/moon-sdk';
import { useEffect, useState } from 'react';

export const useMoonSDK = () => {
const [moon, setMoon] = useState<MoonSDK | null>(null);
const [isAuthenticated, setIsAuthenticated] = useState(false);

useEffect(() => {
const sdk = new MoonSDK();
setMoon(sdk);
setIsAuthenticated(sdk.isAuthenticated);
}, []);

return { moon, isAuthenticated };
};
45 changes: 45 additions & 0 deletions legacy/moon-react/src/hooks/useMoonEthers.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import { MoonProvider, MoonProviderOptions } from '@moonup/ethers';
import { MoonSDK } from '@moonup/moon-sdk';
import { useEffect, useState } from 'react';

import { MoonEthersHook } from './types';

export function useMoonEthers(): MoonEthersHook {
const [moonProvider, setMoonProvider] = useState<MoonProvider | null>(null);
const [moon, setMoon] = useState<MoonSDK | null>(null);
const initialize = async () => {
const moonInstance = new MoonSDK();
setMoon(moonInstance);
moonInstance.connect();
const options: MoonProviderOptions = {
chainId: 1,
address: '0x',
SDK: moonInstance,
};
const moonProviderInstance = new MoonProvider(options);
setMoonProvider(moonProviderInstance);
};

const disconnect = async () => {
if (moonProvider) {
await moonProvider.disconnect();
setMoonProvider(null);
}
if (moon) {
await moon.disconnect();
setMoon(null);
}
};

useEffect(() => {
initialize();
}, []);

return {
moonProvider,
moon,
initialize,
disconnect,
// Add other methods as needed
};
}
Loading

0 comments on commit 99f95f6

Please sign in to comment.