diff --git a/.changeset/wise-eels-study.md b/.changeset/wise-eels-study.md new file mode 100644 index 0000000000..eab0166ae4 --- /dev/null +++ b/.changeset/wise-eels-study.md @@ -0,0 +1,5 @@ +--- +"create-medusa-app": minor +--- + +feat(create-medusa-app): update command for a better onboarding experience diff --git a/.eslintignore b/.eslintignore index 64364f4d01..e5bffebae1 100644 --- a/.eslintignore +++ b/.eslintignore @@ -19,6 +19,7 @@ packages/* !packages/stock-location !packages/cache-redis !packages/cache-inmemory +!packages/create-medusa-app **/models/* diff --git a/.eslintrc.js b/.eslintrc.js index 228b7876fb..e392021ce7 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -94,6 +94,7 @@ module.exports = { "./packages/stock-location/tsconfig.spec.json", "./packages/cache-redis/tsconfig.spec.json", "./packages/cache-inmemory/tsconfig.spec.json", + "./packages/create-medusa-app/tsconfig.json", ], }, rules: { diff --git a/packages/create-medusa-app/.gitignore b/packages/create-medusa-app/.gitignore index 57db47f86a..5941af043a 100644 --- a/packages/create-medusa-app/.gitignore +++ b/packages/create-medusa-app/.gitignore @@ -1,3 +1,4 @@ node_modules /dist yarn.lock +my-medusa-store \ No newline at end of file diff --git a/packages/create-medusa-app/README.md b/packages/create-medusa-app/README.md new file mode 100644 index 0000000000..7012b30f46 --- /dev/null +++ b/packages/create-medusa-app/README.md @@ -0,0 +1,58 @@ +

+ + Medusa + +

+

+ create-medusa-app +

+ +

+ Documentation | + Website +

+ +

+An open source composable commerce engine built for developers. +

+

+ + Medusa is released under the MIT license. + + + Current CircleCI build status. + + + PRs welcome! + + Product Hunt + + Discord Chat + + + Follow @medusajs + +

+ +## Overview + +Using this NPX command, you can setup a Medusa backend and admin along with a PostgreSQL database in simple steps. + +--- + +## Usage + +Run the following command in your terminal: + +```bash +npx create-medusa-app@latest +``` + +Then, answer the prompted questions to setup your PostgreSQL database and Medusa project. Once the setup is done, the Medusa admin dashboard will open in your default browser. + +### Options + +| Option | Description | Default value | +|--------------------|-------------------------------------------------------|------------------------------------------------------| +| `--repo-url ` | Create Medusa project from a different repository URL | `https://github.com/medusajs/medusa-starter-default` | +| `--seed` | Using this option seeds the database with demo data | false | diff --git a/packages/create-medusa-app/cli.js b/packages/create-medusa-app/cli.js deleted file mode 100755 index 5283a3da31..0000000000 --- a/packages/create-medusa-app/cli.js +++ /dev/null @@ -1,7 +0,0 @@ -#! /usr/bin/env node - -const { run } = require("./dist") - -run().catch((e) => { - console.warn(e) -}) diff --git a/packages/create-medusa-app/package.json b/packages/create-medusa-app/package.json index 4a41aa673f..0129589442 100644 --- a/packages/create-medusa-app/package.json +++ b/packages/create-medusa-app/package.json @@ -1,55 +1,62 @@ { "name": "create-medusa-app", "version": "0.0.10", - "main": "dist/index.js", - "bin": "cli.js", + "description": "Create a Medusa project using a single command.", + "type": "module", + "exports": "./dist/index.js", + "bin": "dist/index.js", "license": "MIT", - "files": [ - "dist/index.js", - "cli.js" - ], "scripts": { - "build": "microbundle -i src/index.ts --no-pkg-main --target=node -f=cjs --sourcemap=false --compress --alias worker_threads=@ascorbic/worker-threads-shim", - "watch": "microbundle -i src/index.ts --no-pkg-main --target=node -f=cjs --sourcemap=false --alias worker_threads=@ascorbic/worker-threads-shim --watch", - "prepare": "yarn build" + "dev": "ts-node --esm src/index.ts", + "build": "tsc", + "watch": "tsc --watch", + "prepare": "cross-env NODE_ENV=production yarn run build" }, "dependencies": { - "@babel/runtime": "^7.15.4" + "boxen": "^7.1.0", + "chalk": "^5.2.0", + "commander": "^10.0.1", + "inquirer": "^9.2.2", + "medusa-telemetry": "^0.0.16", + "nanoid": "^4.0.2", + "node-fetch": "^3.3.1", + "open": "^9.1.0", + "ora": "^6.3.0", + "pg": "^8.10.0", + "slugify": "^1.6.6", + "uuid": "^9.0.0", + "validator": "^13.9.0", + "wait-on": "^7.0.1" }, "devDependencies": { - "@ascorbic/worker-threads-shim": "^1.0.0", - "@babel/runtime": "^7.15.4", "@types/chalk": "^2.2.0", "@types/commander": "^2.12.2", - "@types/configstore": "^4.0.0", - "@types/fs-extra": "^9.0.13", - "@types/node": "^14.18.36", - "ansi-wordwrap": "^1.0.2", - "chalk": "^4.1.2", - "commander": "^8.1.0", - "common-tags": "^1.8.2", + "@types/configstore": "^6.0.0", + "@types/inquirer": "^9.0.3", + "@types/pg": "^8.6.6", + "@types/uuid": "^9.0.1", + "@types/validator": "^13.7.17", + "@types/wait-on": "^5.3.1", + "@typescript-eslint/eslint-plugin": "^5.59.5", + "@typescript-eslint/parser": "^5.59.5", "configstore": "^6.0.0", - "enquirer": "^2.3.6", - "execa": "^5.1.1", - "fs-exists-cached": "^1.0.0", - "fs-extra": "^10.0.0", - "hosted-git-info": "^4.0.2", - "is-valid-path": "^0.1.1", - "microbundle": "^0.13.3", - "node-fetch": "^2.6.9", - "prompts": "^2.4.2", - "string-length": "^4.0.2", - "terminal-link": "^2.1.1", - "tiny-spin": "^1.0.2", - "url": "^0.11.0", - "uuid": "3.4.0" + "eslint": "^8.40.0", + "eslint-config-google": "^0.14.0", + "eslint-config-prettier": "^8.8.0", + "eslint-plugin-prettier": "^4.2.1", + "prettier": "^2.8.8", + "ts-node": "^10.9.1", + "typescript": "^5.0.4" + }, + "engines": { + "node": ">=14.16" }, "repository": { "type": "git", "url": "https://github.com/medusajs/medusa.git", "directory": "packages/create-medusa-app" }, - "author": "Sebastian Rindom ", + "author": "Medusa", "publishConfig": { "access": "public" }, diff --git a/packages/create-medusa-app/src/commands/create.ts b/packages/create-medusa-app/src/commands/create.ts new file mode 100644 index 0000000000..f6eca15d0c --- /dev/null +++ b/packages/create-medusa-app/src/commands/create.ts @@ -0,0 +1,278 @@ +import inquirer from "inquirer" +import slugifyType from "slugify" +import chalk from "chalk" +import pg from "pg" +import createDb from "../utils/create-db.js" +import postgresClient from "../utils/postgres-client.js" +import cloneRepo from "../utils/clone-repo.js" +import prepareProject from "../utils/prepare-project.js" +import startMedusa from "../utils/start-medusa.js" +import open from "open" +import waitOn from "wait-on" +import formatConnectionString from "../utils/format-connection-string.js" +import ora from "ora" +import fs from "fs" +import { nanoid } from "nanoid" +import isEmailImported from "validator/lib/isEmail.js" +import logMessage from "../utils/log-message.js" +import onProcessTerminated from "../utils/on-process-terminated.js" +import createAbortController, { + isAbortError, +} from "../utils/create-abort-controller.js" +import { track } from "medusa-telemetry" +import { createFactBox, resetFactBox } from "../utils/facts.js" +import boxen from "boxen" + +const slugify = slugifyType.default +const isEmail = isEmailImported.default + +type CreateOptions = { + repoUrl?: string + seed?: boolean +} + +export default async ({ repoUrl = "", seed }: CreateOptions) => { + track("CREATE_CLI") + if (repoUrl) { + track("STARTER_SELECTED", { starter: repoUrl }) + } + if (seed) { + track("SEED_SELECTED", { seed }) + } + const abortController = createAbortController() + + const { projectName } = await inquirer.prompt([ + { + type: "input", + name: "projectName", + message: "What's the name of your project?", + default: "my-medusa-store", + filter: (input) => { + return slugify(input) + }, + validate: (input) => { + if (!input.length) { + return "Please enter a project name" + } + return fs.existsSync(input) && fs.lstatSync(input).isDirectory() + ? "A directory already exists with the same name. Please enter a different project name." + : true + }, + }, + ]) + + let client: pg.Client | undefined + let dbConnectionString = "" + let postgresUsername = "postgres" + let postgresPassword = "" + + // try to log in with default db username and password + try { + client = await postgresClient({ + user: postgresUsername, + password: postgresPassword, + }) + } catch (e) { + // ask for the user's postgres credentials + const answers = await inquirer.prompt([ + { + type: "input", + name: "postgresUsername", + message: "Enter your Postgres username", + default: "postgres", + validate: (input) => { + return typeof input === "string" && input.length > 0 + }, + }, + { + type: "password", + name: "postgresPassword", + message: "Enter your Postgres password", + }, + ]) + + postgresUsername = answers.postgresUsername + postgresPassword = answers.postgresPassword + + try { + client = await postgresClient({ + user: postgresUsername, + password: postgresPassword, + }) + } catch (e) { + logMessage({ + message: + "Couldn't connect to PostgreSQL. Make sure you have PostgreSQL installed and the credentials you provided are correct.\n\n" + + "You can learn how to install PostgreSQL here: https://docs.medusajs.com/development/backend/prepare-environment#postgresql", + type: "error", + }) + } + } + + const { adminEmail } = await inquirer.prompt([ + { + type: "input", + name: "adminEmail", + message: "Enter an email for your admin dashboard user", + default: !seed ? "admin@medusa-test.com" : undefined, + validate: (input) => { + return typeof input === "string" && input.length > 0 && isEmail(input) + ? true + : "Please enter a valid email" + }, + }, + ]) + + const spinner = ora().start() + + onProcessTerminated(() => spinner.stop()) + + let interval: NodeJS.Timer | null = createFactBox( + spinner, + "Setting up project..." + ) + + // clone repository + try { + await cloneRepo({ + directoryName: projectName, + repoUrl, + abortController, + }) + } catch (e) { + if (isAbortError(e)) { + process.exit() + } + + spinner.stop() + logMessage({ + message: `An error occurred while setting up your project: ${e}`, + type: "error", + }) + } + + interval = resetFactBox( + interval, + spinner, + "Created project directory", + "Creating database..." + ) + + if (client) { + const dbName = `medusa-${nanoid(4)}` + // create postgres database + try { + await createDb({ + client, + db: dbName, + }) + } catch (e) { + spinner.stop() + logMessage({ + message: `An error occurred while trying to create your database: ${e}`, + type: "error", + }) + } + + // format connection string + dbConnectionString = formatConnectionString({ + user: postgresUsername, + password: postgresPassword, + host: client.host, + db: dbName, + }) + + resetFactBox(interval, spinner, `Database ${dbName} created`) + } + + // prepare project + let inviteToken: string | undefined = undefined + try { + inviteToken = await prepareProject({ + directory: projectName, + dbConnectionString, + admin: { + email: adminEmail, + }, + seed, + spinner, + abortController, + }) + } catch (e: any) { + if (isAbortError(e)) { + process.exit() + } + + spinner.stop() + logMessage({ + message: `An error occurred while preparing project: ${e}`, + type: "error", + }) + } + + spinner.succeed(chalk.green("Project Prepared")) + + // close db connection + await client?.end() + + // start backend + logMessage({ + message: "Starting Medusa...", + }) + + try { + startMedusa({ + directory: projectName, + abortController, + }) + } catch (e) { + if (isAbortError(e)) { + process.exit() + } + + logMessage({ + message: `An error occurred while starting Medusa`, + type: "error", + }) + } + + // the SIGINT event is triggered twice once the backend runs + // this ensures that the message isn't printed twice to the user + let printedMessage = false + + onProcessTerminated(() => { + if (!printedMessage) { + printedMessage = true + console.log( + boxen( + chalk.green( + `Change to the \`${projectName}\` directory to explore your Medusa project. + + Check out the Medusa documentation to start your development: + https://docs.medusajs.com/ + + Star us on GitHub if you like what we're building: + https://github.com/medusajs/medusa/stargazers` + ), + { + titleAlignment: "center", + textAlignment: "center", + padding: 1, + margin: 1, + float: "center", + } + ) + ) + } + }) + + await waitOn({ + resources: ["http://localhost:9000/health"], + }).then(async () => + open( + inviteToken + ? `http://localhost:9000/app/invite?token=${inviteToken}&first_run=true` + : "http://localhost:9000/app" + ) + ) +} diff --git a/packages/create-medusa-app/src/index.ts b/packages/create-medusa-app/src/index.ts index 5e3b4daccd..07f4d45373 100644 --- a/packages/create-medusa-app/src/index.ts +++ b/packages/create-medusa-app/src/index.ts @@ -1,136 +1,11 @@ -import Commander from "commander" -import path from "path" +#!/usr/bin/env node +import { program } from "commander" +import create from "./commands/create.js" -import { prompt } from "enquirer" -import { newStarter } from "./new-starter" -import { track } from "./track" +program + .description("Create a new Medusa project") + .option("--repo-url ", "URL of repository to use to setup project.") + .option("--seed", "Seed the created database with demo data.") + .parse() -import pkg from "../package.json" - -let projectPath: string = "" - -const questions = { - projectRoot: { - type: "input", - name: "projectRoot", - message: "Where should your project be installed?", - initial: "my-medusa-store", - }, - starter: { - type: "select", - name: "starter", - message: "Which Medusa starter would you like to install?", - choices: ["medusa-starter-default", "medusa-starter-contentful", "Other"], - }, - starterUrl: { - type: "input", - name: "starterUrl", - message: "Where is the starter located? (URL or path)", - }, - storefront: { - type: "select", - name: "storefront", - message: "Which storefront starter would you like to install?", - choices: [ - "Next.js Starter", - "medusa.express (Next.js)", - "None", - ], - }, -} - -const program = new Commander.Command(pkg.name) - .version(pkg.version) - .action((name) => (projectPath = name)) - .option(`-r --root`, `The directory to install your Medusa app`) - .option( - `-s --starter-url`, - `A GitHub URL to a repository that contains a Medusa starter project to bootstrap from` - ) - .option(`-v --verbose`, `Show all installation output`) - .parse(process.argv) - -const getStorefrontStarter = (starter: string): string => { - const selected = starter.toLowerCase() - switch (selected) { - case "next.js starter": - return "https://github.com/medusajs/nextjs-starter-medusa" - case "medusa.express (next.js)": - return "https://github.com/medusajs/medusa-express-nextjs" - default: - return "" - } -} - -export const run = async (): Promise => { - track("CREATE_CLI") - - if (typeof projectPath === "string") { - projectPath = projectPath.trim() - } - - const { projectRoot } = (await prompt(questions.projectRoot)) as { - projectRoot: string - } - let { starter } = (await prompt(questions.starter)) as { - starter: string - } - - if (starter === "Other") { - const { starterUrl } = (await prompt(questions.starterUrl)) as { - starterUrl: string - } - starter = starterUrl - } else { - starter = `medusajs/${starter}` - } - track("STARTER_SELECTED", { starter }) - - const progOptions = program.opts() - - const { storefront } = (await prompt(questions.storefront)) as { - storefront: string - } - track("STOREFRONT_SELECTED", { storefront }) - - await newStarter({ - starter, - root: path.join(projectRoot, `backend`), - verbose: progOptions.verbose, - }) - - const hasStorefront = storefront.toLowerCase() !== "none" - if (hasStorefront) { - const storefrontStarter = getStorefrontStarter(storefront) - await newStarter({ - starter: storefrontStarter, - root: path.join(projectRoot, `storefront`), - verbose: progOptions.verbose, - }) - } - - console.log(` - Your project is ready 🚀. To start your Medusa project: - - Medusa Backend - 1. Change to the backend directory: cd ${projectRoot}/backend - 2. Create a PostgreSQL database and make sure your PostgreSQL server is running. - 3. Add the following environment variable to the \`.env\` file: - DATABASE_URL=postgres://localhost/medusa-store # This is the default URL, change it to your own database URL - 4. Run migrations: - npx @medusajs/medusa-cli@latest migrations run - 5. Optionally seed database with dummy data: - npx @medusajs/medusa-cli@latest seed -f ./data/seed.json - 6. Start backend: - npx @medusajs/medusa-cli@latest develop - `) - - if (hasStorefront) { - console.log(` - Storefront - 1. Run the backend as explained above. - 2. Change to the storefront directory: cd ${projectRoot}/storefront - 3. Run storefront: yarn dev - `) - } -} +void create(program.opts()) diff --git a/packages/create-medusa-app/src/new-starter.js b/packages/create-medusa-app/src/new-starter.js deleted file mode 100644 index 8662a88eb8..0000000000 --- a/packages/create-medusa-app/src/new-starter.js +++ /dev/null @@ -1,293 +0,0 @@ -import { execSync } from "child_process" -import execa from "execa" -import { spin } from "tiny-spin" -import { sync as existsSync } from "fs-exists-cached" -import fs from "fs-extra" -import hostedGitInfo from "hosted-git-info" -import isValid from "is-valid-path" -import sysPath from "path" -import url from "url" - -import { reporter } from "./reporter" -import { getConfigStore } from "./get-config-store" - -const packageManagerConfigKey = `cli.packageManager` - -export const getPackageManager = (npmConfigUserAgent) => { - const configStore = getConfigStore() - const actualPackageManager = configStore.get(packageManagerConfigKey) - - if (actualPackageManager) { - return actualPackageManager - } - - if (npmConfigUserAgent?.includes(`yarn`)) { - configStore.set(packageManagerConfigKey, `yarn`) - return `yarn` - } - - configStore.set(packageManagerConfigKey, `npm`) - return `npm` -} - -const spawnWithArgs = (file, args, options) => - execa(file, args, { stdio: "ignore", preferLocal: false, ...options }) - -const spawn = (cmd, options) => { - const [file, ...args] = cmd.split(/\s+/) - return spawnWithArgs(file, args, options) -} -// Checks the existence of yarn package -// We use yarnpkg instead of yarn to avoid conflict with Hadoop yarn -// Refer to https://github.com/yarnpkg/yarn/issues/673 -const checkForYarn = () => { - try { - execSync(`yarnpkg --version`, { stdio: `ignore` }) - return true - } catch (e) { - return false - } -} - -const isAlreadyGitRepository = async () => { - try { - return await spawn(`git rev-parse --is-inside-work-tree`, { - stdio: `pipe`, - }).then((output) => output.stdout === `true`) - } catch (err) { - return false - } -} - -// Initialize newly cloned directory as a git repo -const gitInit = async (rootPath) => { - reporter.info(`Initialising git in ${rootPath}`) - - return await spawn(`git init`, { cwd: rootPath }) -} - -// Create a .gitignore file if it is missing in the new directory -const maybeCreateGitIgnore = async (rootPath) => { - if (existsSync(sysPath.join(rootPath, `.gitignore`))) { - return - } - - reporter.info(`Creating minimal .gitignore in ${rootPath}`) - await fs.writeFile( - sysPath.join(rootPath, `.gitignore`), - `.cache\nnode_modules\npublic\n` - ) - reporter.success(`Created .gitignore in ${rootPath}`) -} - -// Create an initial git commit in the new directory -const createInitialGitCommit = async (rootPath, starterUrl) => { - reporter.info(`Create initial git commit in ${rootPath}`) - - await spawn(`git add -A`, { cwd: rootPath }) - // use execSync instead of spawn to handle git clients using - // pgp signatures (with password) - try { - execSync(`git commit -m "Initial commit from medusa: (${starterUrl})"`, { - cwd: rootPath, - }) - } catch { - // Remove git support if initial commit fails - reporter.warn(`Initial git commit failed - removing git support\n`) - fs.removeSync(sysPath.join(rootPath, `.git`)) - } -} - -// Executes `npm install` or `yarn install` in rootPath. -const install = async (rootPath, verbose) => { - const prevDir = process.cwd() - - const stop = spin(`Installing packages...`) - console.log() // Add some space - - process.chdir(rootPath) - - try { - if (getPackageManager() === `yarn` && checkForYarn()) { - await fs.remove(`package-lock.json`) - await spawn(`yarnpkg`, { stdio: verbose ? `inherit` : `ignore` }) - } else { - await fs.remove(`yarn.lock`) - await spawn(`npm install`, { stdio: verbose ? `inherit` : `ignore` }) - } - } finally { - stop() - console.log() - reporter.success(`Packages installed`) - process.chdir(prevDir) - } -} - -const ignored = (path) => !/^\.(git|hg)$/.test(sysPath.basename(path)) - -// Copy starter from file system. -const copy = async (starterPath, rootPath) => { - // Chmod with 755. - // 493 = parseInt('755', 8) - await fs.ensureDir(rootPath, { mode: 493 }) - - if (!existsSync(starterPath)) { - throw new Error(`starter ${starterPath} doesn't exist`) - } - - if (starterPath === `.`) { - throw new Error( - `You can't create a starter from the existing directory. If you want to - create a new project in the current directory, the trailing dot isn't - necessary. If you want to create a project from a local starter, run - something like "medusa new my-medusa-store ../local-medusa-starter"` - ) - } - - const stop = spin(`Creating new site from local starter: ${starterPath}`) - - reporter.info(`Copying local starter to ${rootPath} ...`) - - await fs.copy(starterPath, rootPath, { filter: ignored }) - - stop() - console.log() - reporter.success(`Created starter directory layout`) - console.log() // Add some space - - await install(rootPath) - - return true -} - -// Clones starter from URI. -const clone = async (hostInfo, rootPath, keepGit, verbose = false) => { - let url - // Let people use private repos accessed over SSH. - if (hostInfo.getDefaultRepresentation() === `sshurl`) { - url = hostInfo.ssh({ noCommittish: true }) - // Otherwise default to normal git syntax. - } else { - url = hostInfo.https({ noCommittish: true, noGitPlus: true }) - } - - const branch = hostInfo.committish ? [`-b`, hostInfo.committish] : [] - - const stop = spin(`Creating new project from git: ${url}`) - - const args = [ - `clone`, - ...branch, - url, - rootPath, - `--recursive`, - `--depth=1`, - ].filter((arg) => Boolean(arg)) - - await execa(`git`, args, {}) - .then(() => { - stop() - console.log() - reporter.success(`Created starter directory layout`) - }) - .catch((err) => { - stop() - console.log() - reporter.error(`Failed to clone repository`) - throw err - }) - - if (!keepGit) { - await fs.remove(sysPath.join(rootPath, `.git`)) - } - - await install(rootPath, verbose) - const isGit = await isAlreadyGitRepository() - if (!isGit) await gitInit(rootPath) - await maybeCreateGitIgnore(rootPath) - if (!isGit) await createInitialGitCommit(rootPath, url) -} - -const getPaths = async (starterPath, rootPath) => { - let selectedOtherStarter = false - - // set defaults if no root or starter has been set yet - rootPath = rootPath || process.cwd() - starterPath = starterPath || `medusajs/medusa-starter-default` - - return { starterPath, rootPath, selectedOtherStarter } -} - -const setupEnvVars = async (rootPath) => { - const templatePath = sysPath.join(rootPath, ".env.template") - const destination = sysPath.join(rootPath, ".env") - if (existsSync(templatePath)) { - fs.renameSync(templatePath, destination) - } -} - -/** - * Main function that clones or copies the starter. - */ -export const newStarter = async (args) => { - const { starter, root, verbose, keepGit } = args - - const { starterPath, rootPath, selectedOtherStarter } = await getPaths( - starter, - root - ) - - const urlObject = url.parse(rootPath) - - if (urlObject.protocol && urlObject.host) { - const isStarterAUrl = - starter && !url.parse(starter).hostname && !url.parse(starter).protocol - - if (/medusa-starter/gi.test(rootPath) && isStarterAUrl) { - reporter.panic({ - id: `10000`, - context: { - starter, - rootPath, - }, - }) - return - } - reporter.panic({ - id: `10001`, - context: { - rootPath, - }, - }) - return - } - - if (!isValid(rootPath)) { - reporter.panic({ - id: `10002`, - context: { - path: sysPath.resolve(rootPath), - }, - }) - return - } - - if (existsSync(sysPath.join(rootPath, `package.json`))) { - reporter.panic({ - id: `10003`, - context: { - rootPath, - }, - }) - return - } - - const hostedInfo = hostedGitInfo.fromUrl(starterPath) - if (hostedInfo) { - await clone(hostedInfo, rootPath, keepGit, verbose) - } else { - await copy(starterPath, rootPath, verbose) - } - - await setupEnvVars(rootPath) -} diff --git a/packages/create-medusa-app/src/panic-handler.js b/packages/create-medusa-app/src/panic-handler.js deleted file mode 100644 index 588e96b12a..0000000000 --- a/packages/create-medusa-app/src/panic-handler.js +++ /dev/null @@ -1,25 +0,0 @@ -export const panicHandler = (panicData = {}) => { - const { id, context } = panicData - switch (id) { - case "10000": - return { - message: `Looks like you provided a URL as your project name. Try "medusa new my-medusa-store ${context.rootPath}" instead.`, - } - case "10001": - return { - message: `Looks like you provided a URL as your project name. Try "medusa new my-medusa-store ${context.rootPath}" instead.`, - } - case "10002": - return { - message: `Could not create project because ${context.path} is not a valid path.`, - } - case "10003": - return { - message: `Directory ${context.rootPath} is already a Node project.`, - } - default: - return { - message: "Unknown error", - } - } -} diff --git a/packages/create-medusa-app/src/reporter.ts b/packages/create-medusa-app/src/reporter.ts deleted file mode 100644 index 57cc44673b..0000000000 --- a/packages/create-medusa-app/src/reporter.ts +++ /dev/null @@ -1,18 +0,0 @@ -import c from "ansi-colors" -import { panicHandler } from "./panic-handler" - -export const reporter = { - info: (message: string): void => console.log(message), - verbose: (message: string): void => console.log(message), - log: (message: string): void => console.log(message), - success: (message: string): void => - console.log(c.green(c.symbols.check + ` `) + message), - error: (message: string): void => - console.error(c.red(c.symbols.cross + ` `) + message), - panic: (panicData: { id: string; context: any }): never => { - const { message } = panicHandler(panicData) - console.error(message) - process.exit(1) - }, - warn: (message: string): void => console.warn(message), -} diff --git a/packages/create-medusa-app/src/track.ts b/packages/create-medusa-app/src/track.ts deleted file mode 100644 index 2ddf44fa31..0000000000 --- a/packages/create-medusa-app/src/track.ts +++ /dev/null @@ -1,47 +0,0 @@ -import fetch from "node-fetch" -import uuidv4 from "uuid/v4" -import { getConfigStore } from "./get-config-store" - -const store = getConfigStore() -const medusaCliVersion = require(`../package.json`).version - -const analyticsApi = - process.env.MEDUSA_TELEMETRY_API || - `https://telemetry.medusa-commerce.com/batch` - -const getMachineId = (): string => { - let machineId = store.get(`telemetry.machine_id`) - - if (typeof machineId !== `string`) { - machineId = uuidv4() - store.set(`telemetry.machine_id`, machineId) - } - - return machineId -} - -const sessionId = uuidv4() - -export const track = (eventType: string, args?: any): void => { - fetch(analyticsApi, { - method: `POST`, - headers: { - "content-type": `application/json`, - "user-agent": `create-medusa-app:${medusaCliVersion}`, - }, - body: JSON.stringify({ - timestamp: new Date(), - batch: [ - { - type: eventType, - timestamp: new Date(), - sessionId, - machine_id: getMachineId(), - component_id: `create-medusa-app`, - cli_version: medusaCliVersion, - properties: args, - }, - ], - }), - }).catch(() => {}) /* do nothing, it's telemetry */ -} diff --git a/packages/create-medusa-app/src/types.d.ts b/packages/create-medusa-app/src/types.d.ts index ec8f69389c..6100c805a7 100644 --- a/packages/create-medusa-app/src/types.d.ts +++ b/packages/create-medusa-app/src/types.d.ts @@ -1,4 +1 @@ -declare module "stream-filter" -declare module "ansi-wordwrap" -declare module "uuid/v4" -declare module "node-fetch" +declare module "medusa-telemetry" diff --git a/packages/create-medusa-app/src/utils/clone-repo.ts b/packages/create-medusa-app/src/utils/clone-repo.ts new file mode 100644 index 0000000000..5d89295663 --- /dev/null +++ b/packages/create-medusa-app/src/utils/clone-repo.ts @@ -0,0 +1,21 @@ +import promiseExec from "./promise-exec.js" + +type CloneRepoOptions = { + directoryName?: string + repoUrl?: string + abortController?: AbortController +} + +// TODO change default repo URL +const DEFAULT_REPO = + "https://github.com/medusajs/medusa-starter-default -b feat/onboarding" + +export default async ({ + directoryName = "", + repoUrl, + abortController, +}: CloneRepoOptions) => { + await promiseExec(`git clone ${repoUrl || DEFAULT_REPO} ${directoryName}`, { + signal: abortController?.signal, + }) +} diff --git a/packages/create-medusa-app/src/utils/create-abort-controller.ts b/packages/create-medusa-app/src/utils/create-abort-controller.ts new file mode 100644 index 0000000000..2ffe334ce9 --- /dev/null +++ b/packages/create-medusa-app/src/utils/create-abort-controller.ts @@ -0,0 +1,10 @@ +import onProcessTerminated from "./on-process-terminated.js" + +export default () => { + const abortController = new AbortController() + onProcessTerminated(() => abortController.abort()) + return abortController +} + +export const isAbortError = (e: any) => + e !== null && "code" in e && e.code === "ABORT_ERR" diff --git a/packages/create-medusa-app/src/utils/create-db.ts b/packages/create-medusa-app/src/utils/create-db.ts new file mode 100644 index 0000000000..d4abac337e --- /dev/null +++ b/packages/create-medusa-app/src/utils/create-db.ts @@ -0,0 +1,10 @@ +import pg from "pg" + +type CreateDbOptions = { + client: pg.Client + db: string +} + +export default async ({ client, db }: CreateDbOptions) => { + await client.query(`CREATE DATABASE "${db}"`) +} diff --git a/packages/create-medusa-app/src/utils/facts.ts b/packages/create-medusa-app/src/utils/facts.ts new file mode 100644 index 0000000000..86d7be21d9 --- /dev/null +++ b/packages/create-medusa-app/src/utils/facts.ts @@ -0,0 +1,76 @@ +import boxen from "boxen" +import chalk from "chalk" +import { Ora } from "ora" +import onProcessTerminated from "./on-process-terminated.js" + +const facts = [ + "Plugins allow you to integrate third-party services for payment, fulfillment, notifications, and more.", + "You can specify a product's availability in one or more sales channels.", + "Payment and shipping options and providers can be configured per region.", + "Tax-inclusive pricing allows you to set prices for products, shipping options, and more without having to worry about calculating taxes.", + "Medusa provides multi-currency and region support, with full control over prices for each currency and region.", + "You can organize customers by customer groups and set special prices for them.", + "You can specify the inventory of products per location and sales channel.", + "Publishable-API Keys allow you to send requests to the backend within a scoped resource.", + "You can create custom endpoints by creating a TypeScript file under the src/api directory.", + "You can listen to events to perform asynchronous actions using Subscribers.", + "An entity represents a table in the database. You can create a table by creating a custom entity and migration.", + "Medusa's store endpoint paths are prefixed by /store. The admin endpoints are prefixed by /admin.", + "Medusa provides a JavaScript client and a React library that you can use to build a storefront or a custom admin.", + "Services are classes with methods related to an entity or functionality. You can create a custom service in a TypeScript file under src/services.", + "Modules allow you to replace an entire functionality with your custom logic.", + "The event bus module is responsible for triggering events and relaying them to subscribers.", + "The cache module is responsible for caching data that requires heavy computation.", +] + +export const getFact = () => { + const randIndex = Math.floor(Math.random() * facts.length) + + return facts[randIndex] +} + +export const showFact = (spinner: Ora, title: string) => { + const fact = getFact() + spinner.text = `${boxen(fact, { + title: chalk.cyan(title), + titleAlignment: "center", + textAlignment: "center", + padding: 1, + margin: 1, + float: "center", + })}` +} + +export const createFactBox = (spinner: Ora, title: string): NodeJS.Timer => { + spinner.spinner = { + frames: [""], + } + showFact(spinner, title) + const interval = setInterval(() => { + showFact(spinner, title) + }, 10000) + + onProcessTerminated(() => clearInterval(interval)) + + return interval +} + +export const resetFactBox = ( + interval: NodeJS.Timer | null, + spinner: Ora, + successMessage: string, + newTitle?: string +): NodeJS.Timer | null => { + if (interval) { + clearInterval(interval) + } + + spinner.spinner = "dots" + spinner.succeed(chalk.green(successMessage)).start() + let newInterval = null + if (newTitle) { + newInterval = createFactBox(spinner, newTitle) + } + + return newInterval +} diff --git a/packages/create-medusa-app/src/utils/format-connection-string.ts b/packages/create-medusa-app/src/utils/format-connection-string.ts new file mode 100644 index 0000000000..5ec497c8eb --- /dev/null +++ b/packages/create-medusa-app/src/utils/format-connection-string.ts @@ -0,0 +1,25 @@ +type ConnectionStringOptions = { + user?: string + password?: string + host?: string + db: string +} + +export default ({ user, password, host, db }: ConnectionStringOptions) => { + let connection = `postgres://` + if (user) { + connection += user + } + + if (password) { + connection += `:${password}` + } + + if (user || password) { + connection += "@" + } + + connection += `${host}/${db}` + + return connection +} diff --git a/packages/create-medusa-app/src/get-config-store.ts b/packages/create-medusa-app/src/utils/get-config-store.ts similarity index 100% rename from packages/create-medusa-app/src/get-config-store.ts rename to packages/create-medusa-app/src/utils/get-config-store.ts diff --git a/packages/create-medusa-app/src/utils/log-message.ts b/packages/create-medusa-app/src/utils/log-message.ts new file mode 100644 index 0000000000..2f11f04581 --- /dev/null +++ b/packages/create-medusa-app/src/utils/log-message.ts @@ -0,0 +1,23 @@ +import chalk from "chalk" +import { program } from "commander" + +type LogOptions = { + message: string + type?: "error" | "success" | "info" | "warning" +} + +export default ({ message, type = "info" }: LogOptions) => { + switch (type) { + case "info": + console.log(chalk.white(message)) + break + case "success": + console.log(chalk.green(message)) + break + case "warning": + console.log(chalk.yellow(message)) + break + case "error": + program.error(chalk.bold.red(message)) + } +} diff --git a/packages/create-medusa-app/src/utils/on-process-terminated.ts b/packages/create-medusa-app/src/utils/on-process-terminated.ts new file mode 100644 index 0000000000..4bb49c2cc7 --- /dev/null +++ b/packages/create-medusa-app/src/utils/on-process-terminated.ts @@ -0,0 +1,4 @@ +export default (fn: Function) => { + process.on("SIGTERM", () => fn()) + process.on("SIGINT", () => fn()) +} diff --git a/packages/create-medusa-app/src/utils/postgres-client.ts b/packages/create-medusa-app/src/utils/postgres-client.ts new file mode 100644 index 0000000000..dfa37e23c9 --- /dev/null +++ b/packages/create-medusa-app/src/utils/postgres-client.ts @@ -0,0 +1,15 @@ +import pg from "pg" +const { Client } = pg + +type PostgresConnection = { + user?: string + password?: string +} + +export default async (connect: PostgresConnection) => { + const client = new Client(connect) + + await client.connect() + + return client +} diff --git a/packages/create-medusa-app/src/utils/prepare-project.ts b/packages/create-medusa-app/src/utils/prepare-project.ts new file mode 100644 index 0000000000..2b78096ed3 --- /dev/null +++ b/packages/create-medusa-app/src/utils/prepare-project.ts @@ -0,0 +1,149 @@ +import chalk from "chalk" +import fs from "fs" +import path from "path" +import { Ora } from "ora" +import promiseExec from "./promise-exec.js" +import { EOL } from "os" +import runProcess from "./run-process.js" +import { createFactBox, resetFactBox } from "./facts.js" + +type PrepareOptions = { + directory: string + dbConnectionString: string + admin?: { + email: string + } + seed?: boolean + spinner: Ora + abortController?: AbortController +} + +export default async ({ + directory, + dbConnectionString, + admin, + seed, + spinner, + abortController, +}: PrepareOptions) => { + // initialize execution options + const execOptions = { + cwd: directory, + signal: abortController?.signal, + } + + // initialize the invite token to return + let inviteToken: string | undefined = undefined + + // add connection string to project + fs.appendFileSync( + path.join(directory, `.env`), + `DATABASE_TYPE=postgres${EOL}DATABASE_URL=${dbConnectionString}` + ) + + let interval: NodeJS.Timer | null = createFactBox( + spinner, + "Installing dependencies..." + ) + + await runProcess({ + process: async () => { + try { + await promiseExec(`yarn`, execOptions) + } catch (e) { + // yarn isn't available + // use npm + await promiseExec(`npm install --legacy-peer-deps`, execOptions) + } + }, + ignoreERESOLVE: true, + }) + + interval = resetFactBox( + interval, + spinner, + "Installed Dependencies", + "Running Migrations...." + ) + + // run migrations + await runProcess({ + process: async () => { + await promiseExec( + "npx -y @medusajs/medusa-cli@latest migrations run", + execOptions + ) + }, + }) + + interval = resetFactBox(interval, spinner, "Ran Migrations") + + if (admin) { + // create admin user + interval = createFactBox(spinner, "Creating an admin user...") + + await runProcess({ + process: async () => { + const proc = await promiseExec( + // TODO replace with latest version + `npx -y @medusajs/medusa-cli@1.3.16-snapshot-20230605093446 user -e ${admin.email} --invite`, + execOptions + ) + // get invite token from stdout + const match = proc.stdout.match(/Invite token: (?.+)/) + inviteToken = match?.groups?.token + }, + }) + + interval = resetFactBox(interval, spinner, "Created admin user") + } + + if (seed) { + interval = createFactBox(spinner, "Seeding database...") + + // check if a seed file exists in the project + if (!fs.existsSync(path.join(directory, "data", "seed.json"))) { + spinner + ?.warn( + chalk.yellow( + "Seed file was not found in the project. Skipping seeding..." + ) + ) + .start() + return inviteToken + } + + await runProcess({ + process: async () => { + await promiseExec( + `npx -y @medusajs/medusa-cli@latest seed --seed-file=${path.join( + "data", + "seed.json" + )}`, + execOptions + ) + }, + }) + resetFactBox(interval, spinner, "Seeded database with demo data") + } else if ( + fs.existsSync(path.join(directory, "data", "seed-onboarding.json")) + ) { + // seed the database with onboarding seed + interval = createFactBox(spinner, "Finish preparation...") + + await runProcess({ + process: async () => { + await promiseExec( + `npx -y @medusajs/medusa-cli@latest seed --seed-file=${path.join( + "data", + "seed-onboarding.json" + )}`, + execOptions + ) + }, + }) + resetFactBox(interval, spinner, "Finished Preparation") + } + + return inviteToken +} diff --git a/packages/create-medusa-app/src/utils/promise-exec.ts b/packages/create-medusa-app/src/utils/promise-exec.ts new file mode 100644 index 0000000000..40230a68bc --- /dev/null +++ b/packages/create-medusa-app/src/utils/promise-exec.ts @@ -0,0 +1,6 @@ +import { exec } from "child_process" +import util from "util" + +const promiseExec = util.promisify(exec) + +export default promiseExec diff --git a/packages/create-medusa-app/src/utils/run-process.ts b/packages/create-medusa-app/src/utils/run-process.ts new file mode 100644 index 0000000000..78b63ba806 --- /dev/null +++ b/packages/create-medusa-app/src/utils/run-process.ts @@ -0,0 +1,36 @@ +type ProcessOptions = { + process: Function + ignoreERESOLVE?: boolean +} + +// when running commands with npx or npm sometimes they +// terminate with EAGAIN error unexpectedly +// this utility function allows retrying the process if +// EAGAIN occurs, or otherwise throw the error that occurs +export default async ({ process, ignoreERESOLVE }: ProcessOptions) => { + let processError = false + do { + try { + await process() + } catch (error) { + if ( + typeof error === "object" && + error !== null && + "code" in error && + error?.code === "EAGAIN" + ) { + processError = true + } else if ( + ignoreERESOLVE && + typeof error === "object" && + error !== null && + "code" in error && + error?.code === "ERESOLVE" + ) { + // ignore error + } else { + throw error + } + } + } while (processError) +} diff --git a/packages/create-medusa-app/src/utils/start-medusa.ts b/packages/create-medusa-app/src/utils/start-medusa.ts new file mode 100644 index 0000000000..13df8cecc5 --- /dev/null +++ b/packages/create-medusa-app/src/utils/start-medusa.ts @@ -0,0 +1,15 @@ +import { exec } from "child_process" + +type StartOptions = { + directory: string + abortController?: AbortController +} + +export default ({ directory, abortController }: StartOptions) => { + const childProcess = exec(`npx -y @medusajs/medusa-cli develop`, { + cwd: directory, + signal: abortController?.signal, + }) + + childProcess.stdout?.pipe(process.stdout) +} diff --git a/packages/create-medusa-app/tsconfig.json b/packages/create-medusa-app/tsconfig.json index ec10870fc1..3a4e399437 100644 --- a/packages/create-medusa-app/tsconfig.json +++ b/packages/create-medusa-app/tsconfig.json @@ -1,15 +1,18 @@ { "compilerOptions": { - "target": "ES2015", - "module": "commonjs", - "allowJs": true, - "declaration": false, - "outDir": "./dist", - "strict": true, + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "node16", + "outDir": "./dist", "esModuleInterop": true, + "strict": true, + "skipLibCheck": true, "resolveJsonModule": true, - "skipLibCheck": true }, - "include": ["src/**/*.ts", "src/**/*.json", "src/**/*.js"], - "exclude": ["**/__tests__/**/*"] + "include": ["src"], + "ts-node": { + "esm": true, + "experimentalSpecifierResolution": "node", + "transpileOnly": true + } } diff --git a/yarn.lock b/yarn.lock index 91a81856ef..874de958d9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -228,13 +228,6 @@ __metadata: languageName: node linkType: hard -"@ascorbic/worker-threads-shim@npm:^1.0.0": - version: 1.0.0 - resolution: "@ascorbic/worker-threads-shim@npm:1.0.0" - checksum: de6f0439c96a44bc7354a20aa22eb4311474f1c0913c2fdb1fe993d7dc85c7134623979188c85040c97adc633ed1bb2c6751f1ce89ebb794b60d0048d5f31e81 - languageName: node - linkType: hard - "@babel/cli@npm:7.14.3": version: 7.14.3 resolution: "@babel/cli@npm:7.14.3" @@ -3414,6 +3407,24 @@ __metadata: languageName: node linkType: hard +"@eslint-community/eslint-utils@npm:^4.2.0": + version: 4.4.0 + resolution: "@eslint-community/eslint-utils@npm:4.4.0" + dependencies: + eslint-visitor-keys: ^3.3.0 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: 7e559c4ce59cd3a06b1b5a517b593912e680a7f981ae7affab0d01d709e99cd5647019be8fafa38c350305bc32f1f7d42c7073edde2ab536c745e365f37b607e + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.4.0": + version: 4.5.1 + resolution: "@eslint-community/regexpp@npm:4.5.1" + checksum: d79cbd99cc4dcfbb17e8dd30a30bb5aec5da9c60b9471043f886f116615bb15f0d417cb0ca638cefedba0b4c67c339e2011b53d88264a4540775f042a5879e01 + languageName: node + linkType: hard + "@eslint/eslintrc@npm:^0.4.3": version: 0.4.3 resolution: "@eslint/eslintrc@npm:0.4.3" @@ -3448,6 +3459,30 @@ __metadata: languageName: node linkType: hard +"@eslint/eslintrc@npm:^2.0.3": + version: 2.0.3 + resolution: "@eslint/eslintrc@npm:2.0.3" + dependencies: + ajv: ^6.12.4 + debug: ^4.3.2 + espree: ^9.5.2 + globals: ^13.19.0 + ignore: ^5.2.0 + import-fresh: ^3.2.1 + js-yaml: ^4.1.0 + minimatch: ^3.1.2 + strip-json-comments: ^3.1.1 + checksum: 46291c33bf580ab12101fb7f20adabaa60326a7de094409ab4a5ca4611552ab2325f8d677d6c1d2d9f45f83f93360b115a0b4488bc48180cca0d0f386804d829 + languageName: node + linkType: hard + +"@eslint/js@npm:8.41.0": + version: 8.41.0 + resolution: "@eslint/js@npm:8.41.0" + checksum: 41cf403ccebbc90315c7190bd901fa17975327022146b2db8c846ec5b11d04c56b33ccf9064b9da7349068e96bef8f322423fbcce700d815b4097fd808aaa4c6 + languageName: node + linkType: hard + "@exodus/schemasafe@npm:^1.0.0-rc.2": version: 1.0.0-rc.11 resolution: "@exodus/schemasafe@npm:1.0.0-rc.11" @@ -4006,6 +4041,17 @@ __metadata: languageName: node linkType: hard +"@humanwhocodes/config-array@npm:^0.11.8": + version: 0.11.8 + resolution: "@humanwhocodes/config-array@npm:0.11.8" + dependencies: + "@humanwhocodes/object-schema": ^1.2.1 + debug: ^4.1.1 + minimatch: ^3.0.5 + checksum: 441223496cc5ae3ae443e11e2ba05f03f6418d1e0233e3d160b027dda742d7a957fa9e1d56125d5829079419c797c13e1ae8ffe3454f268901ac18f68e0198f1 + languageName: node + linkType: hard + "@humanwhocodes/config-array@npm:^0.5.0": version: 0.5.0 resolution: "@humanwhocodes/config-array@npm:0.5.0" @@ -8321,6 +8367,13 @@ __metadata: languageName: node linkType: hard +"@sideway/formula@npm:^3.0.1": + version: 3.0.1 + resolution: "@sideway/formula@npm:3.0.1" + checksum: 3fe81fa9662efc076bf41612b060eb9b02e846ea4bea5bd114f1662b7f1541e9dedcf98aff0d24400bcb92f113964a50e0290b86e284edbdf6346fa9b7e2bf2c + languageName: node + linkType: hard + "@sideway/pinpoint@npm:^2.0.0": version: 2.0.0 resolution: "@sideway/pinpoint@npm:2.0.0" @@ -11129,10 +11182,10 @@ __metadata: languageName: node linkType: hard -"@types/configstore@npm:^4.0.0": - version: 4.0.0 - resolution: "@types/configstore@npm:4.0.0" - checksum: b0c502fad26c7732da9fdeb5964c9aa0b54aa76647882e16ce01d1114cad9c1cc61cf52ec0e9dbfe827bc0e0311eb516deab3e4e729593eea9afa9eef75af322 +"@types/configstore@npm:^6.0.0": + version: 6.0.0 + resolution: "@types/configstore@npm:6.0.0" + checksum: 167bf467c6e85d567f2f1209175907bb189db470d77beb9e748a17cc3c92a81bcd20351a50542700526b66429f4519ea4578df94b4cd171d28220150b2c8bf37 languageName: node linkType: hard @@ -11277,7 +11330,7 @@ __metadata: languageName: node linkType: hard -"@types/fs-extra@npm:^9.0.12, @types/fs-extra@npm:^9.0.13": +"@types/fs-extra@npm:^9.0.12": version: 9.0.13 resolution: "@types/fs-extra@npm:9.0.13" dependencies: @@ -11373,6 +11426,16 @@ __metadata: languageName: node linkType: hard +"@types/inquirer@npm:^9.0.3": + version: 9.0.3 + resolution: "@types/inquirer@npm:9.0.3" + dependencies: + "@types/through": "*" + rxjs: ^7.2.0 + checksum: df22239016c18d59a62e8dba2874022a5851f392a0d6d9f6a85343486a6db782b656f6e60c572683834886bd98c180764c317c43c45cb7e3f4c0e26a004033e7 + languageName: node + linkType: hard + "@types/ioredis@npm:^4.28.10": version: 4.28.10 resolution: "@types/ioredis@npm:4.28.10" @@ -11650,13 +11713,6 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^14.18.36": - version: 14.18.36 - resolution: "@types/node@npm:14.18.36" - checksum: 9742b62fee705cbb177b681e849640834ea3651ea90c7bfea07462dc7511eb73116a12b32c01157b591ebaaed9ece8042016f2a78b50396883f1358a18903fe2 - languageName: node - linkType: hard - "@types/node@npm:^8.5.7": version: 8.10.66 resolution: "@types/node@npm:8.10.66" @@ -11708,6 +11764,17 @@ __metadata: languageName: node linkType: hard +"@types/pg@npm:^8.6.6": + version: 8.10.1 + resolution: "@types/pg@npm:8.10.1" + dependencies: + "@types/node": "*" + pg-protocol: "*" + pg-types: ^4.0.1 + checksum: 1bb62b5844a8f4cc99079b17660f99173e996cf07a23525c9a3883b1673f1b77e60500c47b5d41024299653020085640080b1f8549be1dd9425df266bd6b92bc + languageName: node + linkType: hard + "@types/pluralize@npm:^0.0.29": version: 0.0.29 resolution: "@types/pluralize@npm:0.0.29" @@ -12060,6 +12127,13 @@ __metadata: languageName: node linkType: hard +"@types/uuid@npm:^9.0.1": + version: 9.0.1 + resolution: "@types/uuid@npm:9.0.1" + checksum: 234e14e053504a98532bb5d1490c8d649fe24ae04a94ba042b09b380a900094df1032aa7c3864b74b7a85a0a5e97530b2d1340048ed9d07855140cb99b2cefc8 + languageName: node + linkType: hard + "@types/validator@npm:^13.7.10": version: 13.7.15 resolution: "@types/validator@npm:13.7.15" @@ -12067,6 +12141,22 @@ __metadata: languageName: node linkType: hard +"@types/validator@npm:^13.7.17": + version: 13.7.17 + resolution: "@types/validator@npm:13.7.17" + checksum: 46ec9b8bc11d91a575aead891a9c1d2f23bc28369449cb62415d663262d1d0e96debe75ceac626102a17a0a7a899330626ec36c8d4e84d337c705daed314fed5 + languageName: node + linkType: hard + +"@types/wait-on@npm:^5.3.1": + version: 5.3.1 + resolution: "@types/wait-on@npm:5.3.1" + dependencies: + "@types/node": "*" + checksum: fae18fa11910e0471582b762839d198852ed1b9fc75b2feae388f9f27502c16609514121fb2d9c9a63e2f973037b878b84635ac00cc8de345b5f286d26f03fc1 + languageName: node + linkType: hard + "@types/webpack-env@npm:^1.16.0": version: 1.17.0 resolution: "@types/webpack-env@npm:1.17.0" @@ -12195,6 +12285,30 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/eslint-plugin@npm:^5.59.5": + version: 5.59.8 + resolution: "@typescript-eslint/eslint-plugin@npm:5.59.8" + dependencies: + "@eslint-community/regexpp": ^4.4.0 + "@typescript-eslint/scope-manager": 5.59.8 + "@typescript-eslint/type-utils": 5.59.8 + "@typescript-eslint/utils": 5.59.8 + debug: ^4.3.4 + grapheme-splitter: ^1.0.4 + ignore: ^5.2.0 + natural-compare-lite: ^1.4.0 + semver: ^7.3.7 + tsutils: ^3.21.0 + peerDependencies: + "@typescript-eslint/parser": ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 491f88984dd032f309d84b41af6a227a9da944ad6c806b868e71122bd55ad355d8738e7925019f54929784ba631ae9b186a028b194bdb9bad72d122229c029e4 + languageName: node + linkType: hard + "@typescript-eslint/experimental-utils@npm:4.33.0": version: 4.33.0 resolution: "@typescript-eslint/experimental-utils@npm:4.33.0" @@ -12245,6 +12359,23 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/parser@npm:^5.59.5": + version: 5.59.8 + resolution: "@typescript-eslint/parser@npm:5.59.8" + dependencies: + "@typescript-eslint/scope-manager": 5.59.8 + "@typescript-eslint/types": 5.59.8 + "@typescript-eslint/typescript-estree": 5.59.8 + debug: ^4.3.4 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 710daf64331d5bc198c22c66c1fdd06db2300487f655d161f0e59971fcd0c70661a7059ff7e3cf2ed66fc72d6674a3f4a317d5d5778ce6605d18e831b0a7039e + languageName: node + linkType: hard + "@typescript-eslint/scope-manager@npm:4.33.0": version: 4.33.0 resolution: "@typescript-eslint/scope-manager@npm:4.33.0" @@ -12265,6 +12396,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/scope-manager@npm:5.59.8": + version: 5.59.8 + resolution: "@typescript-eslint/scope-manager@npm:5.59.8" + dependencies: + "@typescript-eslint/types": 5.59.8 + "@typescript-eslint/visitor-keys": 5.59.8 + checksum: 164ea98d0d7dd4dd0c462eb7238266b2260af63fd29b96746dd978322114c7ebf31ba697c424397e3fb36027704e1c5d788cb6049a6ccb52fec8c6c134d7503b + languageName: node + linkType: hard + "@typescript-eslint/type-utils@npm:5.53.0": version: 5.53.0 resolution: "@typescript-eslint/type-utils@npm:5.53.0" @@ -12282,6 +12423,23 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/type-utils@npm:5.59.8": + version: 5.59.8 + resolution: "@typescript-eslint/type-utils@npm:5.59.8" + dependencies: + "@typescript-eslint/typescript-estree": 5.59.8 + "@typescript-eslint/utils": 5.59.8 + debug: ^4.3.4 + tsutils: ^3.21.0 + peerDependencies: + eslint: "*" + peerDependenciesMeta: + typescript: + optional: true + checksum: 70c64edb564d4c5270cb8cea226544eebcf0f0a394c185a3c5b5bfd9df2e97e0396fa6324ba58da3136d99d12adcfe5f21243aa6c997734e6daa154a6708ae60 + languageName: node + linkType: hard + "@typescript-eslint/types@npm:4.33.0": version: 4.33.0 resolution: "@typescript-eslint/types@npm:4.33.0" @@ -12296,6 +12454,13 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/types@npm:5.59.8": + version: 5.59.8 + resolution: "@typescript-eslint/types@npm:5.59.8" + checksum: 3f5000f556b4fe45c16e00b24d18c0f8930a214e61a0302daf3ef952a7a45342d9e63119626bd0556b252a6345e1fa423e34908eaf08560756f6c747dcffb56a + languageName: node + linkType: hard + "@typescript-eslint/typescript-estree@npm:4.33.0": version: 4.33.0 resolution: "@typescript-eslint/typescript-estree@npm:4.33.0" @@ -12332,6 +12497,24 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/typescript-estree@npm:5.59.8": + version: 5.59.8 + resolution: "@typescript-eslint/typescript-estree@npm:5.59.8" + dependencies: + "@typescript-eslint/types": 5.59.8 + "@typescript-eslint/visitor-keys": 5.59.8 + debug: ^4.3.4 + globby: ^11.1.0 + is-glob: ^4.0.3 + semver: ^7.3.7 + tsutils: ^3.21.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: a6ec2654c5c8c0bead99e1a43936a56e9bd0e1422b993fcd9d603ff31fe4701e9562fbc6d0f2b4d50a7d113d27d5fb68c428f78b938bd110b0112ed4df81ed72 + languageName: node + linkType: hard + "@typescript-eslint/utils@npm:5.53.0": version: 5.53.0 resolution: "@typescript-eslint/utils@npm:5.53.0" @@ -12350,6 +12533,24 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/utils@npm:5.59.8": + version: 5.59.8 + resolution: "@typescript-eslint/utils@npm:5.59.8" + dependencies: + "@eslint-community/eslint-utils": ^4.2.0 + "@types/json-schema": ^7.0.9 + "@types/semver": ^7.3.12 + "@typescript-eslint/scope-manager": 5.59.8 + "@typescript-eslint/types": 5.59.8 + "@typescript-eslint/typescript-estree": 5.59.8 + eslint-scope: ^5.1.1 + semver: ^7.3.7 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: 20b859508942b79111ddbea8e777864fa76a5597b217bff921ba0e9ad245f71cff7ed598d18f384f441d4b433cfae0645654455fa38f313e24869fa062582964 + languageName: node + linkType: hard + "@typescript-eslint/visitor-keys@npm:4.33.0": version: 4.33.0 resolution: "@typescript-eslint/visitor-keys@npm:4.33.0" @@ -12370,6 +12571,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/visitor-keys@npm:5.59.8": + version: 5.59.8 + resolution: "@typescript-eslint/visitor-keys@npm:5.59.8" + dependencies: + "@typescript-eslint/types": 5.59.8 + eslint-visitor-keys: ^3.3.0 + checksum: 0e7cdb5c0e9106bbb77bb599d9a6464306d7cfa1b35435810c5d59b951f3b65ac3a1a829894e328e43d411da189247568eb24d28dd9ceca95dfc3f19011b889f + languageName: node + linkType: hard + "@vercel/webpack-asset-relocator-loader@npm:^1.7.0": version: 1.7.2 resolution: "@vercel/webpack-asset-relocator-loader@npm:1.7.2" @@ -13229,7 +13440,7 @@ __metadata: languageName: node linkType: hard -"ansi-align@npm:^3.0.0": +"ansi-align@npm:^3.0.0, ansi-align@npm:^3.0.1": version: 3.0.1 resolution: "ansi-align@npm:3.0.1" dependencies: @@ -13259,7 +13470,7 @@ __metadata: languageName: node linkType: hard -"ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.0": +"ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.0, ansi-escapes@npm:^4.3.2": version: 4.3.2 resolution: "ansi-escapes@npm:4.3.2" dependencies: @@ -13346,7 +13557,7 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^6.0.0": +"ansi-styles@npm:^6.0.0, ansi-styles@npm:^6.1.0": version: 6.2.1 resolution: "ansi-styles@npm:6.2.1" checksum: 5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c @@ -13364,13 +13575,6 @@ __metadata: languageName: node linkType: hard -"ansi-wordwrap@npm:^1.0.2": - version: 1.0.2 - resolution: "ansi-wordwrap@npm:1.0.2" - checksum: 1e1e7bcf46fd55d8646514ad4372b15ef6fb0cb205070c875e7128e62ec6dc7d4cda2624b3670265eb4873950e7ece1ae6753a2fe265210c5c5e7d786cbe4f6a - languageName: node - linkType: hard - "ansicolors@npm:~0.3.2": version: 0.3.2 resolution: "ansicolors@npm:0.3.2" @@ -14147,6 +14351,16 @@ __metadata: languageName: node linkType: hard +"axios@npm:^0.27.2": + version: 0.27.2 + resolution: "axios@npm:0.27.2" + dependencies: + follow-redirects: ^1.14.9 + form-data: ^4.0.0 + checksum: 76d673d2a90629944b44d6f345f01e58e9174690f635115d5ffd4aca495d99bcd8f95c590d5ccb473513f5ebc1d1a6e8934580d0c57cdd0498c3a101313ef771 + languageName: node + linkType: hard + "axios@npm:^1.3.4": version: 1.3.4 resolution: "axios@npm:1.3.4" @@ -14880,7 +15094,7 @@ __metadata: languageName: node linkType: hard -"big-integer@npm:^1.6.7": +"big-integer@npm:^1.6.44, big-integer@npm:^1.6.7": version: 1.6.51 resolution: "big-integer@npm:1.6.51" checksum: c8139662d57f8833a44802f4b65be911679c569535ea73c5cfd3c1c8994eaead1b84b6f63e1db63833e4d4cacb6b6a9e5522178113dfdc8e4c81ed8436f1e8cc @@ -14928,6 +15142,17 @@ __metadata: languageName: node linkType: hard +"bl@npm:^5.0.0": + version: 5.1.0 + resolution: "bl@npm:5.1.0" + dependencies: + buffer: ^6.0.3 + inherits: ^2.0.4 + readable-stream: ^3.4.0 + checksum: 528a9c3d7d6b87af98c46f10a887654d027c28c503c7f7de87440e643f0056d7a2319a967762b8ec18150c64799d2825a277147a752a0570a7407c0b705b0d01 + languageName: node + linkType: hard + "bluebird@npm:^3.4.0, bluebird@npm:^3.5.5, bluebird@npm:^3.7.2": version: 3.7.2 resolution: "bluebird@npm:3.7.2" @@ -15053,6 +15278,22 @@ __metadata: languageName: node linkType: hard +"boxen@npm:^7.1.0": + version: 7.1.0 + resolution: "boxen@npm:7.1.0" + dependencies: + ansi-align: ^3.0.1 + camelcase: ^7.0.1 + chalk: ^5.2.0 + cli-boxes: ^3.0.0 + string-width: ^5.1.2 + type-fest: ^2.13.0 + widest-line: ^4.0.1 + wrap-ansi: ^8.1.0 + checksum: e37b79f2156dc17e6f9994fedd175ff33a674d651bda0fcd99ba36d1be0fd1954ef8e25a940fc2229fb9978673bc7b78bc31a7ded42b443c32ba2fbccdbfcfa0 + languageName: node + linkType: hard + "bplist-parser@npm:^0.1.0": version: 0.1.1 resolution: "bplist-parser@npm:0.1.1" @@ -15062,6 +15303,15 @@ __metadata: languageName: node linkType: hard +"bplist-parser@npm:^0.2.0": + version: 0.2.0 + resolution: "bplist-parser@npm:0.2.0" + dependencies: + big-integer: ^1.6.44 + checksum: ce79c69e0f6efe506281e7c84e3712f7d12978991675b6e3a58a295b16f13ca81aa9b845c335614a545e0af728c8311b6aa3142af76ba1cb616af9bbac5c4a9f + languageName: node + linkType: hard + "brace-expansion@npm:^1.1.7": version: 1.1.11 resolution: "brace-expansion@npm:1.1.11" @@ -15364,6 +15614,15 @@ __metadata: languageName: node linkType: hard +"bundle-name@npm:^3.0.0": + version: 3.0.0 + resolution: "bundle-name@npm:3.0.0" + dependencies: + run-applescript: ^5.0.0 + checksum: 57bc7f8b025d83961b04db2f1eff6a87f2363c2891f3542a4b82471ff8ebb5d484af48e9784fcdb28ef1d48bb01f03d891966dc3ef58758e46ea32d750ce40f8 + languageName: node + linkType: hard + "bundle-require@npm:^3.1.2": version: 3.1.2 resolution: "bundle-require@npm:3.1.2" @@ -15690,6 +15949,13 @@ __metadata: languageName: node linkType: hard +"camelcase@npm:^7.0.1": + version: 7.0.1 + resolution: "camelcase@npm:7.0.1" + checksum: 3adfc9a0e96d51b3a2f4efe90a84dad3e206aaa81dfc664f1bd568270e1bf3b010aad31f01db16345b4ffe1910e16ab411c7273a19a859addd1b98ef7cf4cfbd + languageName: node + linkType: hard + "camelize@npm:^1.0.0": version: 1.0.1 resolution: "camelize@npm:1.0.1" @@ -15849,6 +16115,13 @@ __metadata: languageName: node linkType: hard +"chalk@npm:^5.0.0, chalk@npm:^5.2.0": + version: 5.2.0 + resolution: "chalk@npm:5.2.0" + checksum: 8a519b35c239f96e041b7f1ed8fdd79d3ca2332a8366cb957378b8a1b8a4cdfb740d19628e8bf74654d4c0917aa10cf39c20752e177a1304eac29a1168a740e9 + languageName: node + linkType: hard + "change-case-all@npm:1.0.14": version: 1.0.14 resolution: "change-case-all@npm:1.0.14" @@ -16106,6 +16379,13 @@ __metadata: languageName: node linkType: hard +"cli-boxes@npm:^3.0.0": + version: 3.0.0 + resolution: "cli-boxes@npm:3.0.0" + checksum: 4db3e8fbfaf1aac4fb3a6cbe5a2d3fa048bee741a45371b906439b9ffc821c6e626b0f108bdcd3ddf126a4a319409aedcf39a0730573ff050fdd7b6731e99fb9 + languageName: node + linkType: hard + "cli-cursor@npm:^3.1.0": version: 3.1.0 resolution: "cli-cursor@npm:3.1.0" @@ -16115,6 +16395,15 @@ __metadata: languageName: node linkType: hard +"cli-cursor@npm:^4.0.0": + version: 4.0.0 + resolution: "cli-cursor@npm:4.0.0" + dependencies: + restore-cursor: ^4.0.0 + checksum: e776e8c3c6727300d0539b0d25160b2bb56aed1a63942753ba1826b012f337a6f4b7ace3548402e4f2f13b5e16bfd751be672c44b203205e7eca8be94afec42c + languageName: node + linkType: hard + "cli-highlight@npm:^2.1.11": version: 2.1.11 resolution: "cli-highlight@npm:2.1.11" @@ -16147,6 +16436,13 @@ __metadata: languageName: node linkType: hard +"cli-spinners@npm:^2.6.1": + version: 2.9.0 + resolution: "cli-spinners@npm:2.9.0" + checksum: c0d5437acc1ace7361b1c58a4fda3c92c2d8691ff3169ac658ce30faee71280b7aa706c072bcb6d0e380c232f3495f7d5ad4668c1391fe02c4d3a39d37798f44 + languageName: node + linkType: hard + "cli-table3@npm:^0.6.1": version: 0.6.2 resolution: "cli-table3@npm:0.6.2" @@ -16221,6 +16517,13 @@ __metadata: languageName: node linkType: hard +"cli-width@npm:^4.0.0": + version: 4.0.0 + resolution: "cli-width@npm:4.0.0" + checksum: 7b331e69bc30745bdf6edc5062c8e1bce7c17bcc694442e9a5049d950e19739192ead51e106e482acb181f8b6a3a442bb3ca76f327165097aa54339c2f295ec0 + languageName: node + linkType: hard + "client-sessions@npm:^0.8.0": version: 0.8.0 resolution: "client-sessions@npm:0.8.0" @@ -16506,6 +16809,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:^10.0.1": + version: 10.0.1 + resolution: "commander@npm:10.0.1" + checksum: 53f33d8927758a911094adadda4b2cbac111a5b377d8706700587650fd8f45b0bbe336de4b5c3fe47fd61f420a3d9bd452b6e0e6e5600a7e74d7bf0174f6efe3 + languageName: node + linkType: hard + "commander@npm:^2.19.0, commander@npm:^2.20.0, commander@npm:^2.20.3": version: 2.20.3 resolution: "commander@npm:2.20.3" @@ -16534,7 +16844,7 @@ __metadata: languageName: node linkType: hard -"commander@npm:^8.1.0, commander@npm:^8.2.0": +"commander@npm:^8.2.0": version: 8.3.0 resolution: "commander@npm:8.3.0" checksum: 8b043bb8322ea1c39664a1598a95e0495bfe4ca2fad0d84a92d7d1d8d213e2a155b441d2470c8e08de7c4a28cf2bc6e169211c49e1b21d9f7edc6ae4d9356060 @@ -17112,34 +17422,40 @@ __metadata: version: 0.0.0-use.local resolution: "create-medusa-app@workspace:packages/create-medusa-app" dependencies: - "@ascorbic/worker-threads-shim": ^1.0.0 - "@babel/runtime": ^7.15.4 "@types/chalk": ^2.2.0 "@types/commander": ^2.12.2 - "@types/configstore": ^4.0.0 - "@types/fs-extra": ^9.0.13 - "@types/node": ^14.18.36 - ansi-wordwrap: ^1.0.2 - chalk: ^4.1.2 - commander: ^8.1.0 - common-tags: ^1.8.2 + "@types/configstore": ^6.0.0 + "@types/inquirer": ^9.0.3 + "@types/pg": ^8.6.6 + "@types/uuid": ^9.0.1 + "@types/validator": ^13.7.17 + "@types/wait-on": ^5.3.1 + "@typescript-eslint/eslint-plugin": ^5.59.5 + "@typescript-eslint/parser": ^5.59.5 + boxen: ^7.1.0 + chalk: ^5.2.0 + commander: ^10.0.1 configstore: ^6.0.0 - enquirer: ^2.3.6 - execa: ^5.1.1 - fs-exists-cached: ^1.0.0 - fs-extra: ^10.0.0 - hosted-git-info: ^4.0.2 - is-valid-path: ^0.1.1 - microbundle: ^0.13.3 - node-fetch: ^2.6.9 - prompts: ^2.4.2 - string-length: ^4.0.2 - terminal-link: ^2.1.1 - tiny-spin: ^1.0.2 - url: ^0.11.0 - uuid: 3.4.0 + eslint: ^8.40.0 + eslint-config-google: ^0.14.0 + eslint-config-prettier: ^8.8.0 + eslint-plugin-prettier: ^4.2.1 + inquirer: ^9.2.2 + medusa-telemetry: ^0.0.16 + nanoid: ^4.0.2 + node-fetch: ^3.3.1 + open: ^9.1.0 + ora: ^6.3.0 + pg: ^8.10.0 + prettier: ^2.8.8 + slugify: ^1.6.6 + ts-node: ^10.9.1 + typescript: ^5.0.4 + uuid: ^9.0.0 + validator: ^13.9.0 + wait-on: ^7.0.1 bin: - create-medusa-app: cli.js + create-medusa-app: dist/index.js languageName: unknown linkType: soft @@ -17622,6 +17938,13 @@ __metadata: languageName: node linkType: hard +"data-uri-to-buffer@npm:^4.0.0": + version: 4.0.1 + resolution: "data-uri-to-buffer@npm:4.0.1" + checksum: 20a6b93107597530d71d4cb285acee17f66bcdfc03fd81040921a81252f19db27588d87fc8fc69e1950c55cfb0bf8ae40d0e5e21d907230813eb5d5a7f9eb45b + languageName: node + linkType: hard + "data-urls@npm:^1.1.0": version: 1.1.0 resolution: "data-urls@npm:1.1.0" @@ -17865,6 +18188,28 @@ __metadata: languageName: node linkType: hard +"default-browser-id@npm:^3.0.0": + version: 3.0.0 + resolution: "default-browser-id@npm:3.0.0" + dependencies: + bplist-parser: ^0.2.0 + untildify: ^4.0.0 + checksum: 8db3ab882eb3e1e8b59d84c8641320e6c66d8eeb17eb4bb848b7dd549b1e6fd313988e4a13542e95fbaeff03f6e9dedc5ad191ad4df7996187753eb0d45c00b7 + languageName: node + linkType: hard + +"default-browser@npm:^4.0.0": + version: 4.0.0 + resolution: "default-browser@npm:4.0.0" + dependencies: + bundle-name: ^3.0.0 + default-browser-id: ^3.0.0 + execa: ^7.1.1 + titleize: ^3.0.0 + checksum: 7c8848badc139ecf9d878e562bc4e7ab4301e51ba120b24d8dcb14739c30152115cc612065ac3ab73c02aace4afa29db5a044257b2f0cf234f16e3a58f6c925e + languageName: node + linkType: hard + "defaults@npm:^1.0.3": version: 1.0.3 resolution: "defaults@npm:1.0.3" @@ -17905,6 +18250,13 @@ __metadata: languageName: node linkType: hard +"define-lazy-prop@npm:^3.0.0": + version: 3.0.0 + resolution: "define-lazy-prop@npm:3.0.0" + checksum: 5ab0b2bf3fa58b3a443140bbd4cd3db1f91b985cc8a246d330b9ac3fc0b6a325a6d82bddc0b055123d745b3f9931afeea74a5ec545439a1630b9c8512b0eeb49 + languageName: node + linkType: hard + "define-properties@npm:^1.1.2, define-properties@npm:^1.1.3, define-properties@npm:^1.1.4": version: 1.1.4 resolution: "define-properties@npm:1.1.4" @@ -19402,6 +19754,13 @@ __metadata: languageName: node linkType: hard +"escape-string-regexp@npm:^5.0.0": + version: 5.0.0 + resolution: "escape-string-regexp@npm:5.0.0" + checksum: 6366f474c6f37a802800a435232395e04e9885919873e382b157ab7e8f0feb8fed71497f84a6f6a81a49aab41815522f5839112bd38026d203aea0c91622df95 + languageName: node + linkType: hard + "escodegen@npm:^1.11.1": version: 1.14.3 resolution: "escodegen@npm:1.14.3" @@ -19460,6 +19819,17 @@ __metadata: languageName: node linkType: hard +"eslint-config-prettier@npm:^8.8.0": + version: 8.8.0 + resolution: "eslint-config-prettier@npm:8.8.0" + peerDependencies: + eslint: ">=7.0.0" + bin: + eslint-config-prettier: bin/cli.js + checksum: 9e3bb602184b7ec59239d2f901b1594cd7cc59ff38c3ddcd812137817e50840f4d65d62b61c515c7eae86d85f8b6fb2ebda659a3f83b2f2c5da75feb15531508 + languageName: node + linkType: hard + "eslint-config-react-app@npm:^6.0.0": version: 6.0.0 resolution: "eslint-config-react-app@npm:6.0.0" @@ -19714,6 +20084,16 @@ __metadata: languageName: node linkType: hard +"eslint-scope@npm:^7.2.0": + version: 7.2.0 + resolution: "eslint-scope@npm:7.2.0" + dependencies: + esrecurse: ^4.3.0 + estraverse: ^5.2.0 + checksum: 5b48a3cc2485a3a58ca0bdecfb557c349009308a9b2afb24d070b1c0c254d445ee86d78bfee2c4ed6d1b8944307604a987c92f6d7e611e29de5d06256747a0ff + languageName: node + linkType: hard + "eslint-utils@npm:^1.4.3": version: 1.4.3 resolution: "eslint-utils@npm:1.4.3" @@ -19764,6 +20144,13 @@ __metadata: languageName: node linkType: hard +"eslint-visitor-keys@npm:^3.4.1": + version: 3.4.1 + resolution: "eslint-visitor-keys@npm:3.4.1" + checksum: b4ebd35aed5426cd81b1fb92487825f1acf47a31e91d76597a3ee0664d69627140c4dafaf9b319cfeb1f48c1113a393e21a734c669e6565a72e6fcc311bd9911 + languageName: node + linkType: hard + "eslint-webpack-plugin@npm:^2.6.0": version: 2.7.0 resolution: "eslint-webpack-plugin@npm:2.7.0" @@ -19927,6 +20314,55 @@ __metadata: languageName: node linkType: hard +"eslint@npm:^8.40.0": + version: 8.41.0 + resolution: "eslint@npm:8.41.0" + dependencies: + "@eslint-community/eslint-utils": ^4.2.0 + "@eslint-community/regexpp": ^4.4.0 + "@eslint/eslintrc": ^2.0.3 + "@eslint/js": 8.41.0 + "@humanwhocodes/config-array": ^0.11.8 + "@humanwhocodes/module-importer": ^1.0.1 + "@nodelib/fs.walk": ^1.2.8 + ajv: ^6.10.0 + chalk: ^4.0.0 + cross-spawn: ^7.0.2 + debug: ^4.3.2 + doctrine: ^3.0.0 + escape-string-regexp: ^4.0.0 + eslint-scope: ^7.2.0 + eslint-visitor-keys: ^3.4.1 + espree: ^9.5.2 + esquery: ^1.4.2 + esutils: ^2.0.2 + fast-deep-equal: ^3.1.3 + file-entry-cache: ^6.0.1 + find-up: ^5.0.0 + glob-parent: ^6.0.2 + globals: ^13.19.0 + graphemer: ^1.4.0 + ignore: ^5.2.0 + import-fresh: ^3.0.0 + imurmurhash: ^0.1.4 + is-glob: ^4.0.0 + is-path-inside: ^3.0.3 + js-yaml: ^4.1.0 + json-stable-stringify-without-jsonify: ^1.0.1 + levn: ^0.4.1 + lodash.merge: ^4.6.2 + minimatch: ^3.1.2 + natural-compare: ^1.4.0 + optionator: ^0.9.1 + strip-ansi: ^6.0.1 + strip-json-comments: ^3.1.0 + text-table: ^0.2.0 + bin: + eslint: bin/eslint.js + checksum: d71832b235bebaa67c09019dee32bf8393c5e12155e91131c4606670eb9836fbff31e11364408258cb75e2bde8a4dfa0c042aa6145bb23cd800a42e63ca4a035 + languageName: node + linkType: hard + "espree@npm:^6.1.2": version: 6.2.1 resolution: "espree@npm:6.2.1" @@ -19960,6 +20396,17 @@ __metadata: languageName: node linkType: hard +"espree@npm:^9.5.2": + version: 9.5.2 + resolution: "espree@npm:9.5.2" + dependencies: + acorn: ^8.8.0 + acorn-jsx: ^5.3.2 + eslint-visitor-keys: ^3.4.1 + checksum: 6885e57b3dcea3f65211403a10077a80a57f03e6c8b45c1e1db4bc5958e0fdb5c358819c88898ea67655d25fb646836182f688156e124a05610e714d3fcb6822 + languageName: node + linkType: hard + "esprima@npm:^4.0.0, esprima@npm:^4.0.1, esprima@npm:~4.0.0": version: 4.0.1 resolution: "esprima@npm:4.0.1" @@ -19979,6 +20426,15 @@ __metadata: languageName: node linkType: hard +"esquery@npm:^1.4.2": + version: 1.5.0 + resolution: "esquery@npm:1.5.0" + dependencies: + estraverse: ^5.1.0 + checksum: a084bd049d954cc88ac69df30534043fb2aee5555b56246493f42f27d1e168f00d9e5d4192e46f10290d312dc30dc7d58994d61a609c579c1219d636996f9213 + languageName: node + linkType: hard + "esrecurse@npm:^4.1.0, esrecurse@npm:^4.3.0": version: 4.3.0 resolution: "esrecurse@npm:4.3.0" @@ -20200,6 +20656,23 @@ __metadata: languageName: node linkType: hard +"execa@npm:^7.1.1": + version: 7.1.1 + resolution: "execa@npm:7.1.1" + dependencies: + cross-spawn: ^7.0.3 + get-stream: ^6.0.1 + human-signals: ^4.3.0 + is-stream: ^3.0.0 + merge-stream: ^2.0.0 + npm-run-path: ^5.1.0 + onetime: ^6.0.0 + signal-exit: ^3.0.7 + strip-final-newline: ^3.0.0 + checksum: 0da5ee1c895b62142bc3d1567d1974711c28c2cfa6bae96e1923379bd597e476d762a13f282f92815d8ebfa33407949634fa32a0d6db8334a20e625fe11d4351 + languageName: node + linkType: hard + "exif-parser@npm:^0.1.12": version: 0.1.12 resolution: "exif-parser@npm:0.1.12" @@ -20786,6 +21259,16 @@ __metadata: languageName: node linkType: hard +"fetch-blob@npm:^3.1.2, fetch-blob@npm:^3.1.4": + version: 3.2.0 + resolution: "fetch-blob@npm:3.2.0" + dependencies: + node-domexception: ^1.0.0 + web-streams-polyfill: ^3.0.3 + checksum: 60054bf47bfa10fb0ba6cb7742acec2f37c1f56344f79a70bb8b1c48d77675927c720ff3191fa546410a0442c998d27ab05e9144c32d530d8a52fbe68f843b69 + languageName: node + linkType: hard + "fetch-retry@npm:^5.0.2": version: 5.0.3 resolution: "fetch-retry@npm:5.0.3" @@ -20819,6 +21302,16 @@ __metadata: languageName: node linkType: hard +"figures@npm:^5.0.0": + version: 5.0.0 + resolution: "figures@npm:5.0.0" + dependencies: + escape-string-regexp: ^5.0.0 + is-unicode-supported: ^1.2.0 + checksum: ce0f17d4ea8b0fc429c5207c343534a2f5284ecfb22aa08607da7dc84ed9e1cf754f5b97760e8dcb98d3c9d1a1e4d3d578fe3b5b99c426f05d0f06c7ba618e16 + languageName: node + linkType: hard + "file-entry-cache@npm:^5.0.1": version: 5.0.1 resolution: "file-entry-cache@npm:5.0.1" @@ -21142,7 +21635,7 @@ __metadata: languageName: node linkType: hard -"follow-redirects@npm:^1.15.0": +"follow-redirects@npm:^1.14.9, follow-redirects@npm:^1.15.0": version: 1.15.2 resolution: "follow-redirects@npm:1.15.2" peerDependenciesMeta: @@ -21280,6 +21773,15 @@ __metadata: languageName: node linkType: hard +"formdata-polyfill@npm:^4.0.10": + version: 4.0.10 + resolution: "formdata-polyfill@npm:4.0.10" + dependencies: + fetch-blob: ^3.1.2 + checksum: 5392ec484f9ce0d5e0d52fb5a78e7486637d516179b0eb84d81389d7eccf9ca2f663079da56f761355c0a65792810e3b345dc24db9a8bbbcf24ef3c8c88570c6 + languageName: node + linkType: hard + "formidable@npm:^1.2.0": version: 1.2.6 resolution: "formidable@npm:1.2.6" @@ -22217,7 +22719,7 @@ __metadata: languageName: node linkType: hard -"get-stream@npm:^6.0.0": +"get-stream@npm:^6.0.0, get-stream@npm:^6.0.1": version: 6.0.1 resolution: "get-stream@npm:6.0.1" checksum: 49825d57d3fd6964228e6200a58169464b8e8970489b3acdc24906c782fb7f01f9f56f8e6653c4a50713771d6658f7cfe051e5eb8c12e334138c9c918b296341 @@ -22468,6 +22970,15 @@ __metadata: languageName: node linkType: hard +"globals@npm:^13.19.0": + version: 13.20.0 + resolution: "globals@npm:13.20.0" + dependencies: + type-fest: ^0.20.2 + checksum: 9a028f136f1e7a3574689f430f7d57faa0d699c4c7e92ade00b02882a892be31c314d50dff07b48e607283013117bb8a997406d03a1f7ab4a33a005eb16efd6c + languageName: node + linkType: hard + "globalthis@npm:^1.0.0, globalthis@npm:^1.0.3": version: 1.0.3 resolution: "globalthis@npm:1.0.3" @@ -22624,6 +23135,13 @@ __metadata: languageName: node linkType: hard +"graphemer@npm:^1.4.0": + version: 1.4.0 + resolution: "graphemer@npm:1.4.0" + checksum: e951259d8cd2e0d196c72ec711add7115d42eb9a8146c8eeda5b8d3ac91e5dd816b9cd68920726d9fd4490368e7ed86e9c423f40db87e2d8dfafa00fa17c3a31 + languageName: node + linkType: hard + "graphql-compose@npm:^9.0.7": version: 9.0.8 resolution: "graphql-compose@npm:9.0.8" @@ -23409,6 +23927,13 @@ __metadata: languageName: node linkType: hard +"human-signals@npm:^4.3.0": + version: 4.3.1 + resolution: "human-signals@npm:4.3.1" + checksum: 40498b33fe139f5cc4ef5d2f95eb1803d6318ac1b1c63eaf14eeed5484d26332c828de4a5a05676b6c83d7b9e57727c59addb4b1dea19cb8d71e83689e5b336c + languageName: node + linkType: hard + "humanize-ms@npm:^1.2.1": version: 1.2.1 resolution: "humanize-ms@npm:1.2.1" @@ -23736,6 +24261,29 @@ __metadata: languageName: node linkType: hard +"inquirer@npm:^9.2.2": + version: 9.2.6 + resolution: "inquirer@npm:9.2.6" + dependencies: + ansi-escapes: ^4.3.2 + chalk: ^5.2.0 + cli-cursor: ^3.1.0 + cli-width: ^4.0.0 + external-editor: ^3.0.3 + figures: ^5.0.0 + lodash: ^4.17.21 + mute-stream: 1.0.0 + ora: ^5.4.1 + run-async: ^3.0.0 + rxjs: ^7.8.1 + string-width: ^4.2.3 + strip-ansi: ^6.0.1 + through: ^2.3.6 + wrap-ansi: ^6.0.1 + checksum: f07fe6b0ce9587a306771c5d4c40e5f5bbb940c6a78648326e978ec7f26fb28a903cbf595fd23af3b35b633ec5eba1845e2c3d35888fe073c884f50046a738b8 + languageName: node + linkType: hard + "integration-tests-api@workspace:integration-tests/api": version: 0.0.0-use.local resolution: "integration-tests-api@workspace:integration-tests/api" @@ -24145,6 +24693,15 @@ __metadata: languageName: node linkType: hard +"is-docker@npm:^3.0.0": + version: 3.0.0 + resolution: "is-docker@npm:3.0.0" + bin: + is-docker: cli.js + checksum: d2c4f8e6d3e34df75a5defd44991b6068afad4835bb783b902fa12d13ebdb8f41b2a199dcb0b5ed2cb78bfee9e4c0bbdb69c2d9646f4106464674d3e697a5856 + languageName: node + linkType: hard + "is-dom@npm:^1.0.0": version: 1.1.0 resolution: "is-dom@npm:1.1.0" @@ -24270,6 +24827,17 @@ __metadata: languageName: node linkType: hard +"is-inside-container@npm:^1.0.0": + version: 1.0.0 + resolution: "is-inside-container@npm:1.0.0" + dependencies: + is-docker: ^3.0.0 + bin: + is-inside-container: cli.js + checksum: a8efb0e84f6197e6ff5c64c52890fa9acb49b7b74fed4da7c95383965da6f0fa592b4dbd5e38a79f87fc108196937acdbcd758fcefc9b140e479b39ce1fcd1cd + languageName: node + linkType: hard + "is-installed-globally@npm:^0.4.0": version: 0.4.0 resolution: "is-installed-globally@npm:0.4.0" @@ -24287,6 +24855,13 @@ __metadata: languageName: node linkType: hard +"is-interactive@npm:^2.0.0": + version: 2.0.0 + resolution: "is-interactive@npm:2.0.0" + checksum: 801c8f6064f85199dc6bf99b5dd98db3282e930c3bc197b32f2c5b89313bb578a07d1b8a01365c4348c2927229234f3681eb861b9c2c92bee72ff397390fa600 + languageName: node + linkType: hard + "is-invalid-path@npm:^0.1.0": version: 0.1.0 resolution: "is-invalid-path@npm:0.1.0" @@ -24407,7 +24982,7 @@ __metadata: languageName: node linkType: hard -"is-path-inside@npm:^3.0.2": +"is-path-inside@npm:^3.0.2, is-path-inside@npm:^3.0.3": version: 3.0.3 resolution: "is-path-inside@npm:3.0.3" checksum: cf7d4ac35fb96bab6a1d2c3598fe5ebb29aafb52c0aaa482b5a3ed9d8ba3edc11631e3ec2637660c44b3ce0e61a08d54946e8af30dec0b60a7c27296c68ffd05 @@ -24562,6 +25137,13 @@ __metadata: languageName: node linkType: hard +"is-stream@npm:^3.0.0": + version: 3.0.0 + resolution: "is-stream@npm:3.0.0" + checksum: eb2f7127af02ee9aa2a0237b730e47ac2de0d4e76a4a905a50a11557f2339df5765eaea4ceb8029f1efa978586abe776908720bfcb1900c20c6ec5145f6f29d8 + languageName: node + linkType: hard + "is-string@npm:^1.0.5, is-string@npm:^1.0.7": version: 1.0.7 resolution: "is-string@npm:1.0.7" @@ -24612,6 +25194,13 @@ __metadata: languageName: node linkType: hard +"is-unicode-supported@npm:^1.1.0, is-unicode-supported@npm:^1.2.0": + version: 1.3.0 + resolution: "is-unicode-supported@npm:1.3.0" + checksum: b8674ea95d869f6faabddc6a484767207058b91aea0250803cbf1221345cb0c56f466d4ecea375dc77f6633d248d33c47bd296fb8f4cdba0b4edba8917e83d8a + languageName: node + linkType: hard + "is-upper-case@npm:^2.0.2": version: 2.0.2 resolution: "is-upper-case@npm:2.0.2" @@ -27210,6 +27799,19 @@ __metadata: languageName: node linkType: hard +"joi@npm:^17.7.0": + version: 17.9.2 + resolution: "joi@npm:17.9.2" + dependencies: + "@hapi/hoek": ^9.0.0 + "@hapi/topo": ^5.0.0 + "@sideway/address": ^4.1.3 + "@sideway/formula": ^3.0.1 + "@sideway/pinpoint": ^2.0.0 + checksum: 284bc34d5070c7b064a9fa68e02703961ad08229dd95dfe0baf2aa5d278c7a99543ecb979b8a6e6f72035539bfdaf1269ac7fa7684a503b6de18b173f72dcc89 + languageName: node + linkType: hard + "join-component@npm:^1.1.0": version: 1.1.0 resolution: "join-component@npm:1.1.0" @@ -28527,6 +29129,16 @@ __metadata: languageName: node linkType: hard +"log-symbols@npm:^5.1.0": + version: 5.1.0 + resolution: "log-symbols@npm:5.1.0" + dependencies: + chalk: ^5.0.0 + is-unicode-supported: ^1.1.0 + checksum: c14f8567c6618a7f96209c4c4b9fb3b794187116904712f7b526e465a5c9535728aec983735a5bef919247d0e54b9b72b6680a7fb9fc72d76b945dac4865e669 + languageName: node + linkType: hard + "log-update@npm:^4.0.0": version: 4.0.0 resolution: "log-update@npm:4.0.0" @@ -30164,6 +30776,13 @@ __metadata: languageName: node linkType: hard +"mimic-fn@npm:^4.0.0": + version: 4.0.0 + resolution: "mimic-fn@npm:4.0.0" + checksum: de9cc32be9996fd941e512248338e43407f63f6d497abe8441fa33447d922e927de54d4cc3c1a3c6d652857acd770389d5a3823f311a744132760ce2be15ccbf + languageName: node + linkType: hard + "mimic-response@npm:^1.0.0, mimic-response@npm:^1.0.1": version: 1.0.1 resolution: "mimic-response@npm:1.0.1" @@ -30230,7 +30849,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:2 || 3, minimatch@npm:^3.0.2, minimatch@npm:^3.0.4, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": +"minimatch@npm:2 || 3, minimatch@npm:^3.0.2, minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" dependencies: @@ -30275,6 +30894,13 @@ __metadata: languageName: node linkType: hard +"minimist@npm:^1.2.7": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 + languageName: node + linkType: hard + "minipass-collect@npm:^1.0.2": version: 1.0.2 resolution: "minipass-collect@npm:1.0.2" @@ -30749,6 +31375,13 @@ __metadata: languageName: node linkType: hard +"mute-stream@npm:1.0.0": + version: 1.0.0 + resolution: "mute-stream@npm:1.0.0" + checksum: dce2a9ccda171ec979a3b4f869a102b1343dee35e920146776780de182f16eae459644d187e38d59a3d37adf85685e1c17c38cf7bfda7e39a9880f7a1d10a74c + languageName: node + linkType: hard + "mv@npm:2.1.1, mv@npm:~2": version: 2.1.1 resolution: "mv@npm:2.1.1" @@ -30789,6 +31422,15 @@ __metadata: languageName: node linkType: hard +"nanoid@npm:^4.0.2": + version: 4.0.2 + resolution: "nanoid@npm:4.0.2" + bin: + nanoid: bin/nanoid.js + checksum: 3fec62f422bc4727918eda0e7aa43e9cbb2e759be72813a0587b9dac99727d3c7ad972efce7f4f1d4cb5c7c554136a1ec3b1043d1d91d28d818d6acbe98200e5 + languageName: node + linkType: hard + "nanomatch@npm:^1.2.9": version: 1.2.13 resolution: "nanomatch@npm:1.2.13" @@ -30967,6 +31609,13 @@ __metadata: languageName: node linkType: hard +"node-domexception@npm:^1.0.0": + version: 1.0.0 + resolution: "node-domexception@npm:1.0.0" + checksum: 5e5d63cda29856402df9472335af4bb13875e1927ad3be861dc5ebde38917aecbf9ae337923777af52a48c426b70148815e890a5d72760f1b4d758cc671b1a2b + languageName: node + linkType: hard + "node-environment-flags@npm:^1.0.5": version: 1.0.6 resolution: "node-environment-flags@npm:1.0.6" @@ -31017,17 +31666,14 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:^2.6.9": - version: 2.6.9 - resolution: "node-fetch@npm:2.6.9" +"node-fetch@npm:^3.3.1": + version: 3.3.1 + resolution: "node-fetch@npm:3.3.1" dependencies: - whatwg-url: ^5.0.0 - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - checksum: 7a4a0e027e509b741bec4172749103f158da23187ff251cb988dd54ea7267519c3fa11838971da0f5f3c54e79da3174e7bd72aa2179c9f69887511ece16c9c0f + data-uri-to-buffer: ^4.0.0 + fetch-blob: ^3.1.4 + formdata-polyfill: ^4.0.10 + checksum: 78671bffed741a2f3ccb15588a42fd7e9db2bdc9f99f9f584e0c749307f9603d961692f0877d853b28a4d1375ab2253b19978dd3bfc0c3189b42adc340bef927 languageName: node linkType: hard @@ -31328,6 +31974,15 @@ __metadata: languageName: node linkType: hard +"npm-run-path@npm:^5.1.0": + version: 5.1.0 + resolution: "npm-run-path@npm:5.1.0" + dependencies: + path-key: ^4.0.0 + checksum: ff6d77514489f47fa1c3b1311d09cd4b6d09a874cc1866260f9dea12cbaabda0436ed7f8c2ee44d147bf99a3af29307c6f63b0f83d242b0b6b0ab25dff2629e3 + languageName: node + linkType: hard + "npmlog@npm:^5.0.1": version: 5.0.1 resolution: "npmlog@npm:5.0.1" @@ -31680,6 +32335,13 @@ __metadata: languageName: node linkType: hard +"obuf@npm:~1.1.2": + version: 1.1.2 + resolution: "obuf@npm:1.1.2" + checksum: 520aaac7ea701618eacf000fc96ae458e20e13b0569845800fc582f81b386731ab22d55354b4915d58171db00e79cfcd09c1638c02f89577ef092b38c65b7d81 + languageName: node + linkType: hard + "omggif@npm:^1.0.10, omggif@npm:^1.0.9": version: 1.0.10 resolution: "omggif@npm:1.0.10" @@ -31739,6 +32401,15 @@ __metadata: languageName: node linkType: hard +"onetime@npm:^6.0.0": + version: 6.0.0 + resolution: "onetime@npm:6.0.0" + dependencies: + mimic-fn: ^4.0.0 + checksum: 4eef7c6abfef697dd4479345a4100c382d73c149d2d56170a54a07418c50816937ad09500e1ed1e79d235989d073a9bade8557122aee24f0576ecde0f392bb6c + languageName: node + linkType: hard + "open@npm:^7.0.3": version: 7.4.2 resolution: "open@npm:7.4.2" @@ -31760,6 +32431,18 @@ __metadata: languageName: node linkType: hard +"open@npm:^9.1.0": + version: 9.1.0 + resolution: "open@npm:9.1.0" + dependencies: + default-browser: ^4.0.0 + define-lazy-prop: ^3.0.0 + is-inside-container: ^1.0.0 + is-wsl: ^2.2.0 + checksum: 8073ec0dd8994a7a7d9bac208bd17d093993a65ce10f2eb9b62b6d3a91c9366ae903938a237c275493c130171d339f6dcbdd2a2de7e32953452c0867b97825af + languageName: node + linkType: hard + "openapi-sampler@npm:^1.3.0": version: 1.3.1 resolution: "openapi-sampler@npm:1.3.1" @@ -31857,6 +32540,23 @@ __metadata: languageName: node linkType: hard +"ora@npm:^6.3.0": + version: 6.3.1 + resolution: "ora@npm:6.3.1" + dependencies: + chalk: ^5.0.0 + cli-cursor: ^4.0.0 + cli-spinners: ^2.6.1 + is-interactive: ^2.0.0 + is-unicode-supported: ^1.1.0 + log-symbols: ^5.1.0 + stdin-discarder: ^0.1.0 + strip-ansi: ^7.0.1 + wcwidth: ^1.0.1 + checksum: f8753e234c9967c86cfb73e7396e1a51ed8771c4921d539af8e8962b32c7928cefef7b3c4ce730a504be72b1437f91cc0523f468927b9fe322498c4edcc50203 + languageName: node + linkType: hard + "ordered-binary@npm:^1.2.4": version: 1.3.0 resolution: "ordered-binary@npm:1.3.0" @@ -32513,6 +33213,13 @@ __metadata: languageName: node linkType: hard +"path-key@npm:^4.0.0": + version: 4.0.0 + resolution: "path-key@npm:4.0.0" + checksum: 794efeef32863a65ac312f3c0b0a99f921f3e827ff63afa5cb09a377e202c262b671f7b3832a4e64731003fa94af0263713962d317b9887bd1e0c48a342efba3 + languageName: node + linkType: hard + "path-parse@npm:^1.0.6, path-parse@npm:^1.0.7": version: 1.0.7 resolution: "path-parse@npm:1.0.7" @@ -32634,6 +33341,13 @@ __metadata: languageName: node linkType: hard +"pg-cloudflare@npm:^1.1.0": + version: 1.1.0 + resolution: "pg-cloudflare@npm:1.1.0" + checksum: 8196cd02224365ba9bf5a616c95212d829d9d12abb75ed7a35e8d9bc8dabacd461c227a1a387d98009ad72b2fbf435721bb91db7d8086b47633475724cebb1cf + languageName: node + linkType: hard + "pg-connection-string@npm:^2.5.0": version: 2.5.0 resolution: "pg-connection-string@npm:2.5.0" @@ -32641,6 +33355,13 @@ __metadata: languageName: node linkType: hard +"pg-connection-string@npm:^2.6.0": + version: 2.6.0 + resolution: "pg-connection-string@npm:2.6.0" + checksum: 04824a3f32897d58075f70c16e99ca578ba46b3a1343884bba63ae1740cd69f12f2f4777f91da8ff4c18d6b4dcafce61f1ebf0d58624fc33e0ff66e7f6db082a + languageName: node + linkType: hard + "pg-god@npm:^1.0.12": version: 1.0.12 resolution: "pg-god@npm:1.0.12" @@ -32664,6 +33385,13 @@ __metadata: languageName: node linkType: hard +"pg-numeric@npm:1.0.2": + version: 1.0.2 + resolution: "pg-numeric@npm:1.0.2" + checksum: 43dd9884e7b52c79ddc28d2d282d7475fce8bba13452d33c04ceb2e0a65f561edf6699694e8e1c832ff9093770496363183c950dd29608e1bdd98f344b25bca9 + languageName: node + linkType: hard + "pg-pool@npm:^3.5.1": version: 3.5.1 resolution: "pg-pool@npm:3.5.1" @@ -32673,6 +33401,22 @@ __metadata: languageName: node linkType: hard +"pg-pool@npm:^3.6.0": + version: 3.6.0 + resolution: "pg-pool@npm:3.6.0" + peerDependencies: + pg: ">=8.0" + checksum: de5823f544431cc18a44e3b4fee82fddcd4e723c0912b60370600772291727a0c579ab3ff767a44cc1b5c9137bc5d6cba25a282b5f33d6c033df55072c99ac27 + languageName: node + linkType: hard + +"pg-protocol@npm:*, pg-protocol@npm:^1.6.0": + version: 1.6.0 + resolution: "pg-protocol@npm:1.6.0" + checksum: 318a4d1e9cebd3927b10a8bc412f5017117a1f9a5fafb628d75847da7d1ab81c33250de58596bd0990029e14e92a995a851286d60fc236692299faf509572213 + languageName: node + linkType: hard + "pg-protocol@npm:^1.5.0": version: 1.5.0 resolution: "pg-protocol@npm:1.5.0" @@ -32693,6 +33437,45 @@ __metadata: languageName: node linkType: hard +"pg-types@npm:^4.0.1": + version: 4.0.1 + resolution: "pg-types@npm:4.0.1" + dependencies: + pg-int8: 1.0.1 + pg-numeric: 1.0.2 + postgres-array: ~3.0.1 + postgres-bytea: ~3.0.0 + postgres-date: ~2.0.1 + postgres-interval: ^3.0.0 + postgres-range: ^1.1.1 + checksum: e2126b2775554ae8bacb3b104814487c2af2caff44cc52bee786b3887c65fe4c1fe031237e51e30ffed1cbb13b71776bd60cc1e65ac800c9946df4030849a074 + languageName: node + linkType: hard + +"pg@npm:^8.10.0": + version: 8.11.0 + resolution: "pg@npm:8.11.0" + dependencies: + buffer-writer: 2.0.0 + packet-reader: 1.0.0 + pg-cloudflare: ^1.1.0 + pg-connection-string: ^2.6.0 + pg-pool: ^3.6.0 + pg-protocol: ^1.6.0 + pg-types: ^2.1.0 + pgpass: 1.x + peerDependencies: + pg-native: ">=3.0.1" + dependenciesMeta: + pg-cloudflare: + optional: true + peerDependenciesMeta: + pg-native: + optional: true + checksum: 81cc13bce32eeafc6365472750503698a4c853c7438ec8f6e3e88cccb39590cbed35f1df22991d9c460a4e11ac237babfa434445e4a92ff89c24ca3066969771 + languageName: node + linkType: hard + "pg@npm:^8.3.0, pg@npm:^8.5.1": version: 8.7.3 resolution: "pg@npm:8.7.3" @@ -33528,6 +34311,13 @@ __metadata: languageName: node linkType: hard +"postgres-array@npm:~3.0.1": + version: 3.0.2 + resolution: "postgres-array@npm:3.0.2" + checksum: 644aa071f67a66a59f641f8e623887d2b915bc102a32643e2aa8b54c11acd343c5ad97831ea444dd37bd4b921ba35add4aa2cb0c6b76700a8252c2324aeba5b4 + languageName: node + linkType: hard + "postgres-bytea@npm:~1.0.0": version: 1.0.0 resolution: "postgres-bytea@npm:1.0.0" @@ -33535,6 +34325,15 @@ __metadata: languageName: node linkType: hard +"postgres-bytea@npm:~3.0.0": + version: 3.0.0 + resolution: "postgres-bytea@npm:3.0.0" + dependencies: + obuf: ~1.1.2 + checksum: 41c79cc48aa730c5ba3eda6ab989a940034f07a1f57b8f2777dce56f1b8cca16c5870582932b5b10cc605048aef9b6157e06253c871b4717cafc6d00f55376aa + languageName: node + linkType: hard + "postgres-date@npm:~1.0.4": version: 1.0.7 resolution: "postgres-date@npm:1.0.7" @@ -33542,6 +34341,13 @@ __metadata: languageName: node linkType: hard +"postgres-date@npm:~2.0.1": + version: 2.0.1 + resolution: "postgres-date@npm:2.0.1" + checksum: 2d3698958f858b7d1df0a3929fb8750ccb43fa2c8ee9fec7a021e7926291f6c85ddd9d94d87cd6529d70bd2444f3e14fb5bb323af19ceaa733542cc05c5c653a + languageName: node + linkType: hard + "postgres-interval@npm:^1.1.0": version: 1.2.0 resolution: "postgres-interval@npm:1.2.0" @@ -33551,6 +34357,20 @@ __metadata: languageName: node linkType: hard +"postgres-interval@npm:^3.0.0": + version: 3.0.0 + resolution: "postgres-interval@npm:3.0.0" + checksum: 8b570b30ea37c685e26d136d34460f246f98935a1533defc4b53bb05ee23ae3dc7475b718ec7ea607a57894d8c6b4f1adf67ca9cc83a75bdacffd427d5c68de8 + languageName: node + linkType: hard + +"postgres-range@npm:^1.1.1": + version: 1.1.3 + resolution: "postgres-range@npm:1.1.3" + checksum: f46bc379a198a9e3282a222c8e432d77494854bd4fa0706dff01641846db0bf4f09a9723e7fbb202da34ec3b2d88fc50e26e4bbeded7df19646e3acd6a7465ce + languageName: node + linkType: hard + "prebuild-install@npm:^7.1.1": version: 7.1.1 resolution: "prebuild-install@npm:7.1.1" @@ -33688,6 +34508,15 @@ __metadata: languageName: node linkType: hard +"prettier@npm:^2.8.8": + version: 2.8.8 + resolution: "prettier@npm:2.8.8" + bin: + prettier: bin-prettier.js + checksum: 463ea8f9a0946cd5b828d8cf27bd8b567345cf02f56562d5ecde198b91f47a76b7ac9eae0facd247ace70e927143af6135e8cf411986b8cb8478784a4d6d724a + languageName: node + linkType: hard + "pretty-bytes@npm:^3.0.0": version: 3.0.1 resolution: "pretty-bytes@npm:3.0.1" @@ -35913,6 +36742,16 @@ __metadata: languageName: node linkType: hard +"restore-cursor@npm:^4.0.0": + version: 4.0.0 + resolution: "restore-cursor@npm:4.0.0" + dependencies: + onetime: ^5.1.0 + signal-exit: ^3.0.2 + checksum: 6f7da8c5e422ac26aa38354870b1afac09963572cf2879443540449068cb43476e9cbccf6f8de3e0171e0d6f7f533c2bc1a0a008003c9a525bbc098e89041318 + languageName: node + linkType: hard + "ret@npm:~0.1.10": version: 0.1.15 resolution: "ret@npm:0.1.15" @@ -36205,6 +37044,15 @@ __metadata: languageName: node linkType: hard +"run-applescript@npm:^5.0.0": + version: 5.0.0 + resolution: "run-applescript@npm:5.0.0" + dependencies: + execa: ^5.0.0 + checksum: f9977db5770929f3f0db434b8e6aa266498c70dec913c84320c0a06add510cf44e3a048c44da088abee312006f9cbf572fd065cdc8f15d7682afda8755f4114c + languageName: node + linkType: hard + "run-async@npm:^2.4.0": version: 2.4.1 resolution: "run-async@npm:2.4.1" @@ -36212,6 +37060,13 @@ __metadata: languageName: node linkType: hard +"run-async@npm:^3.0.0": + version: 3.0.0 + resolution: "run-async@npm:3.0.0" + checksum: b18b562ae37c3020083dcaae29642e4cc360c824fbfb6b7d50d809a9d5227bb986152d09310255842c8dce40526e82ca768f02f00806c91ba92a8dfa6159cb85 + languageName: node + linkType: hard + "run-parallel@npm:^1.1.9": version: 1.2.0 resolution: "run-parallel@npm:1.2.0" @@ -36239,6 +37094,15 @@ __metadata: languageName: node linkType: hard +"rxjs@npm:^7.2.0, rxjs@npm:^7.8.0, rxjs@npm:^7.8.1": + version: 7.8.1 + resolution: "rxjs@npm:7.8.1" + dependencies: + tslib: ^2.1.0 + checksum: 3c49c1ecd66170b175c9cacf5cef67f8914dcbc7cd0162855538d365c83fea631167cacb644b3ce533b2ea0e9a4d0b12175186985f89d75abe73dbd8f7f06f68 + languageName: node + linkType: hard + "rxjs@npm:^7.5.1, rxjs@npm:^7.5.5": version: 7.5.6 resolution: "rxjs@npm:7.5.6" @@ -37020,6 +37884,13 @@ __metadata: languageName: node linkType: hard +"slugify@npm:^1.6.6": + version: 1.6.6 + resolution: "slugify@npm:1.6.6" + checksum: e7e63f08f389a371d6228bc19d64ec84360bf0a538333446cc49dbbf3971751a6d180d2f31551188dd007a65ca771e69f574e0283290a7825a818e90b75ef44d + languageName: node + linkType: hard + "slugify@npm:~1.4.7": version: 1.4.7 resolution: "slugify@npm:1.4.7" @@ -37543,6 +38414,15 @@ __metadata: languageName: node linkType: hard +"stdin-discarder@npm:^0.1.0": + version: 0.1.0 + resolution: "stdin-discarder@npm:0.1.0" + dependencies: + bl: ^5.0.0 + checksum: 3bbf7f8107e49c05b4a46bd739afdd34605cf1f06a038c8b2a33d034bf146344fc0ebc5149df1e6422510dd219971a220f25b1102413ef5128fe267683fbef9d + languageName: node + linkType: hard + "stealthy-require@npm:^1.1.1": version: 1.1.1 resolution: "stealthy-require@npm:1.1.1" @@ -37690,7 +38570,7 @@ __metadata: languageName: node linkType: hard -"string-length@npm:^4.0.1, string-length@npm:^4.0.2": +"string-length@npm:^4.0.1": version: 4.0.2 resolution: "string-length@npm:4.0.2" dependencies: @@ -37742,7 +38622,7 @@ __metadata: languageName: node linkType: hard -"string-width@npm:^5.0.0": +"string-width@npm:^5.0.0, string-width@npm:^5.0.1, string-width@npm:^5.1.2": version: 5.1.2 resolution: "string-width@npm:5.1.2" dependencies: @@ -37960,6 +38840,13 @@ __metadata: languageName: node linkType: hard +"strip-final-newline@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-final-newline@npm:3.0.0" + checksum: a771a17901427bac6293fd416db7577e2bc1c34a19d38351e9d5478c3c415f523f391003b42ed475f27e33a78233035df183525395f731d3bfb8cdcbd4da08ce + languageName: node + linkType: hard + "strip-indent@npm:^1.0.1": version: 1.0.1 resolution: "strip-indent@npm:1.0.1" @@ -38507,7 +39394,7 @@ __metadata: languageName: node linkType: hard -"terminal-link@npm:^2.0.0, terminal-link@npm:^2.1.1": +"terminal-link@npm:^2.0.0": version: 2.1.1 resolution: "terminal-link@npm:2.1.1" dependencies: @@ -38721,13 +39608,6 @@ __metadata: languageName: node linkType: hard -"tiny-spin@npm:^1.0.2": - version: 1.0.2 - resolution: "tiny-spin@npm:1.0.2" - checksum: 7881fc673047db453755695d59a864a87a10c807411235f0f79e321e94f9e57a6c8211236afa1ebd50f4668bb1f56f6636b17649809d1ec4a67b441312ceb4f9 - languageName: node - linkType: hard - "tinybench@npm:^2.3.1": version: 2.3.1 resolution: "tinybench@npm:2.3.1" @@ -38765,6 +39645,13 @@ __metadata: languageName: node linkType: hard +"titleize@npm:^3.0.0": + version: 3.0.0 + resolution: "titleize@npm:3.0.0" + checksum: 5ae6084ba299b5782f95e3fe85ea9f0fa4d74b8ae722b6b3208157e975589fbb27733aeba4e5080fa9314a856044ef52caa61b87caea4b1baade951a55c06336 + languageName: node + linkType: hard + "tmp@npm:^0.0.33": version: 0.0.33 resolution: "tmp@npm:0.0.33" @@ -39610,6 +40497,13 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:^2.13.0": + version: 2.19.0 + resolution: "type-fest@npm:2.19.0" + checksum: a5a7ecf2e654251613218c215c7493574594951c08e52ab9881c9df6a6da0aeca7528c213c622bc374b4e0cb5c443aa3ab758da4e3c959783ce884c3194e12cb + languageName: node + linkType: hard + "type-fest@npm:^3.6.0": version: 3.6.0 resolution: "type-fest@npm:3.6.0" @@ -39824,6 +40718,16 @@ __metadata: languageName: node linkType: hard +"typescript@npm:^5.0.4": + version: 5.0.4 + resolution: "typescript@npm:5.0.4" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 2f5bd1cead194905957cb34e220b1d6ff1662399adef8ec1864f74620922d860ee35b6e50eafb3b636ea6fd437195e454e1146cb630a4236b5095ed7617395c2 + languageName: node + linkType: hard + "typescript@patch:typescript@4.9.5#~builtin, typescript@patch:typescript@^4.9.3#~builtin, typescript@patch:typescript@^4.9.5#~builtin": version: 4.9.5 resolution: "typescript@patch:typescript@npm%3A4.9.5#~builtin::version=4.9.5&hash=7ad353" @@ -39844,6 +40748,16 @@ __metadata: languageName: node linkType: hard +"typescript@patch:typescript@^5.0.4#~builtin": + version: 5.0.4 + resolution: "typescript@patch:typescript@npm%3A5.0.4#~builtin::version=5.0.4&hash=7ad353" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: db16dd188048c172051825c7e6eea3e6bf577020625e5635fb8265d22683897d9ed7579b41a3a3e961fba5728c58e324d52041e9ca21d0dfc4bafa8bcf8e7a4b + languageName: node + linkType: hard + "ua-parser-js@npm:^0.7.30": version: 0.7.31 resolution: "ua-parser-js@npm:0.7.31" @@ -40181,6 +41095,13 @@ __metadata: languageName: node linkType: hard +"untildify@npm:^4.0.0": + version: 4.0.0 + resolution: "untildify@npm:4.0.0" + checksum: d758e624c707d49f76f7511d75d09a8eda7f2020d231ec52b67ff4896bcf7013be3f9522d8375f57e586e9a2e827f5641c7e06ee46ab9c435fc2b2b2e9de517a + languageName: node + linkType: hard + "upath@npm:^1.1.1": version: 1.2.0 resolution: "upath@npm:1.2.0" @@ -40496,15 +41417,6 @@ __metadata: languageName: node linkType: hard -"uuid@npm:3.4.0, uuid@npm:^3.2.1, uuid@npm:^3.3.2": - version: 3.4.0 - resolution: "uuid@npm:3.4.0" - bin: - uuid: ./bin/uuid - checksum: 1c13950df865c4f506ebfe0a24023571fa80edf2e62364297a537c80af09c618299797bbf2dbac6b1f8ae5ad182ba474b89db61e0e85839683991f7e08795347 - languageName: node - linkType: hard - "uuid@npm:8.0.0": version: 8.0.0 resolution: "uuid@npm:8.0.0" @@ -40514,6 +41426,15 @@ __metadata: languageName: node linkType: hard +"uuid@npm:^3.2.1, uuid@npm:^3.3.2": + version: 3.4.0 + resolution: "uuid@npm:3.4.0" + bin: + uuid: ./bin/uuid + checksum: 1c13950df865c4f506ebfe0a24023571fa80edf2e62364297a537c80af09c618299797bbf2dbac6b1f8ae5ad182ba474b89db61e0e85839683991f7e08795347 + languageName: node + linkType: hard + "uuid@npm:^8.3.0, uuid@npm:^8.3.1, uuid@npm:^8.3.2": version: 8.3.2 resolution: "uuid@npm:8.3.2" @@ -40623,6 +41544,13 @@ __metadata: languageName: node linkType: hard +"validator@npm:^13.9.0": + version: 13.9.0 + resolution: "validator@npm:13.9.0" + checksum: 0a0af4b37779671b53ef790aa9d36f71a605c9d41c6daf198d2a1051ce549bcdca3313fa3b52c8fa24577e1a4968ec9404ad8a928d3607d51bccef6d6e33bee7 + languageName: node + linkType: hard + "value-or-promise@npm:1.0.11": version: 1.0.11 resolution: "value-or-promise@npm:1.0.11" @@ -40916,6 +41844,21 @@ __metadata: languageName: node linkType: hard +"wait-on@npm:^7.0.1": + version: 7.0.1 + resolution: "wait-on@npm:7.0.1" + dependencies: + axios: ^0.27.2 + joi: ^17.7.0 + lodash: ^4.17.21 + minimist: ^1.2.7 + rxjs: ^7.8.0 + bin: + wait-on: bin/wait-on + checksum: 2a9c56d26dac573e6bfd36e85d99f072021c23dc2c0faab900a411460b58e16982b96b018d9168c366040f56196314fa46f3d79ef19e3dc38f55824d5035f2ec + languageName: node + linkType: hard + "walker@npm:^1.0.7, walker@npm:^1.0.8, walker@npm:~1.0.5": version: 1.0.8 resolution: "walker@npm:1.0.8" @@ -41000,6 +41943,13 @@ __metadata: languageName: node linkType: hard +"web-streams-polyfill@npm:^3.0.3": + version: 3.2.1 + resolution: "web-streams-polyfill@npm:3.2.1" + checksum: 70ed6b5708e14afa2ab699221ea197d7c68ec0c8274bbe0181aecc5ba636ca27cbd383d2049f0eb9d529e738f5c088825502b317f3df24d18a278e4cc9a10e8b + languageName: node + linkType: hard + "webidl-conversions@npm:^3.0.0": version: 3.0.1 resolution: "webidl-conversions@npm:3.0.1" @@ -41387,6 +42337,15 @@ __metadata: languageName: node linkType: hard +"widest-line@npm:^4.0.1": + version: 4.0.1 + resolution: "widest-line@npm:4.0.1" + dependencies: + string-width: ^5.0.1 + checksum: 7da9525ba45eaf3e4ed1a20f3dcb9b85bd9443962450694dae950f4bdd752839747bbc14713522b0b93080007de8e8af677a61a8c2114aa553ad52bde72d0f9c + languageName: node + linkType: hard + "wildcard@npm:^2.0.0": version: 2.0.0 resolution: "wildcard@npm:2.0.0" @@ -41456,7 +42415,7 @@ __metadata: languageName: node linkType: hard -"wrap-ansi@npm:^6.2.0": +"wrap-ansi@npm:^6.0.1, wrap-ansi@npm:^6.2.0": version: 6.2.0 resolution: "wrap-ansi@npm:6.2.0" dependencies: @@ -41478,6 +42437,17 @@ __metadata: languageName: node linkType: hard +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: ^6.1.0 + string-width: ^5.0.1 + strip-ansi: ^7.0.1 + checksum: 138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 + languageName: node + linkType: hard + "wrappy@npm:1": version: 1.0.2 resolution: "wrappy@npm:1.0.2"