From d64da60d4ea1a10a8a88a29ce8d7d05e9bc0db54 Mon Sep 17 00:00:00 2001 From: mbecker20 Date: Fri, 18 Mar 2022 23:02:51 -0700 Subject: [PATCH] begin cli v2 --- cli-legacy/package.json | 28 ++ cli-legacy/post-build.mjs | 14 + {cli => cli-legacy}/src/App.tsx | 5 +- .../src/components/FinalConfig.tsx | 0 {cli => cli-legacy}/src/components/Intro.tsx | 0 .../src/components/Periphery.tsx | 0 {cli => cli-legacy}/src/components/Setup.tsx | 0 .../src/components/docker/Docker.tsx | 0 .../src/components/docker/InstallDocker.tsx | 0 .../src/components/mongo/Mongo.tsx | 1 + .../src/components/mongo/SetupMongo.tsx | 0 .../src/components/registry/Registry.tsx | 0 .../src/components/registry/SetupRegistry.tsx | 0 .../src/components/util/LabelledSelector.tsx | 27 ++ cli-legacy/src/components/util/Selector.tsx | 31 ++ cli-legacy/src/components/util/YesNo.tsx | 37 +++ {cli => cli-legacy}/src/config.ts | 0 .../src/helpers/deploy/mongo.ts | 8 +- cli-legacy/src/helpers/deploy/monitor.ts | 19 ++ cli-legacy/src/helpers/deploy/registry.ts | 14 + cli-legacy/src/helpers/docker.ts | 114 +++++++ cli-legacy/src/helpers/execute.ts | 24 ++ {cli => cli-legacy}/src/helpers/general.ts | 0 .../src/helpers/mongoose/deployment.ts | 0 .../src/helpers/mongoose/mongoose.ts | 0 .../src/helpers/mongoose/server.ts | 0 .../src/helpers/mongoose/user.ts | 0 {cli => cli-legacy}/src/hooks.ts | 0 {cli => cli-legacy}/src/monitor-cli.tsx | 0 cli-legacy/src/types.d.ts | 41 +++ {cli => cli-legacy}/tsconfig.json | 0 cli-legacy/update-version.mjs | 15 + cli-legacy/vite.config.ts | 12 + {cli => cli-legacy}/yarn.lock | 0 cli/package.json | 24 +- cli/post-build.mjs | 9 +- cli/src/cli.tsx | 14 + cli/src/helpers/deploy/monitor.ts | 16 - cli/src/helpers/deploy/registry.ts | 13 - cli/src/helpers/docker.ts | 67 ++-- cli/src/types.d.ts | 38 ++- cli/update-version.mjs | 3 +- core/src/config.ts | 2 +- yarn.lock | 287 +----------------- 44 files changed, 472 insertions(+), 391 deletions(-) create mode 100644 cli-legacy/package.json create mode 100644 cli-legacy/post-build.mjs rename {cli => cli-legacy}/src/App.tsx (94%) rename {cli => cli-legacy}/src/components/FinalConfig.tsx (100%) rename {cli => cli-legacy}/src/components/Intro.tsx (100%) rename {cli => cli-legacy}/src/components/Periphery.tsx (100%) rename {cli => cli-legacy}/src/components/Setup.tsx (100%) rename {cli => cli-legacy}/src/components/docker/Docker.tsx (100%) rename {cli => cli-legacy}/src/components/docker/InstallDocker.tsx (100%) rename {cli => cli-legacy}/src/components/mongo/Mongo.tsx (97%) rename {cli => cli-legacy}/src/components/mongo/SetupMongo.tsx (100%) rename {cli => cli-legacy}/src/components/registry/Registry.tsx (100%) rename {cli => cli-legacy}/src/components/registry/SetupRegistry.tsx (100%) create mode 100644 cli-legacy/src/components/util/LabelledSelector.tsx create mode 100644 cli-legacy/src/components/util/Selector.tsx create mode 100644 cli-legacy/src/components/util/YesNo.tsx rename {cli => cli-legacy}/src/config.ts (100%) rename {cli => cli-legacy}/src/helpers/deploy/mongo.ts (64%) create mode 100644 cli-legacy/src/helpers/deploy/monitor.ts create mode 100644 cli-legacy/src/helpers/deploy/registry.ts create mode 100644 cli-legacy/src/helpers/docker.ts create mode 100644 cli-legacy/src/helpers/execute.ts rename {cli => cli-legacy}/src/helpers/general.ts (100%) rename {cli => cli-legacy}/src/helpers/mongoose/deployment.ts (100%) rename {cli => cli-legacy}/src/helpers/mongoose/mongoose.ts (100%) rename {cli => cli-legacy}/src/helpers/mongoose/server.ts (100%) rename {cli => cli-legacy}/src/helpers/mongoose/user.ts (100%) rename {cli => cli-legacy}/src/hooks.ts (100%) rename {cli => cli-legacy}/src/monitor-cli.tsx (100%) create mode 100644 cli-legacy/src/types.d.ts rename {cli => cli-legacy}/tsconfig.json (100%) create mode 100644 cli-legacy/update-version.mjs create mode 100644 cli-legacy/vite.config.ts rename {cli => cli-legacy}/yarn.lock (100%) create mode 100644 cli/src/cli.tsx delete mode 100644 cli/src/helpers/deploy/monitor.ts delete mode 100644 cli/src/helpers/deploy/registry.ts diff --git a/cli-legacy/package.json b/cli-legacy/package.json new file mode 100644 index 000000000..0a94d6138 --- /dev/null +++ b/cli-legacy/package.json @@ -0,0 +1,28 @@ +{ + "name": "@mbecker20/monitor-cli", + "version": "0.0.3", + "author": "mbecker20", + "license": "MIT", + "bin": "build/monitor-cli.js", + "engines": { + "node": ">=10" + }, + "scripts": { + "start": "yarn build && build/monitor-cli.js", + "build": "vite build && node post-build.mjs && chmod +x build/monitor-cli.js", + "publish-cli": "yarn build && cd build && npm publish --access=public && node update-version.mjs" + }, + "devDependencies": { + "@sindresorhus/tsconfig": "^2.0.0", + "@types/node": "^17.0.21", + "@types/react": "^17.0.40", + "typescript": "^4.6.2", + "vite": "^2.8.6" + }, + "dependencies": { + "ink": "^3.2.0", + "meow": "^10.1.2", + "mongoose": "^6.2.7", + "react": "^17.0.2" + } +} diff --git a/cli-legacy/post-build.mjs b/cli-legacy/post-build.mjs new file mode 100644 index 000000000..73fb2f80e --- /dev/null +++ b/cli-legacy/post-build.mjs @@ -0,0 +1,14 @@ +import { readFileSync, writeFileSync } from "fs"; + +const contents = readFileSync("build/monitor-cli.js").toString(); +writeFileSync("build/monitor-cli.js", "#!/usr/bin/env node\n" + contents); + +const rawpkg = readFileSync("package.json"); +const pkgjson = JSON.parse(rawpkg); + +delete pkgjson.devDependencies; +delete pkgjson.scripts; +// delete pkgjson.dependencies["@monitor/util"]; +pkgjson.bin = "monitor-cli.js"; + +writeFileSync("build/package.json", JSON.stringify(pkgjson, undefined, 2)); diff --git a/cli/src/App.tsx b/cli-legacy/src/App.tsx similarity index 94% rename from cli/src/App.tsx rename to cli-legacy/src/App.tsx index f9739a793..b62fae9eb 100644 --- a/cli/src/App.tsx +++ b/cli-legacy/src/App.tsx @@ -15,10 +15,7 @@ const App = () => { const [current, next, prev] = useSequence(); const [periphery, setPeriphery] = useState(); const [installing, setInstalling] = useState(false); - const [config, setConfig] = useConfig({ - mongoURL: "", - registryURL: "", - }); + const [config, setConfig] = useConfig({}); const corePages: ReactNode[] = [ , diff --git a/cli/src/components/FinalConfig.tsx b/cli-legacy/src/components/FinalConfig.tsx similarity index 100% rename from cli/src/components/FinalConfig.tsx rename to cli-legacy/src/components/FinalConfig.tsx diff --git a/cli/src/components/Intro.tsx b/cli-legacy/src/components/Intro.tsx similarity index 100% rename from cli/src/components/Intro.tsx rename to cli-legacy/src/components/Intro.tsx diff --git a/cli/src/components/Periphery.tsx b/cli-legacy/src/components/Periphery.tsx similarity index 100% rename from cli/src/components/Periphery.tsx rename to cli-legacy/src/components/Periphery.tsx diff --git a/cli/src/components/Setup.tsx b/cli-legacy/src/components/Setup.tsx similarity index 100% rename from cli/src/components/Setup.tsx rename to cli-legacy/src/components/Setup.tsx diff --git a/cli/src/components/docker/Docker.tsx b/cli-legacy/src/components/docker/Docker.tsx similarity index 100% rename from cli/src/components/docker/Docker.tsx rename to cli-legacy/src/components/docker/Docker.tsx diff --git a/cli/src/components/docker/InstallDocker.tsx b/cli-legacy/src/components/docker/InstallDocker.tsx similarity index 100% rename from cli/src/components/docker/InstallDocker.tsx rename to cli-legacy/src/components/docker/InstallDocker.tsx diff --git a/cli/src/components/mongo/Mongo.tsx b/cli-legacy/src/components/mongo/Mongo.tsx similarity index 97% rename from cli/src/components/mongo/Mongo.tsx rename to cli-legacy/src/components/mongo/Mongo.tsx index 72add254f..ba20585ad 100644 --- a/cli/src/components/mongo/Mongo.tsx +++ b/cli-legacy/src/components/mongo/Mongo.tsx @@ -14,6 +14,7 @@ const Mongo = ({ }) => { const [setup, setSetup] = useState(); const [mongoURL, setMongoUrl] = useState("mongodb://127.0.0.1:27017/monitor"); + const [monitorManaged, setMonitorManaged] = useState(false); const [confirm, setConfirm] = useState(false); const blinker = useBlinker(); diff --git a/cli/src/components/mongo/SetupMongo.tsx b/cli-legacy/src/components/mongo/SetupMongo.tsx similarity index 100% rename from cli/src/components/mongo/SetupMongo.tsx rename to cli-legacy/src/components/mongo/SetupMongo.tsx diff --git a/cli/src/components/registry/Registry.tsx b/cli-legacy/src/components/registry/Registry.tsx similarity index 100% rename from cli/src/components/registry/Registry.tsx rename to cli-legacy/src/components/registry/Registry.tsx diff --git a/cli/src/components/registry/SetupRegistry.tsx b/cli-legacy/src/components/registry/SetupRegistry.tsx similarity index 100% rename from cli/src/components/registry/SetupRegistry.tsx rename to cli-legacy/src/components/registry/SetupRegistry.tsx diff --git a/cli-legacy/src/components/util/LabelledSelector.tsx b/cli-legacy/src/components/util/LabelledSelector.tsx new file mode 100644 index 000000000..ed5659385 --- /dev/null +++ b/cli-legacy/src/components/util/LabelledSelector.tsx @@ -0,0 +1,27 @@ +import { Box, Newline, Text } from "ink"; +import React, { ReactNode } from "react"; +import Selector from "./Selector"; + +const LabelledSelector = ({ + label, + items, + onSelect, + direction = "horizontal", + labelColor = "green" +}: { + label: ReactNode; + labelColor?: "green" | "white"; + items: string[]; + onSelect?: (item: string, index: number) => void; + direction?: "vertical" | "horizontal" +}) => { + return ( + + {typeof label === "string" ? {label} : label} + {direction === "vertical" && } + + + ); +}; + +export default LabelledSelector; diff --git a/cli-legacy/src/components/util/Selector.tsx b/cli-legacy/src/components/util/Selector.tsx new file mode 100644 index 000000000..819f906f2 --- /dev/null +++ b/cli-legacy/src/components/util/Selector.tsx @@ -0,0 +1,31 @@ +import React, { useState } from "react"; +import { Box, Text, useInput } from "ink"; + +const Selector = (p: { + items: string[]; + onSelect?: (item: string, i: number) => void; +}) => { + const [highlighted, setHighlighted] = useState(0); + useInput((_, key) => { + if (key.upArrow) { + setHighlighted(Math.max(highlighted - 1, 0)); + } else if (key.downArrow) { + setHighlighted(Math.min(highlighted + 1, p.items.length - 1)); + } else if (key.return) { + if (p.onSelect) p.onSelect(p.items[highlighted]!, highlighted); + } + }); + return ( + + {p.items.map((item, i) => { + return ( + + {i === highlighted ? ">" : " "} {item} + + ); + })} + + ); +}; + +export default Selector; diff --git a/cli-legacy/src/components/util/YesNo.tsx b/cli-legacy/src/components/util/YesNo.tsx new file mode 100644 index 000000000..cead4cdfe --- /dev/null +++ b/cli-legacy/src/components/util/YesNo.tsx @@ -0,0 +1,37 @@ +import React, { ReactNode } from "react"; +import LabelledSelector from "./LabelledSelector"; + +const YesNo = ({ + label, + onYes, + onNo, + onSelect, + direction, + labelColor +}: { + label: ReactNode; + onYes?: () => void; + onNo?: () => void; + onSelect?: (res: "yes" | "no") => void; + direction?: "vertical" | "horizontal"; + labelColor?: "green" | "white" +}) => { + return ( + { + if (item === "yes") { + onYes && onYes(); + } else { + onNo && onNo(); + } + onSelect && onSelect(item as "yes" | "no"); + }} + direction={direction} + labelColor={labelColor} + /> + ); +}; + +export default YesNo; diff --git a/cli/src/config.ts b/cli-legacy/src/config.ts similarity index 100% rename from cli/src/config.ts rename to cli-legacy/src/config.ts diff --git a/cli/src/helpers/deploy/mongo.ts b/cli-legacy/src/helpers/deploy/mongo.ts similarity index 64% rename from cli/src/helpers/deploy/mongo.ts rename to cli-legacy/src/helpers/deploy/mongo.ts index 687146dc8..5a61f2487 100644 --- a/cli/src/helpers/deploy/mongo.ts +++ b/cli-legacy/src/helpers/deploy/mongo.ts @@ -1,11 +1,7 @@ +import { StartConfig } from "../../types"; import { execute } from "../execute"; -export async function startMongo( - name: string, - port: number, - volume: string | false, - restart: string -) { +export async function startMongo({ name, port, volume, restart }: StartConfig) { const command = `docker run -d --name ${name} -p ${port}:27017${ volume ? ` -v ${volume}:/data/db` : "" } --restart ${restart} mongo:latest`; diff --git a/cli-legacy/src/helpers/deploy/monitor.ts b/cli-legacy/src/helpers/deploy/monitor.ts new file mode 100644 index 000000000..79727d748 --- /dev/null +++ b/cli-legacy/src/helpers/deploy/monitor.ts @@ -0,0 +1,19 @@ +import { CORE_IMAGE } from "../../config"; +import { Config } from "../../types"; +import { execute } from "../execute"; +import { toDashedName } from "../general"; + +export async function startMonitorCore({ + monitorCore: { name, secretVolume, hostNetwork, port }, + mongo: { url: mongoURL }, + registry: { url: registryURL }, +}: Config) { + const nameConfig = `--name ${toDashedName(name)}`; + const env = `-e MONGO_URL=${mongoURL}${ + registryURL ? ` -e REGISTRY_URL=${registryURL}` : "" + }`; + const volume = `-v ${secretVolume}:/secrets`; + const network = hostNetwork ? `--network=\"host\"${port ? ` -e PORT=${port}` : ""}` : `-p ${port}:9000`; + const command = `docker run -d ${nameConfig} ${volume} ${network} ${env} ${CORE_IMAGE}`; + return await execute(command); +} diff --git a/cli-legacy/src/helpers/deploy/registry.ts b/cli-legacy/src/helpers/deploy/registry.ts new file mode 100644 index 000000000..fe6b63bd6 --- /dev/null +++ b/cli-legacy/src/helpers/deploy/registry.ts @@ -0,0 +1,14 @@ +import { StartConfig } from "../../types"; +import { execute } from "../execute"; + +export async function startRegistry({ + name, + port, + volume, + restart, +}: StartConfig) { + const command = `docker run -d --name ${name} -p ${port}:5000${ + volume ? ` -v ${volume}:/var/lib/registry` : "" + } --restart ${restart} registry:2`; + return await execute(command); +} diff --git a/cli-legacy/src/helpers/docker.ts b/cli-legacy/src/helpers/docker.ts new file mode 100644 index 000000000..a2e452d7c --- /dev/null +++ b/cli-legacy/src/helpers/docker.ts @@ -0,0 +1,114 @@ +import { CommandLogError } from "@monitor/types"; +import { execute } from "./execute"; + +export type InstallLog = { + stage: string; + log: CommandLogError; +}; + +export async function installDockerUbuntu( + onCommandEnd: (log: InstallLog) => void, + systemCtlEnable?: boolean +) { + const total = 6 + (systemCtlEnable ? 1 : 0); + const update = await execute("sudo apt-get update"); + if (update.isError) return { + stage: "error updating system", + log: update + }; + onCommandEnd({ + stage: `updated system (1 of ${total})`, + log: update, + }); + + + const installDeps = await execute(` + sudo apt-get install \ + ca-certificates \ + curl \ + gnupg \ + lsb-release + `); + if (installDeps.isError) return { + stage: "error installing dependencies", + log: installDeps + }; + onCommandEnd({ + stage: `installed dependencies (2 of ${total})`, + log: installDeps, + }); + + + const addKey = await execute( + "curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg" + ); + if (addKey.isError) return { + stage: "error adding docker key", + log: addKey, + }; + onCommandEnd({ + stage: `added docker key (3 of ${total})`, + log: addKey, + }); + + + const setStableRepository = await execute(` + echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ + $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + `); + if (setStableRepository.isError) return { + stage: "error adding stable repository", + log: setStableRepository, + }; + onCommandEnd({ + stage: `set docker stable repository (4 of ${total})`, + log: setStableRepository, + }); + + const installDocker = await execute( + "sudo apt-get udpate && sudo apt-get install docker-ce docker-ce-cli containerd.io" + ); + if (installDocker.isError) return { + stage: "error installing docker", + log: installDocker, + }; + onCommandEnd({ + stage: `installed docker (5 of ${total})`, + log: installDocker, + }); + + const addUser = await execute( + "sudo groupadd docker && sudo usermod -aG docker $USER && newgrp docker" + ); + if (addUser.isError) + return { + stage: "error adding user to docker group", + log: addUser, + }; + onCommandEnd({ + stage: `added user to docker user group (6 of ${total})`, + log: addUser, + }); + + if (systemCtlEnable) { + const startOnBoot = await execute( + "sudo systemctl enable docker.service && sudo systemctl enable containerd.service" + ); + if (startOnBoot.isError) return { + stage: "error configuring to start on boot", + log: startOnBoot, + }; + onCommandEnd({ + stage: `configured to start on boot (7 of ${total})`, + log: startOnBoot, + }); + } + + return; +} + +export async function checkDockerNotInstalled() { + const res = await execute("docker ps"); + return res.isError +} diff --git a/cli-legacy/src/helpers/execute.ts b/cli-legacy/src/helpers/execute.ts new file mode 100644 index 000000000..e29f285de --- /dev/null +++ b/cli-legacy/src/helpers/execute.ts @@ -0,0 +1,24 @@ +import { exec } from "child_process"; +import { promisify } from "util"; +import { CommandLogError } from "@monitor/types"; + +export const pExec = promisify(exec); + +export async function execute( + command: string, + commandForLog?: string +): Promise { + try { + return { + command, + log: await pExec(command), + isError: false, + }; + } catch (err) { + return { + command: commandForLog || command, + log: { stderr: JSON.stringify(err) }, + isError: true, + }; + } +} diff --git a/cli/src/helpers/general.ts b/cli-legacy/src/helpers/general.ts similarity index 100% rename from cli/src/helpers/general.ts rename to cli-legacy/src/helpers/general.ts diff --git a/cli/src/helpers/mongoose/deployment.ts b/cli-legacy/src/helpers/mongoose/deployment.ts similarity index 100% rename from cli/src/helpers/mongoose/deployment.ts rename to cli-legacy/src/helpers/mongoose/deployment.ts diff --git a/cli/src/helpers/mongoose/mongoose.ts b/cli-legacy/src/helpers/mongoose/mongoose.ts similarity index 100% rename from cli/src/helpers/mongoose/mongoose.ts rename to cli-legacy/src/helpers/mongoose/mongoose.ts diff --git a/cli/src/helpers/mongoose/server.ts b/cli-legacy/src/helpers/mongoose/server.ts similarity index 100% rename from cli/src/helpers/mongoose/server.ts rename to cli-legacy/src/helpers/mongoose/server.ts diff --git a/cli/src/helpers/mongoose/user.ts b/cli-legacy/src/helpers/mongoose/user.ts similarity index 100% rename from cli/src/helpers/mongoose/user.ts rename to cli-legacy/src/helpers/mongoose/user.ts diff --git a/cli/src/hooks.ts b/cli-legacy/src/hooks.ts similarity index 100% rename from cli/src/hooks.ts rename to cli-legacy/src/hooks.ts diff --git a/cli/src/monitor-cli.tsx b/cli-legacy/src/monitor-cli.tsx similarity index 100% rename from cli/src/monitor-cli.tsx rename to cli-legacy/src/monitor-cli.tsx diff --git a/cli-legacy/src/types.d.ts b/cli-legacy/src/types.d.ts new file mode 100644 index 000000000..08ddeb504 --- /dev/null +++ b/cli-legacy/src/types.d.ts @@ -0,0 +1,41 @@ +export type Config = { + monitorCore?: { + name: string; + secretVolume: string; // to mount secrets.json into the container + hostNetwork?: boolean; + port?: number; + }; + monitorPeriphery?: { + name: string; + hostNetwork?: boolean; + port?: number; + }; + mongo?: { + url: string; + deploymentConfig?: { + // if mongo container already exists locally running on docker and should be added as a monitor managed deployment + }; + startConfig?: StartConfig; + }; + registry?: { + exists: boolean; // if this is false, dont use a registry and builds will be disabled + url?: string; + deploymentConfig?: {}; + startConfig?: StartConfig; + }; +}; + +export type StartConfig = { + // if this is attached, the cli will start container with this config and add + name: string; + port: number; + volume: string | false; + restart: string; +}; + +export type SetConfig = ( + field: keyof Config, + val: string | number | boolean +) => void; + +export type Next = () => void; diff --git a/cli/tsconfig.json b/cli-legacy/tsconfig.json similarity index 100% rename from cli/tsconfig.json rename to cli-legacy/tsconfig.json diff --git a/cli-legacy/update-version.mjs b/cli-legacy/update-version.mjs new file mode 100644 index 000000000..e00d8c738 --- /dev/null +++ b/cli-legacy/update-version.mjs @@ -0,0 +1,15 @@ +import { readFileSync, writeFileSync } from "fs"; + +const rawpkg = readFileSync("package.json"); +const pkgjson = JSON.parse(rawpkg); + +const [major, minor, increment] = pkgjson.version + .split(".") + .map((item) => Number(item)); + +pkgjson.version = `${major}.${minor}.${increment + 1}` + +writeFileSync( + "package.json", + JSON.stringify(pkgjson, undefined, 2) +); diff --git a/cli-legacy/vite.config.ts b/cli-legacy/vite.config.ts new file mode 100644 index 000000000..e73b002c8 --- /dev/null +++ b/cli-legacy/vite.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from "vite"; + +export default defineConfig({ + build: { + outDir: "build", + target: "esnext", + ssr: "./src/monitor-cli.tsx", + rollupOptions: { + input: "./src/monitor-cli.tsx", + }, + }, +}); diff --git a/cli/yarn.lock b/cli-legacy/yarn.lock similarity index 100% rename from cli/yarn.lock rename to cli-legacy/yarn.lock diff --git a/cli/package.json b/cli/package.json index 0a94d6138..a485cd5b2 100644 --- a/cli/package.json +++ b/cli/package.json @@ -1,28 +1,20 @@ { "name": "@mbecker20/monitor-cli", "version": "0.0.3", + "description": "A CLI to aid in the setup of monitor", + "bin": "cli.js", "author": "mbecker20", "license": "MIT", - "bin": "build/monitor-cli.js", - "engines": { - "node": ">=10" - }, - "scripts": { - "start": "yarn build && build/monitor-cli.js", - "build": "vite build && node post-build.mjs && chmod +x build/monitor-cli.js", - "publish-cli": "yarn build && cd build && npm publish --access=public && node update-version.mjs" + "dependencies": { + "ink": "^3.2.0", + "mongoose": "^6.2.7", + "react": "^17.0.2" }, "devDependencies": { - "@sindresorhus/tsconfig": "^2.0.0", "@types/node": "^17.0.21", "@types/react": "^17.0.40", "typescript": "^4.6.2", - "vite": "^2.8.6" - }, - "dependencies": { - "ink": "^3.2.0", - "meow": "^10.1.2", - "mongoose": "^6.2.7", - "react": "^17.0.2" + "vite": "^2.8.6", + "@monitor/types": "1.0.0" } } diff --git a/cli/post-build.mjs b/cli/post-build.mjs index 73fb2f80e..886e104bc 100644 --- a/cli/post-build.mjs +++ b/cli/post-build.mjs @@ -1,14 +1,13 @@ import { readFileSync, writeFileSync } from "fs"; -const contents = readFileSync("build/monitor-cli.js").toString(); -writeFileSync("build/monitor-cli.js", "#!/usr/bin/env node\n" + contents); +const contents = readFileSync("build/cli.js").toString(); +writeFileSync("build/cli.js", "#!/usr/bin/env node\n" + contents); -const rawpkg = readFileSync("package.json"); -const pkgjson = JSON.parse(rawpkg); +const pkgjson = JSON.parse(readFileSync("package.json")); delete pkgjson.devDependencies; delete pkgjson.scripts; // delete pkgjson.dependencies["@monitor/util"]; -pkgjson.bin = "monitor-cli.js"; +// pkgjson.bin = "cli.js"; writeFileSync("build/package.json", JSON.stringify(pkgjson, undefined, 2)); diff --git a/cli/src/cli.tsx b/cli/src/cli.tsx new file mode 100644 index 000000000..5daa3edd9 --- /dev/null +++ b/cli/src/cli.tsx @@ -0,0 +1,14 @@ +import React from "react"; +import { render } from "ink"; +import { Box } from "ink"; +import { checkDockerNotInstalled } from "./helpers/docker"; + +const App = () => { + return ; +}; + +export let dockerNotInstalled = true; +checkDockerNotInstalled().then((res) => { + dockerNotInstalled = res; + render(); +}); \ No newline at end of file diff --git a/cli/src/helpers/deploy/monitor.ts b/cli/src/helpers/deploy/monitor.ts deleted file mode 100644 index 77665dfe6..000000000 --- a/cli/src/helpers/deploy/monitor.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { CORE_IMAGE } from "../../config"; -import { Config } from "../../types"; -import { execute } from "../execute"; - -export async function startMonitorCore({ - monitorCore: { - - }, - mongo: { url: mongoURL }, - registry: { url: registryURL }, -}: Config) { - const command = `docker run -d --name monitor-core -e MONGO_URL=${mongoURL}${ - registryURL ? ` -e REGISTRY_URL=${registryURL}` : "" - } ${CORE_IMAGE}`; - return await execute(command); -} diff --git a/cli/src/helpers/deploy/registry.ts b/cli/src/helpers/deploy/registry.ts deleted file mode 100644 index cb12cadc9..000000000 --- a/cli/src/helpers/deploy/registry.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { execute } from "../execute"; - -export async function startRegistry( - name: string, - port: number, - volume: string | false, - restart: string -) { - const command = `docker run -d --name ${name} -p ${port}:5000${ - volume ? ` -v ${volume}:/var/lib/registry` : "" - } --restart ${restart} registry:2`; - return await execute(command); -} \ No newline at end of file diff --git a/cli/src/helpers/docker.ts b/cli/src/helpers/docker.ts index a2e452d7c..962259c4e 100644 --- a/cli/src/helpers/docker.ts +++ b/cli/src/helpers/docker.ts @@ -12,15 +12,15 @@ export async function installDockerUbuntu( ) { const total = 6 + (systemCtlEnable ? 1 : 0); const update = await execute("sudo apt-get update"); - if (update.isError) return { - stage: "error updating system", - log: update - }; - onCommandEnd({ + if (update.isError) + return { + stage: "error updating system", + log: update, + }; + onCommandEnd({ stage: `updated system (1 of ${total})`, log: update, }); - const installDeps = await execute(` sudo apt-get install \ @@ -29,38 +29,39 @@ export async function installDockerUbuntu( gnupg \ lsb-release `); - if (installDeps.isError) return { - stage: "error installing dependencies", - log: installDeps - }; - onCommandEnd({ + if (installDeps.isError) + return { + stage: "error installing dependencies", + log: installDeps, + }; + onCommandEnd({ stage: `installed dependencies (2 of ${total})`, log: installDeps, }); - const addKey = await execute( "curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg" ); - if (addKey.isError) return { - stage: "error adding docker key", - log: addKey, - }; - onCommandEnd({ + if (addKey.isError) + return { + stage: "error adding docker key", + log: addKey, + }; + onCommandEnd({ stage: `added docker key (3 of ${total})`, log: addKey, }); - const setStableRepository = await execute(` echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null `); - if (setStableRepository.isError) return { - stage: "error adding stable repository", - log: setStableRepository, - }; + if (setStableRepository.isError) + return { + stage: "error adding stable repository", + log: setStableRepository, + }; onCommandEnd({ stage: `set docker stable repository (4 of ${total})`, log: setStableRepository, @@ -69,10 +70,11 @@ export async function installDockerUbuntu( const installDocker = await execute( "sudo apt-get udpate && sudo apt-get install docker-ce docker-ce-cli containerd.io" ); - if (installDocker.isError) return { - stage: "error installing docker", - log: installDocker, - }; + if (installDocker.isError) + return { + stage: "error installing docker", + log: installDocker, + }; onCommandEnd({ stage: `installed docker (5 of ${total})`, log: installDocker, @@ -95,10 +97,11 @@ export async function installDockerUbuntu( const startOnBoot = await execute( "sudo systemctl enable docker.service && sudo systemctl enable containerd.service" ); - if (startOnBoot.isError) return { - stage: "error configuring to start on boot", - log: startOnBoot, - }; + if (startOnBoot.isError) + return { + stage: "error configuring to start on boot", + log: startOnBoot, + }; onCommandEnd({ stage: `configured to start on boot (7 of ${total})`, log: startOnBoot, @@ -109,6 +112,6 @@ export async function installDockerUbuntu( } export async function checkDockerNotInstalled() { - const res = await execute("docker ps"); - return res.isError + const res = await execute("docker ps"); + return res.isError; } diff --git a/cli/src/types.d.ts b/cli/src/types.d.ts index b91fe10d8..08ddeb504 100644 --- a/cli/src/types.d.ts +++ b/cli/src/types.d.ts @@ -1,29 +1,41 @@ export type Config = { - monitorCore: { - name: string; - - }; - mongo: { + monitorCore?: { + name: string; + secretVolume: string; // to mount secrets.json into the container + hostNetwork?: boolean; + port?: number; + }; + monitorPeriphery?: { + name: string; + hostNetwork?: boolean; + port?: number; + }; + mongo?: { url: string; deploymentConfig?: { // if mongo container already exists locally running on docker and should be added as a monitor managed deployment }; - startConfig?: { - // if this is attached, the cli will start container with this config and add - }; + startConfig?: StartConfig; }; - registry: { + registry?: { exists: boolean; // if this is false, dont use a registry and builds will be disabled url?: string; deploymentConfig?: {}; - startConfig?: {}; + startConfig?: StartConfig; }; }; +export type StartConfig = { + // if this is attached, the cli will start container with this config and add + name: string; + port: number; + volume: string | false; + restart: string; +}; + export type SetConfig = ( - domain: keyof Config, - field: keyof Config[keyof Config], - val: string | number | boolean + field: keyof Config, + val: string | number | boolean ) => void; export type Next = () => void; diff --git a/cli/update-version.mjs b/cli/update-version.mjs index e00d8c738..d06098427 100644 --- a/cli/update-version.mjs +++ b/cli/update-version.mjs @@ -1,7 +1,6 @@ import { readFileSync, writeFileSync } from "fs"; -const rawpkg = readFileSync("package.json"); -const pkgjson = JSON.parse(rawpkg); +const pkgjson = JSON.parse(readFileSync("package.json")); const [major, minor, increment] = pkgjson.version .split(".") diff --git a/core/src/config.ts b/core/src/config.ts index 8bc641cb8..21ccc65df 100644 --- a/core/src/config.ts +++ b/core/src/config.ts @@ -8,7 +8,7 @@ import { export const CORE_SERVER_NAME = getStringFromEnv("CORE_SERVER_NAME", "Monitor Core"); export const SECRETS = readJSONFile("/secrets/secrets.json"); export const LOGGER = getBooleanFromEnv("LOGGER", true); -export const PORT = getNumberFromEnv("PORT", 8000); +export const PORT = getNumberFromEnv("PORT", 9000); export const HOST = getStringFromEnv("HOST", "http://localhost:" + PORT); export const MONGO_URL = getStringFromEnv( "MONGO_URL", diff --git a/yarn.lock b/yarn.lock index 3f9db162a..3c1750dd1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,7 +9,7 @@ dependencies: "@jridgewell/trace-mapping" "^0.3.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7": +"@babel/code-frame@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== @@ -385,11 +385,6 @@ semver "^7.3.5" tar "^6.1.11" -"@sindresorhus/tsconfig@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/tsconfig/-/tsconfig-2.0.0.tgz#610e1cb8ed4e1cb7ff0cb4cb8712cd607315c152" - integrity sha512-1nsyWtFtPpVjEnNzp2rd03BVz84BYHeW7LNYvmcj3q4jAgJL2hl0XBp3WmDFFPjFLF3w+L0XEYqhjWUTU+TCzw== - "@swc/core-android-arm-eabi@1.2.156": version "1.2.156" resolved "https://registry.yarnpkg.com/@swc/core-android-arm-eabi/-/core-android-arm-eabi-1.2.156.tgz#4d4cc38d5071b74c7f55ddc5e0931a2cd3bcc530" @@ -504,21 +499,11 @@ dependencies: "@types/node" "*" -"@types/minimist@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" - integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== - "@types/node@*", "@types/node@^17.0.21": version "17.0.21" resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.21.tgz#864b987c0c68d07b4345845c3e63b75edd143644" integrity sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ== -"@types/normalize-package-data@^2.4.0": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" - integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== - "@types/prop-types@*": version "15.7.4" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11" @@ -659,11 +644,6 @@ are-we-there-yet@^2.0.0: delegates "^1.0.0" readable-stream "^3.6.0" -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= - asn1.js@^5.3.0: version "5.4.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" @@ -803,21 +783,6 @@ buffer@^5.5.0, buffer@^5.6.0: base64-js "^1.3.1" ieee754 "^1.1.13" -camelcase-keys@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-7.0.2.tgz#d048d8c69448745bb0de6fc4c1c52a30dfbe7252" - integrity sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg== - dependencies: - camelcase "^6.3.0" - map-obj "^4.1.0" - quick-lru "^5.1.1" - type-fest "^1.2.1" - -camelcase@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - caniuse-lite@^1.0.30001313: version "1.0.30001315" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001315.tgz#f1b1efd1171ee1170d52709a7252632dacbd7c77" @@ -976,24 +941,6 @@ debug@4, debug@4.x, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1: dependencies: ms "2.1.2" -decamelize-keys@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" - integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= - dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -decamelize@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-5.0.1.tgz#db11a92e58c741ef339fb0a2868d8a06a9a7b1e9" - integrity sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA== - deepmerge@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" @@ -1086,13 +1033,6 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: dependencies: once "^1.4.0" -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - esbuild-android-64@0.14.25: version "0.14.25" resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.25.tgz#d532d38cb5fe0ae45167ce35f4bbc784c636be40" @@ -1415,14 +1355,6 @@ find-my-way@^4.5.0: safe-regex2 "^2.0.0" semver-store "^0.3.0" -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - flatstr@^1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/flatstr/-/flatstr-1.0.12.tgz#c2ba6a08173edbb6c9640e3055b95e287ceb5931" @@ -1521,11 +1453,6 @@ graceful-fs@^4.1.6, graceful-fs@^4.2.0: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== -hard-rejection@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" - integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -1553,13 +1480,6 @@ helmet@^5.0.1: resolved "https://registry.yarnpkg.com/helmet/-/helmet-5.0.2.tgz#3264ec6bab96c82deaf65e3403c369424cb2366c" integrity sha512-QWlwUZZ8BtlvwYVTSDTBChGf8EOcQ2LkGMnQJxSzD1mUu8CCjXJZq/BXP8eWw4kikRnzlhtYo3lCk0ucmYA3Vg== -hosted-git-info@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" - integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== - dependencies: - lru-cache "^6.0.0" - html-entities@2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.2.tgz#760b404685cb1d794e4f4b744332e3b00dcfe488" @@ -1605,11 +1525,6 @@ indent-string@^4.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -indent-string@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-5.0.0.tgz#4fd2980fccaf8622d14c64d694f4cf33c81951a5" - integrity sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg== - inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -1662,11 +1577,6 @@ ipaddr.js@1.9.1: resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" @@ -1674,7 +1584,7 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-core-module@^2.5.0, is-core-module@^2.8.1: +is-core-module@^2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== @@ -1686,11 +1596,6 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= - is-what@^4.1.6: version "4.1.7" resolved "https://registry.yarnpkg.com/is-what/-/is-what-4.1.7.tgz#c41dc1d2d2d6a9285c624c2505f61849c8b1f9cc" @@ -1706,11 +1611,6 @@ jsesc@^2.5.1: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -1742,11 +1642,6 @@ kareem@2.3.4: resolved "https://registry.yarnpkg.com/kareem/-/kareem-2.3.4.tgz#b38c436fb4758775d919b2828b4009db59b52694" integrity sha512-Vcrt8lcpVl0s8ePx634BxwRqmFo+5DcOhlmNadehxreMTIQi/9hOL/B3hZQQbK5DgMS7Lem3xABXV7/S3jy+7g== -kind-of@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - light-my-request@^4.2.0: version "4.8.0" resolved "https://registry.yarnpkg.com/light-my-request/-/light-my-request-4.8.0.tgz#b0bd074902f95814a956819bc2b6c99d8cafcefb" @@ -1757,18 +1652,6 @@ light-my-request@^4.2.0: process-warning "^1.0.0" set-cookie-parser "^2.4.1" -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - lodash@^4.17.20: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" @@ -1795,39 +1678,11 @@ make-dir@^3.1.0: dependencies: semver "^6.0.0" -map-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= - -map-obj@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" - integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== - memory-pager@^1.0.2: version "1.5.0" resolved "https://registry.yarnpkg.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5" integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg== -meow@^10.1.2: - version "10.1.2" - resolved "https://registry.yarnpkg.com/meow/-/meow-10.1.2.tgz#62951cb69afa69594142c8250806bc30a3912e4d" - integrity sha512-zbuAlN+V/sXlbGchNS9WTWjUzeamwMt/BApKCJi7B0QyZstZaMx0n4Unll/fg0njGtMdC9UP5SAscvOCLYdM+Q== - dependencies: - "@types/minimist" "^1.2.2" - camelcase-keys "^7.0.0" - decamelize "^5.0.0" - decamelize-keys "^1.1.0" - hard-rejection "^2.1.0" - minimist-options "4.1.0" - normalize-package-data "^3.0.2" - read-pkg-up "^8.0.0" - redent "^4.0.0" - trim-newlines "^4.0.2" - type-fest "^1.2.2" - yargs-parser "^20.2.9" - merge-anything@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/merge-anything/-/merge-anything-5.0.2.tgz#b023af9b8f48e2fc71eb859d4ad834ba667f4150" @@ -1846,11 +1701,6 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -min-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" - integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== - minimalistic-assert@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -1863,15 +1713,6 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist-options@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" - integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - kind-of "^6.0.3" - minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" @@ -2016,16 +1857,6 @@ nopt@^5.0.0: dependencies: abbrev "1" -normalize-package-data@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" - integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== - dependencies: - hosted-git-info "^4.0.1" - is-core-module "^2.5.0" - semver "^7.3.4" - validate-npm-package-license "^3.0.1" - npmlog@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" @@ -2067,40 +1898,18 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" -p-limit@^3.0.2, p-limit@^3.1.0: +p-limit@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -parse-json@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - patch-console@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/patch-console/-/patch-console-1.0.0.tgz#19b9f028713feb8a3c023702a8cc8cb9f7466f9d" integrity sha512-nxl9nrnLQmh64iTzMfyylSlRozL7kAXIaxw1fVcLYdyhNkJCRUzirRZTikXGJsg+hc4fqpneTK6iU2H1Q8THSA== -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -2179,11 +1988,6 @@ quick-format-unescaped@^4.0.3: resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz#93ef6dd8d3453cbc7970dd614fad4c5954d6b5a7" integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" @@ -2214,25 +2018,6 @@ react@^17.0.2: loose-envify "^1.1.0" object-assign "^4.1.1" -read-pkg-up@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-8.0.0.tgz#72f595b65e66110f43b052dd9af4de6b10534670" - integrity sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ== - dependencies: - find-up "^5.0.0" - read-pkg "^6.0.0" - type-fest "^1.0.1" - -read-pkg@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-6.0.0.tgz#a67a7d6a1c2b0c3cd6aa2ea521f40c458a4a504c" - integrity sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^3.0.2" - parse-json "^5.2.0" - type-fest "^1.0.1" - readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" @@ -2242,14 +2027,6 @@ readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable string_decoder "^1.1.1" util-deprecate "^1.0.1" -redent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-4.0.0.tgz#0c0ba7caabb24257ab3bb7a4fd95dd1d5c5681f9" - integrity sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag== - dependencies: - indent-string "^5.0.0" - strip-indent "^4.0.0" - require-from-string@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" @@ -2353,7 +2130,7 @@ semver@^6.0.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: +semver@^7.3.2, semver@^7.3.5: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== @@ -2481,32 +2258,6 @@ sparse-bitfield@^3.0.3: dependencies: memory-pager "^1.0.2" -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.11" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" - integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== - split-ca@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/split-ca/-/split-ca-1.0.1.tgz#6c83aff3692fa61256e0cd197e05e9de157691a6" @@ -2579,13 +2330,6 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -strip-indent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-4.0.0.tgz#b41379433dd06f5eae805e21d631e07ee670d853" - integrity sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA== - dependencies: - min-indent "^1.0.1" - supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -2665,11 +2409,6 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= -trim-newlines@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-4.0.2.tgz#d6aaaf6a0df1b4b536d183879a6b939489808c7c" - integrity sha512-GJtWyq9InR/2HRiLZgpIKv+ufIKrVrvjQWEj7PxAXNc5dwbNJkqhAUoAGgzRmULAnoOM5EIpveYd3J2VeSAIew== - ts-toolbelt@^9.6.0: version "9.6.0" resolved "https://registry.yarnpkg.com/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz#50a25426cfed500d4a09bd1b3afb6f28879edfd5" @@ -2690,11 +2429,6 @@ type-fest@^0.21.3: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -type-fest@^1.0.1, type-fest@^1.2.1, type-fest@^1.2.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" - integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== - typescript@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.2.tgz#fe12d2727b708f4eef40f51598b3398baa9611d4" @@ -2717,14 +2451,6 @@ util-deprecate@^1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - vary@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" @@ -2829,11 +2555,6 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yargs-parser@^20.2.9: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"