From 6f331000e94746c21bff668b792a22ed16bb6186 Mon Sep 17 00:00:00 2001 From: Aaron Barnard Date: Thu, 31 Oct 2019 15:41:05 +1100 Subject: [PATCH] Convert to TypeScript --- .babelrc | 5 - .circleci/config.yml | 16 +- .gitignore | 5 +- README.md | 2 +- package.json | 38 +- rollup.config.js | 106 +- src/@types/images.d.ts | 2 + src/@types/libraries.d.ts | 12 + src/@types/svelte-i18n.d.ts | 19 + src/components/Modal.svelte | 6 +- src/components/ModalHeader.svelte | 6 +- src/components/SelectedWallet.svelte | 9 +- src/components/Wallets.svelte | 9 +- src/elements/Button.svelte | 6 +- src/elements/IconButton.svelte | 12 +- src/elements/IconDisplay.svelte | 8 +- src/elements/{walletIcon.js => walletIcon.ts} | 2 +- src/interfaces.ts | 223 +++ src/modules/{index.js => index.ts} | 0 src/modules/ready/{balance.js => balance.ts} | 9 +- src/modules/ready/{connect.js => connect.ts} | 7 +- src/modules/ready/{index.js => index.ts} | 7 +- src/modules/ready/{network.js => network.ts} | 7 +- src/modules/select/{content.js => content.ts} | 13 +- src/modules/select/{index.js => index.ts} | 25 +- .../wallets/{authereum.js => authereum.ts} | 18 +- src/modules/select/wallets/coinbase.js | 24 - src/modules/select/wallets/coinbase.ts | 27 + src/modules/select/wallets/dapper.js | 60 - src/modules/select/wallets/dapper.ts | 63 + .../wallets/{fortmatic.js => fortmatic.ts} | 9 +- src/modules/select/wallets/metamask.js | 34 - src/modules/select/wallets/metamask.ts | 39 + .../select/wallets/{portis.js => portis.ts} | 12 +- .../wallets/{squarelink.js => squarelink.ts} | 29 +- src/modules/select/wallets/trust.js | 25 - src/modules/select/wallets/trust.ts | 27 + .../{wallet-connect.js => wallet-connect.ts} | 28 +- src/{index.js => onboard.ts} | 71 +- src/{services.js => services.ts} | 6 +- src/stores.js | 178 --- src/stores.ts | 257 ++++ src/{utilities.js => utilities.ts} | 95 +- src/{validation.js => validation.ts} | 137 +- src/views/Onboard.svelte | 14 +- src/views/WalletReady.svelte | 209 +-- src/views/WalletSelect.svelte | 92 +- svelte.config.js | 5 + tsconfig.json | 65 + types.d.ts | 72 - yarn.lock | 1347 ++--------------- 51 files changed, 1477 insertions(+), 2020 deletions(-) delete mode 100644 .babelrc create mode 100644 src/@types/images.d.ts create mode 100644 src/@types/libraries.d.ts create mode 100644 src/@types/svelte-i18n.d.ts rename src/elements/{walletIcon.js => walletIcon.ts} (99%) create mode 100644 src/interfaces.ts rename src/modules/{index.js => index.ts} (100%) rename src/modules/ready/{balance.js => balance.ts} (73%) rename src/modules/ready/{connect.js => connect.ts} (89%) rename src/modules/ready/{index.js => index.ts} (53%) rename src/modules/ready/{network.js => network.ts} (91%) rename src/modules/select/{content.js => content.ts} (82%) rename src/modules/select/{index.js => index.ts} (80%) rename src/modules/select/wallets/{authereum.js => authereum.ts} (74%) delete mode 100644 src/modules/select/wallets/coinbase.js create mode 100644 src/modules/select/wallets/coinbase.ts delete mode 100644 src/modules/select/wallets/dapper.js create mode 100644 src/modules/select/wallets/dapper.ts rename src/modules/select/wallets/{fortmatic.js => fortmatic.ts} (83%) delete mode 100644 src/modules/select/wallets/metamask.js create mode 100644 src/modules/select/wallets/metamask.ts rename src/modules/select/wallets/{portis.js => portis.ts} (81%) rename src/modules/select/wallets/{squarelink.js => squarelink.ts} (70%) delete mode 100644 src/modules/select/wallets/trust.js create mode 100644 src/modules/select/wallets/trust.ts rename src/modules/select/wallets/{wallet-connect.js => wallet-connect.ts} (72%) rename src/{index.js => onboard.ts} (51%) rename src/{services.js => services.ts} (51%) delete mode 100644 src/stores.js create mode 100644 src/stores.ts rename src/{utilities.js => utilities.ts} (62%) rename src/{validation.js => validation.ts} (68%) create mode 100644 svelte.config.js create mode 100644 tsconfig.json delete mode 100644 types.d.ts diff --git a/.babelrc b/.babelrc deleted file mode 100644 index 89554bd83..000000000 --- a/.babelrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "presets": [ - ["@babel/env", { "modules": false, "useBuiltIns": "entry", "corejs": 3 }] - ] -} diff --git a/.circleci/config.yml b/.circleci/config.yml index a2b07cf73..51a816551 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -7,8 +7,8 @@ jobs: - checkout - restore_cache: keys: - - v1-dependencies-{{ checksum "package.json" }} - - v1-dependencies- + - v1-dependencies-{{ checksum "package.json" }} + - v1-dependencies- - run: yarn - run: yarn test - run: yarn build @@ -28,13 +28,13 @@ jobs: - run: sudo npm i -g npm-cli-login - run: NPM_USER=$NPM_USERNAME NPM_EMAIL=$NPM_EMAIL NPM_PASS=$NPM_PASSWORD npm-cli-login - run: npm publish --dry-run - - run: gzip -9 ./dist/iife/onboard.js - - run: mv ./dist/iife/onboard.js.gz ./dist/iife/onboard.js + - run: gzip -9 ./dist/bnc-onboard.js + - run: mv ./dist/bnc-onboard.js.gz ./dist/bnc-onboard.js - run: ls -al - run: echo export VERSION=`awk '/version/{gsub(/("|",)/,"",$2);print $2};' package.json | sed 's/\./-/g'` >> $BASH_ENV - run: mkdir /root/project/deploy-temp - run: mkdir /root/project/deploy-temp/${VERSION} - - run: mv /root/project/dist/iife/*.js /root/project/deploy-temp/${VERSION}/ + - run: mv /root/project/dist/*.js /root/project/deploy-temp/${VERSION}/ - run: aws s3 sync /root/project/deploy-temp/${VERSION}/ s3://staging.onboard.blocknative.com/${VERSION}/ --content-type "text/javascript" --content-encoding "gzip" --cache-control "max-age=31536000" --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers deploy_prod: docker: @@ -48,13 +48,13 @@ jobs: - run: sudo npm i -g add npm-cli-login - run: NPM_USER=$NPM_USERNAME NPM_EMAIL=$NPM_EMAIL NPM_PASS=$NPM_PASSWORD npm-cli-login - run: npm publish - - run: gzip -9 ./dist/iife/onboard.js - - run: mv ./dist/iife/onboard.js.gz ./dist/iife/onboard.js + - run: gzip -9 ./dist/bnc-onboard.js + - run: mv ./dist/bnc-onboard.js.gz ./dist/bnc-onboard.js - run: ls -al - run: echo export VERSION=`awk '/version/{gsub(/("|",)/,"",$2);print $2};' package.json | sed 's/\./-/g'` >> $BASH_ENV - run: mkdir /root/project/deploy-temp - run: mkdir /root/project/deploy-temp/${VERSION} - - run: mv /root/project/dist/iife/*.js /root/project/deploy-temp/${VERSION}/ + - run: mv /root/project/dist/*.js /root/project/deploy-temp/${VERSION}/ - run: aws s3 sync /root/project/deploy-temp/${VERSION}/ s3://onboard.blocknative.com/${VERSION}/ --content-type "text/javascript" --content-encoding "gzip" --cache-control "max-age=31536000" --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers workflows: version: 2 diff --git a/.gitignore b/.gitignore index 68af422da..9383078b7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .DS_Store node_modules -dist -settings.json +dist/ +package-lock.json +.rpt2_cache \ No newline at end of file diff --git a/README.md b/README.md index 80d7e1570..1b3f4d8f6 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ JavaScript library to easily onboard users to ethereum apps by enabling wallet s ## Quick Start with Default Modules ```javascript -import Onboard from "bn-onboard" +import Onboard from "bnc-onboard" // initialize onboard const onboard = Onboard.init({ diff --git a/package.json b/package.json index cf149792a..61f2cc3ec 100644 --- a/package.json +++ b/package.json @@ -1,31 +1,41 @@ { "name": "bnc-onboard", "version": "0.2.4", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", + "description": "Onboard users to web3 by allowing them to select a wallet, get that wallet ready to transact and have access to synced wallet state.", + "keywords": [ + "ethereum", + "web3", + "blocknative", + "wallet" + ], + "main": "dist/bnc-onboard.js", + "module": "dist/bnc-onboard.es5.js", + "typings": "dist/src/onboard.d.ts", "files": [ - "dist/esm/*", - "dist/cjs/*" + "dist" ], - "types": "./types.d.ts", + "author": "Aaron Barnard ", + "repository": { + "type": "git", + "url": "https://github.com/blocknative/onboard" + }, "license": "MIT", "devDependencies": { - "@babel/core": "^7.5.5", - "@babel/preset-env": "^7.5.5", + "@pyoner/svelte-ts-preprocess": "^1.2.1", + "@types/node": "^12.12.3", "@joseph184/rollup-plugin-node-builtins": "^2.1.4", - "babel-eslint": "^7.1.1", - "babel-plugin-external-helpers": "^6.18.0", "rollup": "^1.12.0", - "rollup-plugin-babel": "^4.3.3", "rollup-plugin-commonjs": "^10.0.0", "rollup-plugin-img": "^1.1.0", "rollup-plugin-json": "^4.0.0", - "rollup-plugin-livereload": "^1.0.0", "rollup-plugin-node-globals": "^1.4.0", "rollup-plugin-node-resolve": "^5.2.0", "rollup-plugin-svelte": "^5.0.3", "rollup-plugin-terser": "^4.0.4", - "svelte": "^3.0.0" + "rollup-plugin-typescript2": "0.21.0", + "svelte": "^3.12.1", + "svelte-i18n": "^1.1.2-beta", + "typescript": "^3.6.4" }, "dependencies": { "@portis/web3": "^2.0.0-beta.42", @@ -36,9 +46,7 @@ "bowser": "^2.5.2", "fortmatic": "^0.8.2", "promise-cancelable": "^2.1.1", - "regenerator-runtime": "^0.13.3", - "squarelink": "^1.1.3", - "svelte-i18n": "^1.1.2-beta" + "squarelink": "^1.1.3" }, "scripts": { "build": "rollup -c", diff --git a/rollup.config.js b/rollup.config.js index c07336e2b..573cc67bc 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,38 +1,74 @@ import svelte from "rollup-plugin-svelte" import resolve from "rollup-plugin-node-resolve" -import babel from "rollup-plugin-babel" -import commonjs from "rollup-plugin-commonjs" -import globals from "rollup-plugin-node-globals" import json from "rollup-plugin-json" import image from "rollup-plugin-img" +import commonjs from "rollup-plugin-commonjs" +import globals from "rollup-plugin-node-globals" import builtins from "@joseph184/rollup-plugin-node-builtins" import { terser } from "rollup-plugin-terser" +import typescript from "rollup-plugin-typescript2" + +import { + preprocess, + createEnv, + readConfigFile +} from "@pyoner/svelte-ts-preprocess" + +const env = createEnv() +const compilerOptions = readConfigFile(env) +const opts = { + env, + compilerOptions: { + ...compilerOptions, + allowNonTsExtensions: true + } +} export default [ { - input: "src/index.js", + input: "src/onboard.ts", output: { - format: "iife", + sourcemap: true, + format: "umd", name: "onboard", - file: "dist/iife/onboard.js", - esModule: false + file: "dist/bnc-onboard.js" + }, + moduleContext: id => { + const thisAsWindowForModules = [ + "node_modules/intl-messageformat/lib/core.js", + "node_modules/intl-messageformat/lib/compiler.js" + ] + + if (thisAsWindowForModules.some(id_ => id.trimRight().endsWith(id_))) { + return "window" + } }, plugins: [ image(), json(), - svelte(), + svelte({ + preprocess: preprocess(opts) + }), resolve({ - preferBuiltins: true, browser: true, + preferBuiltins: true, dedupe: importee => importee === "svelte" || importee.startsWith("svelte/") }), commonjs(), globals(), - babel({ exclude: "node_modules/**" }), builtins(), + typescript(), terser() - ], + ] + }, + { + input: "src/onboard.ts", + output: { + sourcemap: true, + format: "es", + file: "dist/bnc-onboard.es5.js" + }, moduleContext: id => { const thisAsWindowForModules = [ "node_modules/intl-messageformat/lib/core.js", @@ -42,49 +78,31 @@ export default [ if (thisAsWindowForModules.some(id_ => id.trimRight().endsWith(id_))) { return "window" } - } - }, - { - input: "src/index.js", + }, + plugins: [ + json(), + image(), + svelte({ + preprocess: preprocess(opts) + }), + resolve({ + browser: true, + dedupe: importee => + importee === "svelte" || importee.startsWith("svelte/") + }), + commonjs(), + typescript() + ], external: [ "bowser", "bnc-sdk", "bignumber.js", "promise-cancelable", - "regenerator-runtime/runtime", "@portis/web3", "@walletconnect/web3-provider", "fortmatic", "squarelink", "authereum" - ], - plugins: [ - svelte(), - json(), - image(), - resolve(), - commonjs(), - babel({ exclude: "node_modules/**" }) - ], - moduleContext: id => { - const thisAsWindowForModules = [ - "node_modules/intl-messageformat/lib/core.js", - "node_modules/intl-messageformat/lib/compiler.js" - ] - - if (thisAsWindowForModules.some(id_ => id.trimRight().endsWith(id_))) { - return "window" - } - }, - output: [ - { - dir: "dist/esm", - format: "esm" - }, - { - dir: "dist/cjs", - format: "cjs" - } ] } ] diff --git a/src/@types/images.d.ts b/src/@types/images.d.ts new file mode 100644 index 000000000..7d9547086 --- /dev/null +++ b/src/@types/images.d.ts @@ -0,0 +1,2 @@ +declare module "*.png" +declare module "*.svg" diff --git a/src/@types/libraries.d.ts b/src/@types/libraries.d.ts new file mode 100644 index 000000000..6e1ee8d71 --- /dev/null +++ b/src/@types/libraries.d.ts @@ -0,0 +1,12 @@ +declare module "promise-cancelable" { + export default class Cancelable extends Promise { + constructor(executor: any) + cancel(): any + isFulfilled(): any + isResolved(): any + isRejected(): any + } +} +declare module "@walletconnect/web3-provider" +declare module "squarelink" +declare module "fortmatic" diff --git a/src/@types/svelte-i18n.d.ts b/src/@types/svelte-i18n.d.ts new file mode 100644 index 000000000..1d278e459 --- /dev/null +++ b/src/@types/svelte-i18n.d.ts @@ -0,0 +1,19 @@ +declare module 'svelte-i18n' { + interface Options { + fallback: string + navigator: boolean + } + export function getClientLocale(options: Options): string + + export namespace _ { + export function subscribe(dictionary: any): void + } + + export namespace dictionary { + export function set(dictionary: any): void + } + + export namespace locale { + export function set(locale: string): void + } +} diff --git a/src/components/Modal.svelte b/src/components/Modal.svelte index 997f7960f..e8e8f24a7 100644 --- a/src/components/Modal.svelte +++ b/src/components/Modal.svelte @@ -1,9 +1,9 @@ -