diff --git a/.clj-kondo/.cache/v1/lock b/.clj-kondo/.cache/v1/lock new file mode 100644 index 0000000..e69de29 diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..11079bf --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,219 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/typescript-node +{ + "name": "Node.js & TypeScript", + // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile + "image": "mcr.microsoft.com/devcontainers/typescript-node:1-20-bookworm", + "features": { + "ghcr.io/devcontainers/features/aws-cli:1": {}, + "ghcr.io/devcontainers/features/azure-cli:1": {}, + "ghcr.io/devcontainers/features/docker-in-docker:2": {}, + "ghcr.io/devcontainers/features/docker-outside-of-docker:1": {}, + "ghcr.io/devcontainers/features/git:1": {}, + "ghcr.io/devcontainers/features/github-cli:1": {}, + "ghcr.io/devcontainers/features/go:1": {}, + "ghcr.io/devcontainers/features/java:1": {}, + "ghcr.io/devcontainers/features/nix:1": {}, + "ghcr.io/devcontainers/features/node:1": {}, + "ghcr.io/devcontainers/features/php:1": {}, + "ghcr.io/devcontainers/features/powershell:1": {}, + "ghcr.io/devcontainers/features/python:1": {}, + "ghcr.io/devcontainers/features/sshd:1": {}, + "ghcr.io/devcontainers/features/terraform:1": {}, + "ghcr.io/meaningful-ooo/devcontainer-features/homebrew:2": {}, + "ghcr.io/devcontainers-contrib/features/actionlint:1": {}, + "ghcr.io/devcontainers-contrib/features/actions-runner:1": {}, + "ghcr.io/devcontainers-contrib/features/actions-runner-noexternals:1": {}, + "ghcr.io/devcontainers-contrib/features/actions-runner-noruntime:1": {}, + "ghcr.io/devcontainers-contrib/features/actions-runner-noruntime-noexternals:1": {}, + "ghcr.io/devcontainers-contrib/features/age-keygen:1": {}, + "ghcr.io/devcontainers-contrib/features/airplane-cli:1": {}, + "ghcr.io/devcontainers-contrib/features/amplify-cli:2": {}, + "ghcr.io/devcontainers-contrib/features/auditjs:1": {}, + "ghcr.io/devcontainers-contrib/features/autoenv:1": {}, + "ghcr.io/devcontainers-contrib/features/bash-command:1": {}, + "ghcr.io/devcontainers-contrib/features/bin:1": {}, + "ghcr.io/devcontainers-contrib/features/boundary-asdf:2": {}, + "ghcr.io/devcontainers-contrib/features/browserify:2": {}, + "ghcr.io/devcontainers-contrib/features/cert-manager:1": {}, + "ghcr.io/devcontainers-contrib/features/circleci-cli:1": {}, + "ghcr.io/devcontainers-contrib/features/codefresh-cli:1": {}, + "ghcr.io/devcontainers-contrib/features/composer:1": {}, + "ghcr.io/devcontainers-contrib/features/consul-asdf:2": {}, + "ghcr.io/devcontainers-contrib/features/curl-apt-get:1": {}, + "ghcr.io/devcontainers-contrib/features/curl-homebrew:1": {}, + "ghcr.io/devcontainers-contrib/features/devcontainers-cli:1": {}, + "ghcr.io/devcontainers-contrib/features/doctoolchain-sdkman:2": {}, + "ghcr.io/devcontainers-contrib/features/eget:1": {}, + "ghcr.io/devcontainers-contrib/features/ganache:1": {}, + "ghcr.io/devcontainers-contrib/features/gh-cli:1": {}, + "ghcr.io/devcontainers-contrib/features/git-lfs:1": {}, + "ghcr.io/devcontainers-contrib/features/gitomatic:1": {}, + "ghcr.io/devcontainers-contrib/features/go-task:1": {}, + "ghcr.io/devcontainers-contrib/features/grpcurl-asdf:2": {}, + "ghcr.io/devcontainers-contrib/features/gulp-cli:2": {}, + "ghcr.io/devcontainers-contrib/features/heroku-cli:1": {}, + "ghcr.io/devcontainers-contrib/features/homebrew-package:1": {}, + "ghcr.io/devcontainers-contrib/features/http-server:1": {}, + "ghcr.io/devcontainers-contrib/features/jenkinsx-cli:1": {}, + "ghcr.io/devcontainers-contrib/features/jest:2": {}, + "ghcr.io/devcontainers-contrib/features/json-server:1": {}, + "ghcr.io/devcontainers-contrib/features/kotlin-sdkman:2": {}, + "ghcr.io/devcontainers-contrib/features/lerna-npm:1": {}, + "ghcr.io/devcontainers-contrib/features/markdownlint-cli:1": {}, + "ghcr.io/devcontainers-contrib/features/markdownlint-cli2:1": {}, + "ghcr.io/devcontainers-contrib/features/maven-sdkman:2": {}, + "ghcr.io/devcontainers-contrib/features/mocha:2": {}, + "ghcr.io/devcontainers-contrib/features/mysql-homebrew:1": {}, + "ghcr.io/devcontainers-contrib/features/node-asdf:0": {}, + "ghcr.io/devcontainers-contrib/features/npm-package:1": {}, + "ghcr.io/devcontainers-contrib/features/nx-npm:1": {}, + "ghcr.io/devcontainers-contrib/features/packer-asdf:2": {}, + "ghcr.io/devcontainers-contrib/features/perl-asdf:2": {}, + "ghcr.io/devcontainers-contrib/features/pipenv:2": {}, + "ghcr.io/devcontainers-contrib/features/pipx-package:1": {}, + "ghcr.io/devcontainers-contrib/features/pnpm:2": {}, + "ghcr.io/devcontainers-contrib/features/postgres-asdf:1": {}, + "ghcr.io/devcontainers-contrib/features/powerbi-visuals-tools:2": {}, + "ghcr.io/devcontainers-contrib/features/powershell:1": {}, + "ghcr.io/devcontainers-contrib/features/pre-commit:2": {}, + "ghcr.io/devcontainers-contrib/features/prettier:1": {}, + "ghcr.io/devcontainers-contrib/features/prisma:2": {}, + "ghcr.io/devcontainers-contrib/features/pyscaffold:2": {}, + "ghcr.io/devcontainers-contrib/features/qrcode:2": {}, + "ghcr.io/devcontainers-contrib/features/redis-homebrew:1": {}, + "ghcr.io/devcontainers-contrib/features/renovate-cli:2": {}, + "ghcr.io/devcontainers-contrib/features/scala-sdkman:2": {}, + "ghcr.io/devcontainers-contrib/features/scalacli-sdkman:2": {}, + "ghcr.io/devcontainers-contrib/features/serverless:2": {}, + "ghcr.io/devcontainers-contrib/features/snyk-cli:1": {}, + "ghcr.io/devcontainers-contrib/features/springboot-sdkman:2": {}, + "ghcr.io/devcontainers-contrib/features/syncthing:1": {}, + "ghcr.io/devcontainers-contrib/features/syntaqx-serve:1": {}, + "ghcr.io/devcontainers-contrib/features/terraform-asdf:2": {}, + "ghcr.io/devcontainers-contrib/features/terraform-docs:1": {}, + "ghcr.io/devcontainers-contrib/features/terraform-ls-asdf:2": {}, + "ghcr.io/devcontainers-contrib/features/terraformer:1": {}, + "ghcr.io/devcontainers-contrib/features/terrascan:1": {}, + "ghcr.io/devcontainers-contrib/features/tfcdk-cli:1": {}, + "ghcr.io/devcontainers-contrib/features/tfswitch:1": {}, + "ghcr.io/devcontainers-contrib/features/truffle:1": {}, + "ghcr.io/devcontainers-contrib/features/ts-node:1": {}, + "ghcr.io/devcontainers-contrib/features/tsx:1": {}, + "ghcr.io/devcontainers-contrib/features/turborepo-npm:1": {}, + "ghcr.io/devcontainers-contrib/features/typescript:2": {}, + "ghcr.io/devcontainers-contrib/features/vault-asdf:2": {}, + "ghcr.io/devcontainers-contrib/features/vercel-cli:1": {}, + "ghcr.io/devcontainers-contrib/features/vercel-pkg:1": {}, + "ghcr.io/devcontainers-contrib/features/vercel-release:1": {}, + "ghcr.io/devcontainers-contrib/features/vercel-serve:1": {}, + "ghcr.io/devcontainers-contrib/features/vscode-cli:1": {}, + "ghcr.io/devcontainers-contrib/features/vscode-server:1": {}, + "ghcr.io/devcontainers-contrib/features/vue-cli:2": {}, + "ghcr.io/devcontainers-contrib/features/w3m-apt-get:1": {}, + "ghcr.io/devcontainers-contrib/features/w3m-homebrew:1": {}, + "ghcr.io/devcontainers-contrib/features/wget-apt-get:1": {}, + "ghcr.io/devcontainers-contrib/features/wget-homebrew:1": {}, + "ghcr.io/devcontainers-contrib/features/yamllint:2": {}, + "ghcr.io/devcontainers-contrib/features/youtube-dl:2": {}, + "ghcr.io/devcontainers-contrib/features/zig:1": {}, + "ghcr.io/eitsupi/devcontainer-features/go-task:1": {}, + "ghcr.io/dhoeric/features/act:1": {}, + "ghcr.io/dhoeric/features/terraform-docs:1": {}, + "ghcr.io/rchaganti/vsc-devcontainer-features/wabt:1": {}, + "ghcr.io/customink/codespaces-features/docker-in-docker-amzn:1": {}, + "ghcr.io/customink/codespaces-features/docker-log-level:1": {}, + "ghcr.io/stuartleeks/dev-container-features/shell-history:0": {}, + "ghcr.io/guiyomh/features/just:0": {}, + "ghcr.io/guiyomh/features/vim:0": {}, + "ghcr.io/natescherer/devcontainers-custom-features/powershell-resources:1": {}, + "ghcr.io/shyim/devcontainers-features/php:0": {}, + "ghcr.io/shyim/devcontainers-features/symfony-cli:0": {}, + "ghcr.io/jungaretti/features/make:1": {}, + "ghcr.io/jungaretti/features/vim:1": {}, + "ghcr.io/lukewiwa/features/shellcheck:0": {}, + "ghcr.io/rio/features/skaffold:2": {}, + "ghcr.io/rio/features/vcluster:1": {}, + "ghcr.io/edouard-lopez/devcontainer-features/bats:0": {}, + "ghcr.io/jlaundry/devcontainer-features/azure-functions-core-tools:1": {}, + "ghcr.io/jlaundry/devcontainer-features/mssql-odbc-driver:1": {}, + "ghcr.io/mikaello/devcontainer-features/kotlinc:1": {}, + "ghcr.io/oleksis/devcontainer-features/python-launcher:1": {}, + "ghcr.io/warrenbuckley/codespace-features/sqlite:1": {}, + "ghcr.io/lentzi90/features/tilt:0": {}, + "ghcr.io/msclock/features/gitlab-ci-local:0": {}, + "ghcr.io/eliises/devcontainer-features/bash-profile:1": {}, + "ghcr.io/eliises/devcontainer-features/devcontainers-cli:1": {}, + "ghcr.io/frntn/devcontainers-features/postman:1": {}, + "ghcr.io/christophermacgown/devcontainer-features/direnv:1": {}, + "ghcr.io/balazs23/devcontainers-features/nx:1": {}, + "ghcr.io/mickeahlinder/devcontainer-features/tfenv:1": {}, + "ghcr.io/r3dpoint/devcontainer-features/tailwindcss-standalone-cli:1": {}, + "ghcr.io/akhildevelops/devcontainer-features/pip:0": {}, + "ghcr.io/sonikro/devcontainer-features/semgrep:1": {}, + "ghcr.io/flexwie/devcontainer-features/terraspace:1": {}, + "ghcr.io/azutake/devcontainer-features/go-packages-install:0": {}, + "ghcr.io/wxw-matt/devcontainer-features/script_runner:0": {}, + "ghcr.io/joedmck/devcontainer-features/cdktf:1": {}, + "ghcr.io/joedmck/devcontainer-features/serve:1": {}, + "ghcr.io/codeman99/features/circleci-cli:1": {}, + "ghcr.io/devcontainers-community/templates/dart:1": {}, + "ghcr.io/devcontainers-community/features/tinygo:1": {}, + "ghcr.io/devcontainers-community/features/llvm:3": {}, + "ghcr.io/devcontainers-community/npm-features/prettier:1": {}, + "ghcr.io/devcontainers-community/npm-features/typescript:1": {}, + "ghcr.io/lee-orr/rusty-dev-containers/cargo-audit:0": {}, + "ghcr.io/joshuanianji/devcontainer-features/edgedb-cli:1": {}, + "ghcr.io/joshuanianji/devcontainer-features/terraform-cli-persistence:1": {}, + "ghcr.io/nullcoder/devcontainer-features/stripe-cli:1": {}, + "ghcr.io/jayree/devcontainer-features/npm-registry:1": {}, + "ghcr.io/bdsoha/devcontainers/custom-root-ca:1": {}, + "ghcr.io/itsmechlark/features/act:1": {}, + "ghcr.io/itsmechlark/features/postgresql:1": {}, + "ghcr.io/itsmechlark/features/redis-server:1": {}, + "ghcr.io/itsmechlark/features/snowflake-odbc:1": {}, + "ghcr.io/marcozac/devcontainer-features/shellcheck:1": {}, + "ghcr.io/robbert229/devcontainer-features/postgresql-client:1": {}, + "ghcr.io/maks1ms/devcontainers-features/wine:0": {}, + "ghcr.io/schlich/devcontainer-features/cypress:1": {}, + "ghcr.io/schlich/devcontainer-features/jenkins-x:1": {}, + "ghcr.io/audacioustux/devcontainers/common-utils-extras:1": {}, + "ghcr.io/audacioustux/devcontainers/scala-toolchain:1": {}, + "ghcr.io/audacioustux/devcontainers/taskfile:1": {}, + "ghcr.io/nucleuscloud/devcontainer-features/sqlc:1": {}, + "ghcr.io/paul-gilber/devcontainer-features/yamllint-homebrew:1": {}, + "ghcr.io/prulloac/devcontainer-features/pre-commit:1": {}, + "ghcr.io/hspaans/devcontainer-features/pytest:1": {}, + "ghcr.io/hspaans/devcontainer-features/sshpass:1": {}, + "ghcr.io/dlouwers/devcontainer-features/devbox:1": {}, + "ghcr.io/opencodeco/devcontainers/install-php-extensions:0": {}, + "ghcr.io/bartventer/arch-devcontainer-features/azure-cli:1": {}, + "ghcr.io/bartventer/arch-devcontainer-features/common-utils:1": {}, + "ghcr.io/bartventer/arch-devcontainer-features/docker-in-docker:1": {}, + "ghcr.io/bartventer/arch-devcontainer-features/docker-outside-of-docker:1": {}, + "ghcr.io/bartventer/arch-devcontainer-features/go:1": {}, + "ghcr.io/bartventer/arch-devcontainer-features/terraform:1": {} + }, + "customizations": { + "vscode": { + "extensions": [ + "catalogfi.vscode-hardhat-multichain" + ] + } + } + + // Features to add to the dev container. More info: https://containers.dev/features. + // "features": {}, + + // Use 'forwardPorts' to make a list of ports inside the container available locally. + // "forwardPorts": [], + + // Use 'postCreateCommand' to run commands after the container is created. + // "postCreateCommand": "yarn install", + + // Configure tool-specific properties. + // "customizations": {}, + + // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. + // "remoteUser": "root" +} diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..f33a02c --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,12 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for more information: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates +# https://containers.dev/guide/dependabot + +version: 2 +updates: + - package-ecosystem: "devcontainers" + directory: "/" + schedule: + interval: weekly diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml new file mode 100644 index 0000000..f656760 --- /dev/null +++ b/.github/workflows/docker-image.yml @@ -0,0 +1,18 @@ +name: Docker image + +on: + push: + branches: [ $default-branch ] + pull_request: + branches: [ $default-branch ] + +jobs: + + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: Build the Docker image + run: docker build . --file Dockerfile --tag my-image-name:$(date +%s) diff --git a/.gitignore b/.gitignore index db81f67..8869e45 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ node_modules/ lib/ postgres/ docker-compose.yml +.fake diff --git a/.lsp/.cache/db.transit.json b/.lsp/.cache/db.transit.json new file mode 100644 index 0000000..f3580cd --- /dev/null +++ b/.lsp/.cache/db.transit.json @@ -0,0 +1 @@ +["^ ","~:classpath",["~#set",[]],"~:project-hash","","~:project-root","C:\\Users\\ELITE\\Documents\\GitHub\\0x-launch-kit","~:kondo-config-hash","dba27a44bfa82a1560968454c0684c64908ce17106838a64426cf1648c725d51","~:dependency-scheme","jar","~:analysis",null,"~:analysis-checksums",["^ "],"~:project-analysis-type","~:project-and-full-dependencies","~:version",12,"~:stubs-generation-namespaces",["^1",[]]] \ No newline at end of file diff --git a/.vscode/Bookmark.bcat b/.vscode/Bookmark.bcat new file mode 100644 index 0000000..fcb2700 --- /dev/null +++ b/.vscode/Bookmark.bcat @@ -0,0 +1 @@ +[{"Group":"This is a sample~","Time":"","FileAndPath":[{"Tag":"Welcome use bookmark","Path":"","Start":"0.0","End":"0.0","Time":""}]}] \ No newline at end of file diff --git a/.vscode/CatStatus.bcat b/.vscode/CatStatus.bcat new file mode 100644 index 0000000..c227083 --- /dev/null +++ b/.vscode/CatStatus.bcat @@ -0,0 +1 @@ +0 \ No newline at end of file diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..4ef01b0 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": [] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..874e0a0 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,11 @@ +{ + "swift.sanitizer": "address", + "swift.searchSubfoldersForPackages": true, + "swift.backgroundCompilation": true, + "swift.sourcekit-lsp.trace.server": "verbose", + "swift.path": "c:\\Users\\ELITE\\Documents\\GitHub\\0x-launch-kit\\.vscode", + "terminal.integrated.defaultProfile.windows": "Git Bash", + "go.toolsEnvVars": { + "GOTOOLCHAIN": "auto" + } +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..292c357 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,13 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "type": "yarn", + "task": "install", + "problemMatcher": [ + "$rustc-json" + ], + "label": "yarn: install" + } + ] +} diff --git a/git b/git new file mode 100644 index 0000000..e69de29 diff --git a/locales/EN_US.json b/locales/EN_US.json new file mode 100644 index 0000000..0244769 --- /dev/null +++ b/locales/EN_US.json @@ -0,0 +1,8 @@ +{ + "main": { + "sample": "Example", + "save": "Save", + "cargo.add": "Add", + "cargo.rm": "Remove" + } +} \ No newline at end of file diff --git a/locales/chains.config.json b/locales/chains.config.json new file mode 100644 index 0000000..46bf88f --- /dev/null +++ b/locales/chains.config.json @@ -0,0 +1,26 @@ +{"BSC": {"Type": "Job:Chain","ChainID": 56,"RPCEndpoint": "https://bsc-dataseed.binance.org/"} +,"ETH": {"Type": "Job:Chain","ChainID": 1,"RPCEndpoint": "https://mainnet.infura.io"} +,"AVAX": {"Type": "Job:Chain","ChainID": 43114,"RPCEndpoint": "https://api.avax.network/ext/bc/C/rpc"} +,"MATIC": {"Type": "Job:Chain","ChainID": 137,"RPCEndpoint": "https://matic-mainnet.chainstacklabs.com"} +,"ARBITRUM": {"Type": "Job:Chain","ChainID": 42161,"RPCEndpoint": "https://arb1.arbitrum.io/rpc"} +,"FANTOM": {"Type": "Job:Chain","ChainID": 250,"RPCEndpoint": "https://rpcapi.fantom.network"} +,"OPTIMISM": {"Type": "Job:Chain","ChainID": 10,"RPCEndpoint": "https://mainnet.optimism.io"} +,"MOONRIVER": {"Type": "Job:Chain","ChainID": 1285,"RPCEndpoint": "https://rpc.moonriver.moonbeam.network"} +,"MOONBEAM": {"Type": "Job:Chain","ChainID": 1284,"RPCEndpoint": "https://rpc.api.moonbeam.network"} +,"CELO": {"Type": "Job:Chain","ChainID": 42220,"RPCEndpoint": "https://forno.celo.org"} +,"CANTO": {"Type": "Job:Chain","ChainID": 7700,"RPCEndpoint": "https://rpc.canto.io"} +,"HARMONY": {"Type": "Job:Chain","ChainID": 1666600000,"RPCEndpoint": "https://api.harmony.one"} +,"GNO": {"Type": "Job:Chain","ChainID": 100,"RPCEndpoint": "https://rpc.gnosischain.com"} +,"KAVA": {"Type": "Job:Chain","ChainID": 2222,"RPCEndpoint": "https://lcd.kava.io"} +,"OKEX": {"Type": "Job:Chain","ChainID": 66,"RPCEndpoint": "https://exchainrpc.okex.org"} +,"HECO": {"Type": "Job:Chain","ChainID": 128,"RPCEndpoint": "https://http-mainnet.hecochain.com"} +,"CRONOS": {"Type": "Job:Chain","ChainID": 25,"RPCEndpoint": "https://evm.cronos.org"} +,"BOBA": {"Type": "Job:Chain","ChainID": 288,"RPCEndpoint": "https://mainnet.boba.network"} +,"XDAI": {"Type": "Job:Chain","ChainID": 100,"RPCEndpoint": "https://rpc.xdaichain.com"} +,"POLYGON": {"Type": "Job:Chain","ChainID": 137,"RPCEndpoint": "https://polygon-rpc.com"} +,"PALM": {"Type": "Job:Chain","ChainID": 11297108109,"RPCEndpoint": "https://palm-mainnet.infura.io/v3/"} +,"DFK": {"Type": "Job:Chain","ChainID": 53935,"RPCEndpoint": "https://subnets.avax.network/defi-kingdoms/rpc"} +,"AURORA": {"Type": "Job:Chain","ChainID": 1313161554,"RPCEndpoint": "https://mainnet.aurora.dev"} +,"TELOS": {"Type": "Job:Chain","ChainID": 40,"RPCEndpoint": "https://mainnet.telos.net"} +,"METIS": {"Type": "Job:Chain","ChainID": 1088,"RPCEndpoint": "https://andromeda.metis.io/?owner=1088"} +} diff --git a/locales/desc.json b/locales/desc.json new file mode 100644 index 0000000..306eeb9 --- /dev/null +++ b/locales/desc.json @@ -0,0 +1,8 @@ +{ + "main": { + "sample": "This is sample description", + "save": "Use to save document", + "cargo.add": "Cargo: Add dependency", + "cargo.rm": "Cargo: Remove dependency" + } +} \ No newline at end of file diff --git a/package.json b/package.json index c311177..1178a99 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "name": "@0x/launch-kit-wizard", - "version": "1.0.1", + "name": "0x-launch-kit", + "version": "0.0.1", "description": "", "bin": { "create-launch-kit-app": "./lib/index.js" @@ -11,21 +11,16 @@ "scripts": { "build": "tsc", "prepublishOnly": "npm run build", - "prettier": "prettier --write '**/*.{ts,tsx,json,md}' --config .prettierrc", - "start": "node ./lib/index.js && docker-compose up" + "prettier": "prettier --write '**/*.{ts,tsx,json,md}' --config .prettierrc" }, "author": "", "license": "Apache-2.0", "devDependencies": { - "@types/inquirer": "^6.0.2", - "@types/node": "^12.0.4", - "prettier": "^1.17.1", - "typescript": "^3.4.5" + "@types/inquirer": "^9.0.7", + "prettier": "^3.3.2", + "typescript": "^5.5.2" }, "dependencies": { - "inquirer": "^6.3.1" - }, - "publishConfig": { - "access": "public" + "inquirer": "^9.3.1" } } diff --git a/src/build.ts b/src/build.ts index 69cd755..20cc66b 100644 --- a/src/build.ts +++ b/src/build.ts @@ -1,142 +1,2 @@ -export type Network = 'mainnet' | 'kovan' | 'ropsten' | 'rinkeby' | 'ganache' | 'custom'; - -export interface BuildOptions { - tokenType: 'ERC20' | 'ERC721'; - network: Network; - rpcUrl: string; - relayerUrl: string; - relayerWebsocketUrl: string; - feeRecipient: string; - theme: 'light' | 'dark'; - port: number; - makerFee: number; - takerFee: number; - collectibleAddress: string; - collectibleName: string; - collectibleDescription: string; -} - -function getNetworkId(network: Network): number { - switch (network) { - case 'mainnet': - return 1; - case 'kovan': - return 42; - case 'ropsten': - return 3; - case 'rinkeby': - return 4; - case 'ganache': - case 'custom': - return 50; - } -} - -function getChainId(network: Network): number { - switch (network) { - case 'mainnet': - case 'kovan': - case 'rinkeby': - case 'ropsten': - return getNetworkId(network); - case 'ganache': - case 'custom': - return 1337; - } -} - -export const buildDockerComposeYml = (options: BuildOptions) => { - const basePath = options.tokenType === 'ERC20' ? '/erc20' : '/erc721'; - const theme = options.theme === 'light' ? 'LIGHT_THEME' : 'DARK_THEME'; - - const isGanache = options.network === 'ganache'; - const collectiblesSource = isGanache ? 'mocked' : 'opensea'; - - const networkId = getNetworkId(options.network); - const chainId = getChainId(options.network); - - const ganacheService = ` - ganache: - image: 0xorg/ganache-cli - ports: - - "8545:8545"`; - const collectibleEnv = ` - REACT_APP_COLLECTIBLES_SOURCE: '${collectiblesSource}' - REACT_APP_COLLECTIBLE_ADDRESS: '${options.collectibleAddress}' - REACT_APP_COLLECTIBLE_NAME: '${options.collectibleName}' - REACT_APP_COLLECTIBLE_DESCRIPTION: '${options.collectibleDescription}' - `.trimLeft(); - - return ` -version: "3" -services:${isGanache ? ganacheService : ''} - postgres: - image: postgres:9.6 - environment: - - POSTGRES_USER=api - - POSTGRES_PASSWORD=api - - POSTGRES_DB=api - ports: - - "5432:5432" - frontend: - image: 0xorg/launch-kit-frontend:latest - environment: - REACT_APP_RELAYER_URL: '${options.relayerUrl}' - REACT_APP_RELAYER_WS_URL: '${options.relayerWebsocketUrl}' - REACT_APP_DEFAULT_BASE_PATH: '${basePath}' - REACT_APP_THEME_NAME: '${theme}' - REACT_APP_NETWORK_ID: ${networkId} - REACT_APP_CHAIN_ID: ${chainId} - ${options.tokenType === 'ERC20' ? '' : collectibleEnv} - command: yarn build - volumes: - - frontend-assets:/app/build - backend: - image: 0xorg/0x-api:latest - depends_on: - - postgres - - mesh - environment: - HTTP_PORT: '3000' - ETHEREUM_RPC_URL: '${options.rpcUrl}' - NETWORK_ID: '${networkId}' - CHAIN_ID: '${chainId}' - WHITELIST_ALL_TOKENS: 'true' - FEE_RECIPIENT: '${options.feeRecipient}' - MAKER_FEE_UNIT_AMOUNT: '${options.makerFee}' - TAKER_FEE_UNIT_AMOUNT: '${options.takerFee}' - MESH_WEBSOCKET_URI: 'ws://mesh:60557' - MESH_HTTP_URI: 'http://mesh:60556' - POSTGRES_URI: 'postgresql://api:api@postgres/api' - ports: - - '3000:3000' - mesh: - image: 0xorg/mesh:9.0.1 - restart: always - environment: - ETHEREUM_RPC_URL: '${options.rpcUrl}' - ETHEREUM_CHAIN_ID: '${chainId}' - USE_BOOTSTRAP_LIST: 'true' - VERBOSITY: 3 - PRIVATE_KEY_PATH: '' - WS_RPC_ADDR: '0.0.0.0:60557' - HTTP_RPC_ADDR: '0.0.0.0:60556' - # You can decrease the BLOCK_POLLING_INTERVAL for test networks to - # improve performance. See https://0x-org.gitbook.io/mesh/ for more - # Documentation about Mesh and its environment variables. - BLOCK_POLLING_INTERVAL: '5s' - ports: - - '60556:60556' - - '60557:60557' - - '60558:60558' - - '60559:60559' - nginx: - image: nginx - ports: - - '${options.port}:80' - volumes: - - frontend-assets:/usr/share/nginx/html -volumes: - frontend-assets: -`.trimLeft(); -}; +"use strict"; +console.log("Build completed successfully."); diff --git a/src/index.ts b/src/index.ts index 5946a08..2695709 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,57 +1,65 @@ #!/usr/bin/env node - -import * as fs from 'fs'; -import * as inquirer from 'inquirer'; - -import { buildDockerComposeYml, BuildOptions, Network } from './build'; - -const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'; - -const mockERC721Address = '0x07f96aa816c1f244cbc6ef114bb2b023ba54a2eb'; - -const zeroExAsciiArt = ` - -............................................................ -............................................................ -............................................................ -..........................,,+I7?~........................... -.....................~DDDDDDDDDDDDDDDD8,.................... -..................$DDDDDDDDDDDDDDDDDDDDDDD.................. -................DDDDDDDDDDDDDDDDDDDDDDDD.................... -..............DDDDDDDDDDDDDDDDDDDDDDDD......=D.............. -............=DDDDDDDDDDDDDDDDDDDDDDN......8DDDDD............ -............:DDDDDDDDDDDDDDDDDDDDO......ODDDDDDDD........... -..............DDDDDDDD...DDDDDD,......~DDDDDDDDDDD.......... -.........D.....DDDDD......?DD...........=DDDDDDDDDD......... -........ZDD:....DD:.......................NDDDDDDDDD........ -.......,DDDD7..............................DDDDDDDDDD....... -.......DDDDDDN.............................,NDDDDDDDD....... -.......DDDDDDDD...........................,DDDDDDDDDDD...... -.......DDDDDDDDD.........................NDDDDDDDDDDDD...... -......7DDDDDDDDDD,.......................DDDDDDDDDDDDD...... -......DDDDDDDDDDDDI.......................NDDDDDDDDDDD...... -......ZDDDDDDDDDDDD8.......................DDDDDDDDDDD...... -......,DDDDDDDDDDDDD........................8DDDDDDDDD...... -.......DDDDDDDDDDD...........................?DDDDDDDD...... -.......NDDDDDDDDZ,............................,DDDDDD....... -.......,DDDDDDDDD...............................NDDDD....... -........8DDDDDDDDD........................OD.....DDD,....... -.........DDDDDDDDDD?...........DDD.......DDDD.....N:........ -..........NDDDDDDDDDD?.......DDDDDD=...DDDDDDD+............. -...........DDDDDDDDDO......NDDDDDDDDDDDDDDDDDDDD............ -............ODDDDD:......DDDDDDDDDDDDDDDDDDDDDDD............ -.............,NN~.....,NDDDDDDDDDDDDDDDDDDDDDD8............. -....................~DDDDDDDDDDDDDDDDDDDDDDDD,.............. -..................?DDDDDDDDDDDDDDDDDDDDDDD$................. -.....................DDDDDDDDDDDDDDDDDD+.................... -..........................+DDDDDDZ,......................... -............................................................ -............................................................ -............................................................ -............................................................ -............................................................`; - -function getRpcUrl(network: Network): string { +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +var fs = __importStar(require("fs")); +var inquirer = __importStar(require("inquirer")); +var build_1 = require("./build"); +var ZERO_ADDRESS = '0x0000000000000000000000000000000000000000'; +function getNetworkId(network) { + switch (network) { + case 'mainnet': + return 1; + case 'kovan': + return 42; + case 'ropsten': + return 3; + case 'custom': + return 50; + } +} +function getRpcUrl(network) { switch (network) { case 'mainnet': return 'https://mainnet.infura.io/'; @@ -59,206 +67,124 @@ function getRpcUrl(network: Network): string { return 'https://kovan.infura.io/'; case 'ropsten': return 'https://ropsten.infura.io/'; - case 'rinkeby': - return 'https://rinkeby.infura.io/'; - case 'ganache': - return 'http://ganache:8545/'; case 'custom': return 'http://localhost:8545/'; } } - -const isAddress = (s: string) => /(0x)?[0-9a-fA-F]{40}/.test(s); - -async function main() { - const networkChoices: Array<{ name: string; value: Network }> = [ - { - name: 'Mainnet', - value: 'mainnet', - }, - { - name: 'Kovan', - value: 'kovan', - }, - { - name: 'Ropsten', - value: 'ropsten', - }, - { - name: 'Rinkeby', - value: 'rinkeby', - }, - { - name: 'Ganache', - value: 'ganache', - }, - { - name: 'Custom', - value: 'custom', - }, - ]; - - const answers = await inquirer.prompt([ - { - type: 'list', - name: 'tokenType', - message: - zeroExAsciiArt + - `\n\n\n - 🚀 Welcome to the 0x Launch Kit Wizard! 🚀 \n - Start your own exchange in under a minute - - ---------------------------------------------------------------- - - Select the kind of token you want to support on your exchange`, - choices: ['ERC20', 'ERC721'], - }, - { - type: 'list', - name: 'network', - message: 'Select the network you want to use', - choices: networkChoices, - }, - { - type: 'input', - name: 'rpcUrl', - message: 'Select the RPC URL you want to use', - default: (answers: any) => { - return getRpcUrl(answers.network); - }, - validate: (rpcUrl: string) => { - return /https?:\/\/.+/.test(rpcUrl) ? true : 'Please enter a valid URL'; - }, - when: (answers: any) => answers.network !== 'ganache', - }, - { - type: 'input', - name: 'relayerUrl', - message: - 'Launch Kit will create a backend Relayer. Enter the public URL for the backend Relayer or leave default:', - default: 'http://localhost:3000/sra/v3', - validate: (rpcUrl: string) => { - return /https?:\/\/.+/.test(rpcUrl) ? true : 'Please enter a valid URL'; - }, - }, - { - type: 'input', - name: 'relayerWebsocketUrl', - message: - 'Launch Kit will create a backend Relayer. Enter the public URL for the backend websocket or leave default:', - default: 'ws://localhost:3000/sra/v3', - validate: (rpcUrl: string) => { - return /wss?:\/\/.+/.test(rpcUrl) ? true : 'Please enter a valid Websocket URL'; - }, - }, - { - type: 'input', - name: 'collectibleAddress', - message: 'Enter the address of the collectible:', - default: ZERO_ADDRESS, - validate: (answer: string) => { - return isAddress(answer) ? true : 'Please enter a valid address'; - }, - when: (answers: any) => answers.tokenType === 'ERC721' && answers.network !== 'ganache', - }, - { - type: 'input', - name: 'collectibleName', - message: 'Enter the name of the collectible:', - validate: (answer: string) => { - return answer.length > 0 ? true : 'Please enter a name'; - }, - when: (answers: any) => answers.tokenType === 'ERC721' && answers.network !== 'ganache', - }, - { - type: 'input', - name: 'collectibleDescription', - message: 'Enter the description of the collectible (optional):', - when: (answers: any) => answers.tokenType === 'ERC721' && answers.network !== 'ganache', - }, - { - type: 'input', - name: 'feeRecipient', - message: 'Enter the fee recipient:', - default: ZERO_ADDRESS, - validate: (answer: string) => { - return isAddress(answer) ? true : 'Please enter a valid address'; - }, - }, - { - type: 'number', - name: 'makerFee', - message: 'Enter the maker fee:', - default: 0, - when: (answers: any) => answers.feeRecipient !== ZERO_ADDRESS, - }, - { - type: 'number', - name: 'takerFee', - message: 'Enter the taker fee:', - default: 0, - when: (answers: any) => answers.feeRecipient !== ZERO_ADDRESS, - }, - { - type: 'list', - name: 'theme', - message: 'Select the theme you want to use', - choices: [ - { - name: 'Light', - value: 'light', - }, - { - name: 'Dark', - value: 'dark', - }, - ], - }, - { - type: 'number', - name: 'port', - message: 'Enter the port for the frontend server:', - default: 3001, - validate: (port: number) => { - return 1 <= port && port <= 65535 ? true : 'Enter a port between 1 and 65535'; - }, - }, - ]); - - console.log( - ` - Wizard complete. - - 🚀🚀🚀🚀 .... Preparing for liftoff .... 🚀🚀🚀🚀 - - Run << docker-compose up >> and open your browser to http://localhost:` + - answers.port + - `\n\n\n\n\n`, - ); - - const rpcUrl = answers.network === 'ganache' ? 'http://ganache:8545' : answers.rpcUrl; - - const options: BuildOptions = { - tokenType: answers.tokenType, - network: answers.network, - rpcUrl, - relayerUrl: answers.relayerUrl, - relayerWebsocketUrl: answers.relayerWebsocketUrl, - feeRecipient: answers.feeRecipient || ZERO_ADDRESS, - theme: answers.theme, - port: answers.port, - makerFee: answers.makerFee || 0, - takerFee: answers.takerFee || 0, - collectibleAddress: answers.collectibleAddress || mockERC721Address, - collectibleName: answers.collectibleName || '', - collectibleDescription: answers.collectibleDescription || '', - }; - - const dockerComposeYml = buildDockerComposeYml(options); - - const composeFilePath = process.argv[2] || 'docker-compose.yml'; - - fs.writeFileSync(composeFilePath, dockerComposeYml); +function main() { + return __awaiter(this, void 0, void 0, function () { + var networkChoices, answers, networkId, options, dockerComposeYml; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + networkChoices = [ + { + name: 'Mainnet', + value: 'mainnet', + }, + { + name: 'Kovan', + value: 'kovan', + }, + { + name: 'Ropsten', + value: 'ropsten', + }, + { + name: 'Local / Custom', + value: 'custom', + }, + ]; + return [4 /*yield*/, inquirer.prompt([ + { + type: 'list', + name: 'tokenType', + message: 'Select the kind of token you want to support on your exchange', + choices: ['ERC20', 'ERC721'], + }, + { + type: 'list', + name: 'network', + message: 'Select the network you want to use', + choices: networkChoices, + }, + { + type: 'input', + name: 'rpcUrl', + message: 'Select the RPC URL you want to use', + default: function (answers) { + return getRpcUrl(answers.network); + }, + validate: function (rpcUrl) { + return /https?:\/\/.+/.test(rpcUrl) ? true : 'Please enter a valid URL'; + }, + }, + { + type: 'input', + name: 'feeRecipient', + message: 'Enter the fee recipient:', + default: ZERO_ADDRESS, + validate: function (answer) { + return /(0x)?[0-9a-fA-F]{40}/.test(answer) ? true : 'Please enter a valid address'; + }, + }, + { + type: 'number', + name: 'makerFee', + message: 'Enter the maker fee:', + default: 0, + when: function (answers) { return answers.feeRecipient !== ZERO_ADDRESS; }, + }, + { + type: 'number', + name: 'takerFee', + message: 'Enter the taker fee:', + default: 0, + when: function (answers) { return answers.feeRecipient !== ZERO_ADDRESS; }, + }, + { + type: 'list', + name: 'theme', + message: 'Select the theme you want to use', + choices: [ + { + name: 'Light', + value: 'light', + }, + { + name: 'Dark', + value: 'dark', + }, + ], + }, + { + type: 'number', + name: 'port', + message: 'Enter the port for the server:', + default: 3001, + validate: function (port) { + return 1 <= port && port <= 65535 ? true : 'Enter a port between 1 and 65535'; + }, + }, + ])]; + case 1: + answers = _a.sent(); + networkId = getNetworkId(answers.network); + options = { + tokenType: answers.tokenType, + networkId: networkId, + rpcUrl: answers.rpcUrl, + feeRecipient: answers.feeRecipient || ZERO_ADDRESS, + theme: answers.theme, + port: answers.port, + makerFee: answers.makerFee, + takerFee: answers.takerFee, + }; + dockerComposeYml = build_1.buildDockerComposeYml(options); + fs.writeFileSync('docker-compose.yml', dockerComposeYml); + return [2 /*return*/]; + } + }); + }); } - main(); diff --git a/tsconfig.json b/tsconfig.json index 93152b0..34c3fdb 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,6 @@ { "compilerOptions": { "target": "es5", - "lib": ["es2018", "esnext"], "module": "commonjs", "outDir": "lib", "strict": true, diff --git a/yarn.lock b/yarn.lock index ce3b4c8..8babb15 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,6 +5,7 @@ "@types/inquirer@^6.0.2": version "6.0.2" resolved "https://registry.yarnpkg.com/@types/inquirer/-/inquirer-6.0.2.tgz#2a1fdc089cc65a485c7410bc32e3fc41afcfa2c7" + integrity sha512-2gCUmuV+jxyeiERJK2nP8+IqHV/QzonDW9bjzQUAaynK3e0pC9FvOC6e6eEq6qgFHgh42Cm63u3BnESht2ZsxA== dependencies: "@types/through" "*" rxjs ">=6.4.0" @@ -12,38 +13,39 @@ "@types/node@*": version "12.0.2" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.0.2.tgz#3452a24edf9fea138b48fad4a0a028a683da1e40" - -"@types/node@^12.0.4": - version "12.0.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.0.4.tgz#46832183115c904410c275e34cf9403992999c32" + integrity sha512-5tabW/i+9mhrfEOUcLDu2xBPsHJ+X5Orqy9FKpale3SjDA17j5AEpYq5vfy3oAeAHGcvANRCO3NV3d2D6q3NiA== "@types/through@*": version "0.0.29" resolved "https://registry.yarnpkg.com/@types/through/-/through-0.0.29.tgz#72943aac922e179339c651fa34a4428a4d722f93" + integrity sha512-9a7C5VHh+1BKblaYiq+7Tfc+EOmjMdZaD1MYtkQjSoxgB69tBjW98ry6SKsi4zEIWztLOMRuL87A3bdT/Fc/4w== dependencies: "@types/node" "*" ansi-escapes@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" @@ -52,34 +54,41 @@ chalk@^2.4.2: chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= dependencies: restore-cursor "^2.0.0" cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 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" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= external-editor@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" + integrity sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA== dependencies: chardet "^0.7.0" iconv-lite "^0.4.24" @@ -88,22 +97,26 @@ external-editor@^3.0.3: figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= dependencies: escape-string-regexp "^1.0.5" has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" inquirer@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.3.1.tgz#7a413b5e7950811013a3db491c61d1f3b776e8e7" + integrity sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA== dependencies: ansi-escapes "^3.2.0" chalk "^2.4.2" @@ -122,18 +135,22 @@ inquirer@^6.3.1: is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= lodash@^4.17.11: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + version "4.17.11" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" + integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== mute-stream@0.0.7: version "0.0.7" @@ -142,20 +159,24 @@ mute-stream@0.0.7: onetime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= dependencies: mimic-fn "^1.0.0" os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= prettier@^1.17.1: version "1.17.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.17.1.tgz#ed64b4e93e370cb8a25b9ef7fef3e4fd1c0995db" + integrity sha512-TzGRNvuUSmPgwivDqkZ9tM/qTGW9hqDKWOE9YHiyQdixlKbv7kvEqsmDPrcHJTKwthU774TQwZXVtaQ/mMsvjg== restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= dependencies: onetime "^2.0.0" signal-exit "^3.0.2" @@ -163,26 +184,31 @@ restore-cursor@^2.0.0: run-async@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= dependencies: is-promise "^2.1.0" rxjs@>=6.4.0, rxjs@^6.4.0: version "6.5.2" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.2.tgz#2e35ce815cd46d84d02a209fb4e5921e051dbec7" + integrity sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg== dependencies: tslib "^1.9.0" "safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= string-width@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== dependencies: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" @@ -190,35 +216,42 @@ string-width@^2.1.0: strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= dependencies: ansi-regex "^3.0.0" strip-ansi@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== dependencies: ansi-regex "^4.1.0" supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== dependencies: os-tmpdir "~1.0.2" tslib@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" + integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== typescript@^3.4.5: version "3.4.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.4.5.tgz#2d2618d10bb566572b8d7aad5180d84257d70a99" + integrity sha512-YycBxUb49UUhdNMU5aJ7z5Ej2XGmaIBL0x34vZ82fn3hGvD+bgrMrVDpatgz2f7YxUMJxMkbWxJZeAvDxVe7Vw==