feat(create-medusa-app,medusa-cli): Allow clearing project (#4273)
- Added build step - Added `--no-boilerplate` option to `create-medusa-app` to allow clearing onboarding files - Clear project files by default in medusa-cli
This commit is contained in:
1 parent
f8643361cd
commit
f98ba5bde8
18 files changed
+581
-86
No files matched your search
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
"create-medusa-app": patch
|
||||||
|
"@medusajs/medusa-cli": patch
|
||||||
|
"@medusajs/utils": patch
|
||||||
|
---
|
||||||
|
|
||||||
|
feat(create-medusa-app,medusa-cli): Allow clearing project
|
||||||
@@ -13,12 +13,15 @@
|
|||||||
"prepare": "cross-env NODE_ENV=production yarn run build"
|
"prepare": "cross-env NODE_ENV=production yarn run build"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@medusajs/utils": "^1.9.0",
|
||||||
"boxen": "^7.1.0",
|
"boxen": "^7.1.0",
|
||||||
"chalk": "^5.2.0",
|
"chalk": "^5.2.0",
|
||||||
"commander": "^10.0.1",
|
"commander": "^10.0.1",
|
||||||
|
"glob": "^10.2.7",
|
||||||
"inquirer": "^9.2.2",
|
"inquirer": "^9.2.2",
|
||||||
"medusa-telemetry": "^0.0.16",
|
"medusa-telemetry": "^0.0.16",
|
||||||
"nanoid": "^4.0.2",
|
"nanoid": "^4.0.2",
|
||||||
|
"node-emoji": "^2.0.2",
|
||||||
"node-fetch": "^3.3.1",
|
"node-fetch": "^3.3.1",
|
||||||
"open": "^9.1.0",
|
"open": "^9.1.0",
|
||||||
"ora": "^6.3.0",
|
"ora": "^6.3.0",
|
||||||
@@ -33,6 +36,7 @@
|
|||||||
"@types/commander": "^2.12.2",
|
"@types/commander": "^2.12.2",
|
||||||
"@types/configstore": "^6.0.0",
|
"@types/configstore": "^6.0.0",
|
||||||
"@types/inquirer": "^9.0.3",
|
"@types/inquirer": "^9.0.3",
|
||||||
|
"@types/node-emoji": "^1.8.2",
|
||||||
"@types/pg": "^8.6.6",
|
"@types/pg": "^8.6.6",
|
||||||
"@types/uuid": "^9.0.1",
|
"@types/uuid": "^9.0.1",
|
||||||
"@types/validator": "^13.7.17",
|
"@types/validator": "^13.7.17",
|
||||||
|
|||||||
@@ -15,13 +15,14 @@ import fs from "fs"
|
|||||||
import { nanoid } from "nanoid"
|
import { nanoid } from "nanoid"
|
||||||
import isEmailImported from "validator/lib/isEmail.js"
|
import isEmailImported from "validator/lib/isEmail.js"
|
||||||
import logMessage from "../utils/log-message.js"
|
import logMessage from "../utils/log-message.js"
|
||||||
import onProcessTerminated from "../utils/on-process-terminated.js"
|
|
||||||
import createAbortController, {
|
import createAbortController, {
|
||||||
isAbortError,
|
isAbortError,
|
||||||
} from "../utils/create-abort-controller.js"
|
} from "../utils/create-abort-controller.js"
|
||||||
import { track } from "medusa-telemetry"
|
import { track } from "medusa-telemetry"
|
||||||
import { createFactBox, resetFactBox } from "../utils/facts.js"
|
import { createFactBox, resetFactBox } from "../utils/facts.js"
|
||||||
import boxen from "boxen"
|
import boxen from "boxen"
|
||||||
|
import { emojify } from "node-emoji"
|
||||||
|
import ProcessManager from "../utils/process-manager.js"
|
||||||
|
|
||||||
const slugify = slugifyType.default
|
const slugify = slugifyType.default
|
||||||
const isEmail = isEmailImported.default
|
const isEmail = isEmailImported.default
|
||||||
@@ -29,9 +30,11 @@ const isEmail = isEmailImported.default
|
|||||||
type CreateOptions = {
|
type CreateOptions = {
|
||||||
repoUrl?: string
|
repoUrl?: string
|
||||||
seed?: boolean
|
seed?: boolean
|
||||||
|
// commander passed --no-boilerplate as boilerplate
|
||||||
|
boilerplate?: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
export default async ({ repoUrl = "", seed }: CreateOptions) => {
|
export default async ({ repoUrl = "", seed, boilerplate }: CreateOptions) => {
|
||||||
track("CREATE_CLI")
|
track("CREATE_CLI")
|
||||||
if (repoUrl) {
|
if (repoUrl) {
|
||||||
track("STARTER_SELECTED", { starter: repoUrl })
|
track("STARTER_SELECTED", { starter: repoUrl })
|
||||||
@@ -39,7 +42,8 @@ export default async ({ repoUrl = "", seed }: CreateOptions) => {
|
|||||||
if (seed) {
|
if (seed) {
|
||||||
track("SEED_SELECTED", { seed })
|
track("SEED_SELECTED", { seed })
|
||||||
}
|
}
|
||||||
const abortController = createAbortController()
|
const processManager = new ProcessManager()
|
||||||
|
const abortController = createAbortController(processManager)
|
||||||
|
|
||||||
const { projectName } = await inquirer.prompt([
|
const { projectName } = await inquirer.prompt([
|
||||||
{
|
{
|
||||||
@@ -114,7 +118,7 @@ export default async ({ repoUrl = "", seed }: CreateOptions) => {
|
|||||||
type: "input",
|
type: "input",
|
||||||
name: "adminEmail",
|
name: "adminEmail",
|
||||||
message: "Enter an email for your admin dashboard user",
|
message: "Enter an email for your admin dashboard user",
|
||||||
default: !seed ? "admin@medusa-test.com" : undefined,
|
default: !seed && boilerplate ? "admin@medusa-test.com" : undefined,
|
||||||
validate: (input) => {
|
validate: (input) => {
|
||||||
return typeof input === "string" && input.length > 0 && isEmail(input)
|
return typeof input === "string" && input.length > 0 && isEmail(input)
|
||||||
? true
|
? true
|
||||||
@@ -123,13 +127,20 @@ export default async ({ repoUrl = "", seed }: CreateOptions) => {
|
|||||||
},
|
},
|
||||||
])
|
])
|
||||||
|
|
||||||
|
logMessage({
|
||||||
|
message: `${emojify(
|
||||||
|
":rocket:"
|
||||||
|
)} Starting project setup, this may take a few minutes.`,
|
||||||
|
})
|
||||||
|
|
||||||
const spinner = ora().start()
|
const spinner = ora().start()
|
||||||
|
|
||||||
onProcessTerminated(() => spinner.stop())
|
processManager.onTerminated(() => spinner.stop())
|
||||||
|
|
||||||
let interval: NodeJS.Timer | null = createFactBox(
|
let interval: NodeJS.Timer | null = createFactBox(
|
||||||
spinner,
|
spinner,
|
||||||
"Setting up project..."
|
"Setting up project...",
|
||||||
|
processManager
|
||||||
)
|
)
|
||||||
|
|
||||||
// clone repository
|
// clone repository
|
||||||
@@ -155,6 +166,7 @@ export default async ({ repoUrl = "", seed }: CreateOptions) => {
|
|||||||
interval,
|
interval,
|
||||||
spinner,
|
spinner,
|
||||||
"Created project directory",
|
"Created project directory",
|
||||||
|
processManager,
|
||||||
"Creating database..."
|
"Creating database..."
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -182,7 +194,12 @@ export default async ({ repoUrl = "", seed }: CreateOptions) => {
|
|||||||
db: dbName,
|
db: dbName,
|
||||||
})
|
})
|
||||||
|
|
||||||
resetFactBox(interval, spinner, `Database ${dbName} created`)
|
resetFactBox(
|
||||||
|
interval,
|
||||||
|
spinner,
|
||||||
|
`Database ${dbName} created`,
|
||||||
|
processManager
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// prepare project
|
// prepare project
|
||||||
@@ -195,7 +212,9 @@ export default async ({ repoUrl = "", seed }: CreateOptions) => {
|
|||||||
email: adminEmail,
|
email: adminEmail,
|
||||||
},
|
},
|
||||||
seed,
|
seed,
|
||||||
|
boilerplate,
|
||||||
spinner,
|
spinner,
|
||||||
|
processManager,
|
||||||
abortController,
|
abortController,
|
||||||
})
|
})
|
||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
@@ -240,19 +259,13 @@ export default async ({ repoUrl = "", seed }: CreateOptions) => {
|
|||||||
// this ensures that the message isn't printed twice to the user
|
// this ensures that the message isn't printed twice to the user
|
||||||
let printedMessage = false
|
let printedMessage = false
|
||||||
|
|
||||||
onProcessTerminated(() => {
|
processManager.onTerminated(() => {
|
||||||
if (!printedMessage) {
|
if (!printedMessage) {
|
||||||
printedMessage = true
|
printedMessage = true
|
||||||
console.log(
|
console.log(
|
||||||
boxen(
|
boxen(
|
||||||
chalk.green(
|
chalk.green(
|
||||||
`Change to the \`${projectName}\` directory to explore your Medusa project.
|
`Change to the \`${projectName}\` directory to explore your Medusa project.\n\nStart your Medusa app again with the following command:\n\nnpx @medusajs/medusa-cli develop\n\nCheck out the Medusa documentation to start your development:\n\nhttps://docs.medusajs.com/\n\nStar us on GitHub if you like what we're building:\n\nhttps://github.com/medusajs/medusa/stargazers`
|
||||||
|
|
||||||
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",
|
titleAlignment: "center",
|
||||||
@@ -271,8 +284,8 @@ export default async ({ repoUrl = "", seed }: CreateOptions) => {
|
|||||||
}).then(async () =>
|
}).then(async () =>
|
||||||
open(
|
open(
|
||||||
inviteToken
|
inviteToken
|
||||||
? `http://localhost:9000/app/invite?token=${inviteToken}&first_run=true`
|
? `http://localhost:7001/invite?token=${inviteToken}&first_run=true`
|
||||||
: "http://localhost:9000/app"
|
: "http://localhost:7001"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -6,6 +6,10 @@ program
|
|||||||
.description("Create a new Medusa project")
|
.description("Create a new Medusa project")
|
||||||
.option("--repo-url <url>", "URL of repository to use to setup project.")
|
.option("--repo-url <url>", "URL of repository to use to setup project.")
|
||||||
.option("--seed", "Seed the created database with demo data.")
|
.option("--seed", "Seed the created database with demo data.")
|
||||||
|
.option(
|
||||||
|
"--no-boilerplate",
|
||||||
|
"Install a Medusa project without the boilerplate and demo files."
|
||||||
|
)
|
||||||
.parse()
|
.parse()
|
||||||
|
|
||||||
void create(program.opts())
|
void create(program.opts())
|
||||||
@@ -6,7 +6,6 @@ type CloneRepoOptions = {
|
|||||||
abortController?: AbortController
|
abortController?: AbortController
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO change default repo URL
|
|
||||||
const DEFAULT_REPO = "https://github.com/medusajs/medusa-starter-default"
|
const DEFAULT_REPO = "https://github.com/medusajs/medusa-starter-default"
|
||||||
|
|
||||||
export default async ({
|
export default async ({
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import onProcessTerminated from "./on-process-terminated.js"
|
import ProcessManager from "./process-manager.js"
|
||||||
|
|
||||||
export default () => {
|
export default (processManager: ProcessManager) => {
|
||||||
const abortController = new AbortController()
|
const abortController = new AbortController()
|
||||||
onProcessTerminated(() => abortController.abort())
|
processManager.onTerminated(() => abortController.abort())
|
||||||
return abortController
|
return abortController
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
import boxen from "boxen"
|
import boxen from "boxen"
|
||||||
import chalk from "chalk"
|
import chalk from "chalk"
|
||||||
import { Ora } from "ora"
|
import { Ora } from "ora"
|
||||||
import onProcessTerminated from "./on-process-terminated.js"
|
import { emojify } from "node-emoji"
|
||||||
|
import ProcessManager from "./process-manager.js"
|
||||||
|
|
||||||
const facts = [
|
const facts = [
|
||||||
"Plugins allow you to integrate third-party services for payment, fulfillment, notifications, and more.",
|
"Plugins allow you to integrate third-party services for payment, fulfillment, notifications, and more.",
|
||||||
@@ -31,17 +32,20 @@ export const getFact = () => {
|
|||||||
|
|
||||||
export const showFact = (spinner: Ora, title: string) => {
|
export const showFact = (spinner: Ora, title: string) => {
|
||||||
const fact = getFact()
|
const fact = getFact()
|
||||||
spinner.text = `${boxen(fact, {
|
spinner.text = `${boxen(`${emojify(":bulb:")} Medusa Tips\n\n${fact}`, {
|
||||||
title: chalk.cyan(title),
|
title: chalk.cyan(title),
|
||||||
titleAlignment: "center",
|
titleAlignment: "center",
|
||||||
textAlignment: "center",
|
textAlignment: "center",
|
||||||
padding: 1,
|
padding: 1,
|
||||||
margin: 1,
|
margin: 1,
|
||||||
float: "center",
|
|
||||||
})}`
|
})}`
|
||||||
}
|
}
|
||||||
|
|
||||||
export const createFactBox = (spinner: Ora, title: string): NodeJS.Timer => {
|
export const createFactBox = (
|
||||||
|
spinner: Ora,
|
||||||
|
title: string,
|
||||||
|
processManager: ProcessManager
|
||||||
|
): NodeJS.Timer => {
|
||||||
spinner.spinner = {
|
spinner.spinner = {
|
||||||
frames: [""],
|
frames: [""],
|
||||||
}
|
}
|
||||||
@@ -50,7 +54,7 @@ export const createFactBox = (spinner: Ora, title: string): NodeJS.Timer => {
|
|||||||
showFact(spinner, title)
|
showFact(spinner, title)
|
||||||
}, 10000)
|
}, 10000)
|
||||||
|
|
||||||
onProcessTerminated(() => clearInterval(interval))
|
processManager.addInterval(interval)
|
||||||
|
|
||||||
return interval
|
return interval
|
||||||
}
|
}
|
||||||
@@ -59,6 +63,7 @@ export const resetFactBox = (
|
|||||||
interval: NodeJS.Timer | null,
|
interval: NodeJS.Timer | null,
|
||||||
spinner: Ora,
|
spinner: Ora,
|
||||||
successMessage: string,
|
successMessage: string,
|
||||||
|
processManager: ProcessManager,
|
||||||
newTitle?: string
|
newTitle?: string
|
||||||
): NodeJS.Timer | null => {
|
): NodeJS.Timer | null => {
|
||||||
if (interval) {
|
if (interval) {
|
||||||
@@ -69,7 +74,7 @@ export const resetFactBox = (
|
|||||||
spinner.succeed(chalk.green(successMessage)).start()
|
spinner.succeed(chalk.green(successMessage)).start()
|
||||||
let newInterval = null
|
let newInterval = null
|
||||||
if (newTitle) {
|
if (newTitle) {
|
||||||
newInterval = createFactBox(spinner, newTitle)
|
newInterval = createFactBox(spinner, newTitle, processManager)
|
||||||
}
|
}
|
||||||
|
|
||||||
return newInterval
|
return newInterval
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
export default (fn: Function) => {
|
|
||||||
process.on("SIGTERM", () => fn())
|
|
||||||
process.on("SIGINT", () => fn())
|
|
||||||
}
|
|
||||||
@@ -4,8 +4,9 @@ import path from "path"
|
|||||||
import { Ora } from "ora"
|
import { Ora } from "ora"
|
||||||
import promiseExec from "./promise-exec.js"
|
import promiseExec from "./promise-exec.js"
|
||||||
import { EOL } from "os"
|
import { EOL } from "os"
|
||||||
import runProcess from "./run-process.js"
|
|
||||||
import { createFactBox, resetFactBox } from "./facts.js"
|
import { createFactBox, resetFactBox } from "./facts.js"
|
||||||
|
import { clearProject } from "@medusajs/utils"
|
||||||
|
import ProcessManager from "./process-manager.js"
|
||||||
|
|
||||||
type PrepareOptions = {
|
type PrepareOptions = {
|
||||||
directory: string
|
directory: string
|
||||||
@@ -14,7 +15,9 @@ type PrepareOptions = {
|
|||||||
email: string
|
email: string
|
||||||
}
|
}
|
||||||
seed?: boolean
|
seed?: boolean
|
||||||
|
boilerplate?: boolean
|
||||||
spinner: Ora
|
spinner: Ora
|
||||||
|
processManager: ProcessManager
|
||||||
abortController?: AbortController
|
abortController?: AbortController
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -23,7 +26,9 @@ export default async ({
|
|||||||
dbConnectionString,
|
dbConnectionString,
|
||||||
admin,
|
admin,
|
||||||
seed,
|
seed,
|
||||||
|
boilerplate,
|
||||||
spinner,
|
spinner,
|
||||||
|
processManager,
|
||||||
abortController,
|
abortController,
|
||||||
}: PrepareOptions) => {
|
}: PrepareOptions) => {
|
||||||
// initialize execution options
|
// initialize execution options
|
||||||
@@ -43,10 +48,11 @@ export default async ({
|
|||||||
|
|
||||||
let interval: NodeJS.Timer | null = createFactBox(
|
let interval: NodeJS.Timer | null = createFactBox(
|
||||||
spinner,
|
spinner,
|
||||||
"Installing dependencies..."
|
"Installing dependencies...",
|
||||||
|
processManager
|
||||||
)
|
)
|
||||||
|
|
||||||
await runProcess({
|
await processManager.runProcess({
|
||||||
process: async () => {
|
process: async () => {
|
||||||
try {
|
try {
|
||||||
await promiseExec(`yarn`, execOptions)
|
await promiseExec(`yarn`, execOptions)
|
||||||
@@ -63,26 +69,73 @@ export default async ({
|
|||||||
interval,
|
interval,
|
||||||
spinner,
|
spinner,
|
||||||
"Installed Dependencies",
|
"Installed Dependencies",
|
||||||
"Running Migrations...."
|
processManager
|
||||||
)
|
)
|
||||||
|
|
||||||
// run migrations
|
if (!boilerplate) {
|
||||||
await runProcess({
|
interval = createFactBox(
|
||||||
|
spinner,
|
||||||
|
"Preparing Project Directory...",
|
||||||
|
processManager
|
||||||
|
)
|
||||||
|
// delete files and directories related to onboarding
|
||||||
|
clearProject(directory)
|
||||||
|
interval = resetFactBox(
|
||||||
|
interval,
|
||||||
|
spinner,
|
||||||
|
"Prepared Project Directory",
|
||||||
|
processManager
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
interval = createFactBox(spinner, "Building Project...", processManager)
|
||||||
|
await processManager.runProcess({
|
||||||
process: async () => {
|
process: async () => {
|
||||||
await promiseExec(
|
try {
|
||||||
|
await promiseExec(`yarn build`, execOptions)
|
||||||
|
} catch (e) {
|
||||||
|
// yarn isn't available
|
||||||
|
// use npm
|
||||||
|
await promiseExec(`npm run build`, execOptions)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ignoreERESOLVE: true,
|
||||||
|
})
|
||||||
|
|
||||||
|
interval = resetFactBox(interval, spinner, "Project Built", processManager)
|
||||||
|
|
||||||
|
interval = createFactBox(spinner, "Running Migrations...", processManager)
|
||||||
|
|
||||||
|
// run migrations
|
||||||
|
await processManager.runProcess({
|
||||||
|
process: async () => {
|
||||||
|
const proc = await promiseExec(
|
||||||
"npx -y @medusajs/medusa-cli@latest migrations run",
|
"npx -y @medusajs/medusa-cli@latest migrations run",
|
||||||
execOptions
|
execOptions
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// ensure that migrations actually ran in case of an uncaught error
|
||||||
|
if (!proc.stdout.includes("Migrations completed")) {
|
||||||
|
throw new Error(
|
||||||
|
`An error occurred while running migrations: ${
|
||||||
|
proc.stderr || proc.stdout
|
||||||
|
}`
|
||||||
|
)
|
||||||
|
}
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
interval = resetFactBox(interval, spinner, "Ran Migrations")
|
interval = resetFactBox(interval, spinner, "Ran Migrations", processManager)
|
||||||
|
|
||||||
if (admin) {
|
if (admin) {
|
||||||
// create admin user
|
// create admin user
|
||||||
interval = createFactBox(spinner, "Creating an admin user...")
|
interval = createFactBox(
|
||||||
|
spinner,
|
||||||
|
"Creating an admin user...",
|
||||||
|
processManager
|
||||||
|
)
|
||||||
|
|
||||||
await runProcess({
|
await processManager.runProcess({
|
||||||
process: async () => {
|
process: async () => {
|
||||||
const proc = await promiseExec(
|
const proc = await promiseExec(
|
||||||
`npx -y @medusajs/medusa-cli@latest user -e ${admin.email} --invite`,
|
`npx -y @medusajs/medusa-cli@latest user -e ${admin.email} --invite`,
|
||||||
@@ -94,11 +147,16 @@ export default async ({
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
interval = resetFactBox(interval, spinner, "Created admin user")
|
interval = resetFactBox(
|
||||||
|
interval,
|
||||||
|
spinner,
|
||||||
|
"Created admin user",
|
||||||
|
processManager
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (seed) {
|
if (seed || !boilerplate) {
|
||||||
interval = createFactBox(spinner, "Seeding database...")
|
interval = createFactBox(spinner, "Seeding database...", processManager)
|
||||||
|
|
||||||
// check if a seed file exists in the project
|
// check if a seed file exists in the project
|
||||||
if (!fs.existsSync(path.join(directory, "data", "seed.json"))) {
|
if (!fs.existsSync(path.join(directory, "data", "seed.json"))) {
|
||||||
@@ -112,7 +170,7 @@ export default async ({
|
|||||||
return inviteToken
|
return inviteToken
|
||||||
}
|
}
|
||||||
|
|
||||||
await runProcess({
|
await processManager.runProcess({
|
||||||
process: async () => {
|
process: async () => {
|
||||||
await promiseExec(
|
await promiseExec(
|
||||||
`npx -y @medusajs/medusa-cli@latest seed --seed-file=${path.join(
|
`npx -y @medusajs/medusa-cli@latest seed --seed-file=${path.join(
|
||||||
@@ -123,14 +181,19 @@ export default async ({
|
|||||||
)
|
)
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
resetFactBox(interval, spinner, "Seeded database with demo data")
|
resetFactBox(
|
||||||
|
interval,
|
||||||
|
spinner,
|
||||||
|
"Seeded database with demo data",
|
||||||
|
processManager
|
||||||
|
)
|
||||||
} else if (
|
} else if (
|
||||||
fs.existsSync(path.join(directory, "data", "seed-onboarding.json"))
|
fs.existsSync(path.join(directory, "data", "seed-onboarding.json"))
|
||||||
) {
|
) {
|
||||||
// seed the database with onboarding seed
|
// seed the database with onboarding seed
|
||||||
interval = createFactBox(spinner, "Finish preparation...")
|
interval = createFactBox(spinner, "Finish preparation...", processManager)
|
||||||
|
|
||||||
await runProcess({
|
await processManager.runProcess({
|
||||||
process: async () => {
|
process: async () => {
|
||||||
await promiseExec(
|
await promiseExec(
|
||||||
`npx -y @medusajs/medusa-cli@latest seed --seed-file=${path.join(
|
`npx -y @medusajs/medusa-cli@latest seed --seed-file=${path.join(
|
||||||
@@ -141,7 +204,7 @@ export default async ({
|
|||||||
)
|
)
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
resetFactBox(interval, spinner, "Finished Preparation")
|
resetFactBox(interval, spinner, "Finished Preparation", processManager)
|
||||||
}
|
}
|
||||||
|
|
||||||
return inviteToken
|
return inviteToken
|
||||||
|
|||||||
@@ -0,0 +1,60 @@
|
|||||||
|
type ProcessOptions = {
|
||||||
|
process: Function
|
||||||
|
ignoreERESOLVE?: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
export default class ProcessManager {
|
||||||
|
intervals: NodeJS.Timer[] = []
|
||||||
|
static MAX_RETRIES = 3
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
this.onTerminated(() => {
|
||||||
|
this.intervals.forEach((interval) => {
|
||||||
|
clearInterval(interval)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
onTerminated(fn: Function) {
|
||||||
|
process.on("SIGTERM", () => fn())
|
||||||
|
process.on("SIGINT", () => fn())
|
||||||
|
}
|
||||||
|
|
||||||
|
addInterval(interval: NodeJS.Timer) {
|
||||||
|
this.intervals.push(interval)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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
|
||||||
|
async runProcess({ process, ignoreERESOLVE }: ProcessOptions) {
|
||||||
|
let processError = false
|
||||||
|
let retries = 0
|
||||||
|
do {
|
||||||
|
retries++
|
||||||
|
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 && retries <= ProcessManager.MAX_RETRIES)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
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)
|
|
||||||
}
|
|
||||||
@@ -45,6 +45,7 @@
|
|||||||
"execa": "^5.1.1",
|
"execa": "^5.1.1",
|
||||||
"fs-exists-cached": "^1.0.0",
|
"fs-exists-cached": "^1.0.0",
|
||||||
"fs-extra": "^10.0.0",
|
"fs-extra": "^10.0.0",
|
||||||
|
"glob": "^10.2.7",
|
||||||
"hosted-git-info": "^4.0.2",
|
"hosted-git-info": "^4.0.2",
|
||||||
"inquirer": "^8.0.0",
|
"inquirer": "^8.0.0",
|
||||||
"is-valid-path": "^0.1.1",
|
"is-valid-path": "^0.1.1",
|
||||||
|
|||||||
@@ -15,9 +15,11 @@ import url from "url"
|
|||||||
import { createDatabase } from "pg-god"
|
import { createDatabase } from "pg-god"
|
||||||
import { track } from "medusa-telemetry"
|
import { track } from "medusa-telemetry"
|
||||||
import inquirer from "inquirer"
|
import inquirer from "inquirer"
|
||||||
|
import { globSync } from "glob"
|
||||||
|
|
||||||
import reporter from "../reporter"
|
import reporter from "../reporter"
|
||||||
import { getPackageManager, setPackageManager } from "../util/package-manager"
|
import { getPackageManager, setPackageManager } from "../util/package-manager"
|
||||||
|
import { clearProject } from "@medusajs/utils"
|
||||||
|
|
||||||
const removeUndefined = (obj) => {
|
const removeUndefined = (obj) => {
|
||||||
return Object.fromEntries(
|
return Object.fromEntries(
|
||||||
@@ -632,6 +634,12 @@ medusa new ${rootPath} [url-to-starter]
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!selectedOtherStarter) {
|
||||||
|
reporter.info("Final project preparations...")
|
||||||
|
// remove demo files
|
||||||
|
clearProject(rootPath)
|
||||||
|
}
|
||||||
|
|
||||||
successMessage(rootPath)
|
successMessage(rootPath)
|
||||||
track("CLI_NEW_SUCCEEDED")
|
track("CLI_NEW_SUCCEEDED")
|
||||||
}
|
}
|
||||||
@@ -27,6 +27,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"awilix": "^8.0.1",
|
"awilix": "^8.0.1",
|
||||||
|
"glob": "^10.2.7",
|
||||||
"ulid": "^2.3.0"
|
"ulid": "^2.3.0"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
import fs from "fs"
|
||||||
|
import path from "path"
|
||||||
|
import { globSync } from "glob"
|
||||||
|
|
||||||
|
export function clearProject (directory: string) {
|
||||||
|
const files = globSync([
|
||||||
|
path.join(directory, `src`, `admin/**/*`),
|
||||||
|
path.join(directory, `src`, `**/onboarding/`),
|
||||||
|
path.join(directory, `src`, `types`),
|
||||||
|
path.join(directory, `src`, `**/*.{ts,tsx,js,jsx}`),
|
||||||
|
])
|
||||||
|
files.forEach((file) =>
|
||||||
|
fs.rmSync(file, {
|
||||||
|
recursive: true,
|
||||||
|
force: true,
|
||||||
|
})
|
||||||
|
)
|
||||||
|
// add empty typescript file to avoid build errors
|
||||||
|
fs.openSync(path.join(directory, "src", "index.ts"), "w")
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
export * from "./clear-project"
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
export * from "./bundles"
|
export * from "./bundles"
|
||||||
|
export * from "./cli"
|
||||||
export * from "./common"
|
export * from "./common"
|
||||||
export * from "./decorators"
|
export * from "./decorators"
|
||||||
export * from "./event-bus"
|
export * from "./event-bus"
|
||||||
|
|||||||
@@ -3246,6 +3246,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@esbuild/android-arm64@npm:0.17.19":
|
||||||
|
version: 0.17.19
|
||||||
|
resolution: "@esbuild/android-arm64@npm:0.17.19"
|
||||||
|
conditions: os=android & cpu=arm64
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/android-arm@npm:0.15.18":
|
"@esbuild/android-arm@npm:0.15.18":
|
||||||
version: 0.15.18
|
version: 0.15.18
|
||||||
resolution: "@esbuild/android-arm@npm:0.15.18"
|
resolution: "@esbuild/android-arm@npm:0.15.18"
|
||||||
@@ -3260,6 +3267,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@esbuild/android-arm@npm:0.17.19":
|
||||||
|
version: 0.17.19
|
||||||
|
resolution: "@esbuild/android-arm@npm:0.17.19"
|
||||||
|
conditions: os=android & cpu=arm
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/android-x64@npm:0.16.17":
|
"@esbuild/android-x64@npm:0.16.17":
|
||||||
version: 0.16.17
|
version: 0.16.17
|
||||||
resolution: "@esbuild/android-x64@npm:0.16.17"
|
resolution: "@esbuild/android-x64@npm:0.16.17"
|
||||||
@@ -3267,6 +3281,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@esbuild/android-x64@npm:0.17.19":
|
||||||
|
version: 0.17.19
|
||||||
|
resolution: "@esbuild/android-x64@npm:0.17.19"
|
||||||
|
conditions: os=android & cpu=x64
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/darwin-arm64@npm:0.16.17":
|
"@esbuild/darwin-arm64@npm:0.16.17":
|
||||||
version: 0.16.17
|
version: 0.16.17
|
||||||
resolution: "@esbuild/darwin-arm64@npm:0.16.17"
|
resolution: "@esbuild/darwin-arm64@npm:0.16.17"
|
||||||
@@ -3274,6 +3295,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@esbuild/darwin-arm64@npm:0.17.19":
|
||||||
|
version: 0.17.19
|
||||||
|
resolution: "@esbuild/darwin-arm64@npm:0.17.19"
|
||||||
|
conditions: os=darwin & cpu=arm64
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/darwin-x64@npm:0.16.17":
|
"@esbuild/darwin-x64@npm:0.16.17":
|
||||||
version: 0.16.17
|
version: 0.16.17
|
||||||
resolution: "@esbuild/darwin-x64@npm:0.16.17"
|
resolution: "@esbuild/darwin-x64@npm:0.16.17"
|
||||||
@@ -3281,6 +3309,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@esbuild/darwin-x64@npm:0.17.19":
|
||||||
|
version: 0.17.19
|
||||||
|
resolution: "@esbuild/darwin-x64@npm:0.17.19"
|
||||||
|
conditions: os=darwin & cpu=x64
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/freebsd-arm64@npm:0.16.17":
|
"@esbuild/freebsd-arm64@npm:0.16.17":
|
||||||
version: 0.16.17
|
version: 0.16.17
|
||||||
resolution: "@esbuild/freebsd-arm64@npm:0.16.17"
|
resolution: "@esbuild/freebsd-arm64@npm:0.16.17"
|
||||||
@@ -3288,6 +3323,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@esbuild/freebsd-arm64@npm:0.17.19":
|
||||||
|
version: 0.17.19
|
||||||
|
resolution: "@esbuild/freebsd-arm64@npm:0.17.19"
|
||||||
|
conditions: os=freebsd & cpu=arm64
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/freebsd-x64@npm:0.16.17":
|
"@esbuild/freebsd-x64@npm:0.16.17":
|
||||||
version: 0.16.17
|
version: 0.16.17
|
||||||
resolution: "@esbuild/freebsd-x64@npm:0.16.17"
|
resolution: "@esbuild/freebsd-x64@npm:0.16.17"
|
||||||
@@ -3295,6 +3337,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@esbuild/freebsd-x64@npm:0.17.19":
|
||||||
|
version: 0.17.19
|
||||||
|
resolution: "@esbuild/freebsd-x64@npm:0.17.19"
|
||||||
|
conditions: os=freebsd & cpu=x64
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/linux-arm64@npm:0.16.17":
|
"@esbuild/linux-arm64@npm:0.16.17":
|
||||||
version: 0.16.17
|
version: 0.16.17
|
||||||
resolution: "@esbuild/linux-arm64@npm:0.16.17"
|
resolution: "@esbuild/linux-arm64@npm:0.16.17"
|
||||||
@@ -3302,6 +3351,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@esbuild/linux-arm64@npm:0.17.19":
|
||||||
|
version: 0.17.19
|
||||||
|
resolution: "@esbuild/linux-arm64@npm:0.17.19"
|
||||||
|
conditions: os=linux & cpu=arm64
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/linux-arm@npm:0.16.17":
|
"@esbuild/linux-arm@npm:0.16.17":
|
||||||
version: 0.16.17
|
version: 0.16.17
|
||||||
resolution: "@esbuild/linux-arm@npm:0.16.17"
|
resolution: "@esbuild/linux-arm@npm:0.16.17"
|
||||||
@@ -3309,6 +3365,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@esbuild/linux-arm@npm:0.17.19":
|
||||||
|
version: 0.17.19
|
||||||
|
resolution: "@esbuild/linux-arm@npm:0.17.19"
|
||||||
|
conditions: os=linux & cpu=arm
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/linux-ia32@npm:0.16.17":
|
"@esbuild/linux-ia32@npm:0.16.17":
|
||||||
version: 0.16.17
|
version: 0.16.17
|
||||||
resolution: "@esbuild/linux-ia32@npm:0.16.17"
|
resolution: "@esbuild/linux-ia32@npm:0.16.17"
|
||||||
@@ -3316,6 +3379,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@esbuild/linux-ia32@npm:0.17.19":
|
||||||
|
version: 0.17.19
|
||||||
|
resolution: "@esbuild/linux-ia32@npm:0.17.19"
|
||||||
|
conditions: os=linux & cpu=ia32
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/linux-loong64@npm:0.15.18":
|
"@esbuild/linux-loong64@npm:0.15.18":
|
||||||
version: 0.15.18
|
version: 0.15.18
|
||||||
resolution: "@esbuild/linux-loong64@npm:0.15.18"
|
resolution: "@esbuild/linux-loong64@npm:0.15.18"
|
||||||
@@ -3330,6 +3400,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@esbuild/linux-loong64@npm:0.17.19":
|
||||||
|
version: 0.17.19
|
||||||
|
resolution: "@esbuild/linux-loong64@npm:0.17.19"
|
||||||
|
conditions: os=linux & cpu=loong64
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/linux-mips64el@npm:0.16.17":
|
"@esbuild/linux-mips64el@npm:0.16.17":
|
||||||
version: 0.16.17
|
version: 0.16.17
|
||||||
resolution: "@esbuild/linux-mips64el@npm:0.16.17"
|
resolution: "@esbuild/linux-mips64el@npm:0.16.17"
|
||||||
@@ -3337,6 +3414,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@esbuild/linux-mips64el@npm:0.17.19":
|
||||||
|
version: 0.17.19
|
||||||
|
resolution: "@esbuild/linux-mips64el@npm:0.17.19"
|
||||||
|
conditions: os=linux & cpu=mips64el
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/linux-ppc64@npm:0.16.17":
|
"@esbuild/linux-ppc64@npm:0.16.17":
|
||||||
version: 0.16.17
|
version: 0.16.17
|
||||||
resolution: "@esbuild/linux-ppc64@npm:0.16.17"
|
resolution: "@esbuild/linux-ppc64@npm:0.16.17"
|
||||||
@@ -3344,6 +3428,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@esbuild/linux-ppc64@npm:0.17.19":
|
||||||
|
version: 0.17.19
|
||||||
|
resolution: "@esbuild/linux-ppc64@npm:0.17.19"
|
||||||
|
conditions: os=linux & cpu=ppc64
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/linux-riscv64@npm:0.16.17":
|
"@esbuild/linux-riscv64@npm:0.16.17":
|
||||||
version: 0.16.17
|
version: 0.16.17
|
||||||
resolution: "@esbuild/linux-riscv64@npm:0.16.17"
|
resolution: "@esbuild/linux-riscv64@npm:0.16.17"
|
||||||
@@ -3351,6 +3442,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@esbuild/linux-riscv64@npm:0.17.19":
|
||||||
|
version: 0.17.19
|
||||||
|
resolution: "@esbuild/linux-riscv64@npm:0.17.19"
|
||||||
|
conditions: os=linux & cpu=riscv64
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/linux-s390x@npm:0.16.17":
|
"@esbuild/linux-s390x@npm:0.16.17":
|
||||||
version: 0.16.17
|
version: 0.16.17
|
||||||
resolution: "@esbuild/linux-s390x@npm:0.16.17"
|
resolution: "@esbuild/linux-s390x@npm:0.16.17"
|
||||||
@@ -3358,6 +3456,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@esbuild/linux-s390x@npm:0.17.19":
|
||||||
|
version: 0.17.19
|
||||||
|
resolution: "@esbuild/linux-s390x@npm:0.17.19"
|
||||||
|
conditions: os=linux & cpu=s390x
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/linux-x64@npm:0.16.17":
|
"@esbuild/linux-x64@npm:0.16.17":
|
||||||
version: 0.16.17
|
version: 0.16.17
|
||||||
resolution: "@esbuild/linux-x64@npm:0.16.17"
|
resolution: "@esbuild/linux-x64@npm:0.16.17"
|
||||||
@@ -3365,6 +3470,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@esbuild/linux-x64@npm:0.17.19":
|
||||||
|
version: 0.17.19
|
||||||
|
resolution: "@esbuild/linux-x64@npm:0.17.19"
|
||||||
|
conditions: os=linux & cpu=x64
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/netbsd-x64@npm:0.16.17":
|
"@esbuild/netbsd-x64@npm:0.16.17":
|
||||||
version: 0.16.17
|
version: 0.16.17
|
||||||
resolution: "@esbuild/netbsd-x64@npm:0.16.17"
|
resolution: "@esbuild/netbsd-x64@npm:0.16.17"
|
||||||
@@ -3372,6 +3484,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@esbuild/netbsd-x64@npm:0.17.19":
|
||||||
|
version: 0.17.19
|
||||||
|
resolution: "@esbuild/netbsd-x64@npm:0.17.19"
|
||||||
|
conditions: os=netbsd & cpu=x64
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/openbsd-x64@npm:0.16.17":
|
"@esbuild/openbsd-x64@npm:0.16.17":
|
||||||
version: 0.16.17
|
version: 0.16.17
|
||||||
resolution: "@esbuild/openbsd-x64@npm:0.16.17"
|
resolution: "@esbuild/openbsd-x64@npm:0.16.17"
|
||||||
@@ -3379,6 +3498,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@esbuild/openbsd-x64@npm:0.17.19":
|
||||||
|
version: 0.17.19
|
||||||
|
resolution: "@esbuild/openbsd-x64@npm:0.17.19"
|
||||||
|
conditions: os=openbsd & cpu=x64
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/sunos-x64@npm:0.16.17":
|
"@esbuild/sunos-x64@npm:0.16.17":
|
||||||
version: 0.16.17
|
version: 0.16.17
|
||||||
resolution: "@esbuild/sunos-x64@npm:0.16.17"
|
resolution: "@esbuild/sunos-x64@npm:0.16.17"
|
||||||
@@ -3386,6 +3512,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@esbuild/sunos-x64@npm:0.17.19":
|
||||||
|
version: 0.17.19
|
||||||
|
resolution: "@esbuild/sunos-x64@npm:0.17.19"
|
||||||
|
conditions: os=sunos & cpu=x64
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/win32-arm64@npm:0.16.17":
|
"@esbuild/win32-arm64@npm:0.16.17":
|
||||||
version: 0.16.17
|
version: 0.16.17
|
||||||
resolution: "@esbuild/win32-arm64@npm:0.16.17"
|
resolution: "@esbuild/win32-arm64@npm:0.16.17"
|
||||||
@@ -3393,6 +3526,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@esbuild/win32-arm64@npm:0.17.19":
|
||||||
|
version: 0.17.19
|
||||||
|
resolution: "@esbuild/win32-arm64@npm:0.17.19"
|
||||||
|
conditions: os=win32 & cpu=arm64
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/win32-ia32@npm:0.16.17":
|
"@esbuild/win32-ia32@npm:0.16.17":
|
||||||
version: 0.16.17
|
version: 0.16.17
|
||||||
resolution: "@esbuild/win32-ia32@npm:0.16.17"
|
resolution: "@esbuild/win32-ia32@npm:0.16.17"
|
||||||
@@ -3400,6 +3540,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@esbuild/win32-ia32@npm:0.17.19":
|
||||||
|
version: 0.17.19
|
||||||
|
resolution: "@esbuild/win32-ia32@npm:0.17.19"
|
||||||
|
conditions: os=win32 & cpu=ia32
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@esbuild/win32-x64@npm:0.16.17":
|
"@esbuild/win32-x64@npm:0.16.17":
|
||||||
version: 0.16.17
|
version: 0.16.17
|
||||||
resolution: "@esbuild/win32-x64@npm:0.16.17"
|
resolution: "@esbuild/win32-x64@npm:0.16.17"
|
||||||
@@ -3407,6 +3554,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@esbuild/win32-x64@npm:0.17.19":
|
||||||
|
version: 0.17.19
|
||||||
|
resolution: "@esbuild/win32-x64@npm:0.17.19"
|
||||||
|
conditions: os=win32 & cpu=x64
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@eslint-community/eslint-utils@npm:^4.2.0":
|
"@eslint-community/eslint-utils@npm:^4.2.0":
|
||||||
version: 4.4.0
|
version: 4.4.0
|
||||||
resolution: "@eslint-community/eslint-utils@npm:4.4.0"
|
resolution: "@eslint-community/eslint-utils@npm:4.4.0"
|
||||||
@@ -6113,6 +6267,7 @@ __metadata:
|
|||||||
execa: ^5.1.1
|
execa: ^5.1.1
|
||||||
fs-exists-cached: ^1.0.0
|
fs-exists-cached: ^1.0.0
|
||||||
fs-extra: ^10.0.0
|
fs-extra: ^10.0.0
|
||||||
|
glob: ^10.2.7
|
||||||
hosted-git-info: ^4.0.2
|
hosted-git-info: ^4.0.2
|
||||||
inquirer: ^8.0.0
|
inquirer: ^8.0.0
|
||||||
is-valid-path: ^0.1.1
|
is-valid-path: ^0.1.1
|
||||||
@@ -6389,6 +6544,7 @@ __metadata:
|
|||||||
awilix: ^8.0.1
|
awilix: ^8.0.1
|
||||||
cross-env: ^5.2.1
|
cross-env: ^5.2.1
|
||||||
express: ^4.18.2
|
express: ^4.18.2
|
||||||
|
glob: ^10.2.7
|
||||||
jest: ^25.5.4
|
jest: ^25.5.4
|
||||||
ts-jest: ^25.5.1
|
ts-jest: ^25.5.1
|
||||||
typescript: ^4.4.4
|
typescript: ^4.4.4
|
||||||
@@ -8703,6 +8859,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@sindresorhus/is@npm:^5.3.0":
|
||||||
|
version: 5.4.1
|
||||||
|
resolution: "@sindresorhus/is@npm:5.4.1"
|
||||||
|
checksum: 8f8e145c6b4c756e52bbfc9d88026aedd2b205caf3eff33d6f54fc436c75e0555e998826de942ff0a175dbefc12f71ceb2246ceedab73c9dd44f3ce258533a6a
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@sindresorhus/slugify@npm:^1.1.2":
|
"@sindresorhus/slugify@npm:^1.1.2":
|
||||||
version: 1.1.2
|
version: 1.1.2
|
||||||
resolution: "@sindresorhus/slugify@npm:1.1.2"
|
resolution: "@sindresorhus/slugify@npm:1.1.2"
|
||||||
@@ -11962,6 +12125,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"@types/node-emoji@npm:^1.8.2":
|
||||||
|
version: 1.8.2
|
||||||
|
resolution: "@types/node-emoji@npm:1.8.2"
|
||||||
|
checksum: a8076eb48f004798ee6865e3133b8c4f421feedfa35d4756e9992114afe1212822a523f2737404a3aac9881aa8933695c037095dba4d509b6f3c1b0f22f5d9a1
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"@types/node-fetch@npm:2, @types/node-fetch@npm:2.6.2, @types/node-fetch@npm:^2.5.7":
|
"@types/node-fetch@npm:2, @types/node-fetch@npm:2.6.2, @types/node-fetch@npm:^2.5.7":
|
||||||
version: 2.6.2
|
version: 2.6.2
|
||||||
resolution: "@types/node-fetch@npm:2.6.2"
|
resolution: "@types/node-fetch@npm:2.6.2"
|
||||||
@@ -15961,6 +16131,17 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"bundle-require@npm:^4.0.0":
|
||||||
|
version: 4.0.1
|
||||||
|
resolution: "bundle-require@npm:4.0.1"
|
||||||
|
dependencies:
|
||||||
|
load-tsconfig: ^0.2.3
|
||||||
|
peerDependencies:
|
||||||
|
esbuild: ">=0.17"
|
||||||
|
checksum: 92a22b0618bfc4017a7873ac6f989b8fb8c4e2d483f3b05cc3e066a8410934e43f459436113c31fe19f247760bd7f9fd60c15a7a23269d749f8dda7b1b67a01b
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"bunyan@npm:1.8.15":
|
"bunyan@npm:1.8.15":
|
||||||
version: 1.8.15
|
version: 1.8.15
|
||||||
resolution: "bunyan@npm:1.8.15"
|
resolution: "bunyan@npm:1.8.15"
|
||||||
@@ -16494,6 +16675,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"char-regex@npm:^2.0.1":
|
||||||
|
version: 2.0.1
|
||||||
|
resolution: "char-regex@npm:2.0.1"
|
||||||
|
checksum: ec592229ac3ef18f2ea1f5676ae9a829c37150db55fd7f709edce1bcdc9f506de22ae19388d853704806e51af71fe9239bcb7e7be583296951bfbf2a9a9763a2
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"character-entities-legacy@npm:^1.0.0":
|
"character-entities-legacy@npm:^1.0.0":
|
||||||
version: 1.1.4
|
version: 1.1.4
|
||||||
resolution: "character-entities-legacy@npm:1.1.4"
|
resolution: "character-entities-legacy@npm:1.1.4"
|
||||||
@@ -17756,10 +17944,12 @@ __metadata:
|
|||||||
version: 0.0.0-use.local
|
version: 0.0.0-use.local
|
||||||
resolution: "create-medusa-app@workspace:packages/create-medusa-app"
|
resolution: "create-medusa-app@workspace:packages/create-medusa-app"
|
||||||
dependencies:
|
dependencies:
|
||||||
|
"@medusajs/utils": ^1.9.0
|
||||||
"@types/chalk": ^2.2.0
|
"@types/chalk": ^2.2.0
|
||||||
"@types/commander": ^2.12.2
|
"@types/commander": ^2.12.2
|
||||||
"@types/configstore": ^6.0.0
|
"@types/configstore": ^6.0.0
|
||||||
"@types/inquirer": ^9.0.3
|
"@types/inquirer": ^9.0.3
|
||||||
|
"@types/node-emoji": ^1.8.2
|
||||||
"@types/pg": ^8.6.6
|
"@types/pg": ^8.6.6
|
||||||
"@types/uuid": ^9.0.1
|
"@types/uuid": ^9.0.1
|
||||||
"@types/validator": ^13.7.17
|
"@types/validator": ^13.7.17
|
||||||
@@ -17774,9 +17964,11 @@ __metadata:
|
|||||||
eslint-config-google: ^0.14.0
|
eslint-config-google: ^0.14.0
|
||||||
eslint-config-prettier: ^8.8.0
|
eslint-config-prettier: ^8.8.0
|
||||||
eslint-plugin-prettier: ^4.2.1
|
eslint-plugin-prettier: ^4.2.1
|
||||||
|
glob: ^10.2.7
|
||||||
inquirer: ^9.2.2
|
inquirer: ^9.2.2
|
||||||
medusa-telemetry: ^0.0.16
|
medusa-telemetry: ^0.0.16
|
||||||
nanoid: ^4.0.2
|
nanoid: ^4.0.2
|
||||||
|
node-emoji: ^2.0.2
|
||||||
node-fetch: ^3.3.1
|
node-fetch: ^3.3.1
|
||||||
open: ^9.1.0
|
open: ^9.1.0
|
||||||
ora: ^6.3.0
|
ora: ^6.3.0
|
||||||
@@ -19356,6 +19548,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"emojilib@npm:^2.4.0":
|
||||||
|
version: 2.4.0
|
||||||
|
resolution: "emojilib@npm:2.4.0"
|
||||||
|
checksum: 6e66ba8921175842193f974e18af448bb6adb0cf7aeea75e08b9d4ea8e9baba0e4a5347b46ed901491dcaba277485891c33a8d70b0560ca5cc9672a94c21ab8f
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"emojis-list@npm:^3.0.0":
|
"emojis-list@npm:^3.0.0":
|
||||||
version: 3.0.0
|
version: 3.0.0
|
||||||
resolution: "emojis-list@npm:3.0.0"
|
resolution: "emojis-list@npm:3.0.0"
|
||||||
@@ -20067,6 +20266,83 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"esbuild@npm:^0.17.6":
|
||||||
|
version: 0.17.19
|
||||||
|
resolution: "esbuild@npm:0.17.19"
|
||||||
|
dependencies:
|
||||||
|
"@esbuild/android-arm": 0.17.19
|
||||||
|
"@esbuild/android-arm64": 0.17.19
|
||||||
|
"@esbuild/android-x64": 0.17.19
|
||||||
|
"@esbuild/darwin-arm64": 0.17.19
|
||||||
|
"@esbuild/darwin-x64": 0.17.19
|
||||||
|
"@esbuild/freebsd-arm64": 0.17.19
|
||||||
|
"@esbuild/freebsd-x64": 0.17.19
|
||||||
|
"@esbuild/linux-arm": 0.17.19
|
||||||
|
"@esbuild/linux-arm64": 0.17.19
|
||||||
|
"@esbuild/linux-ia32": 0.17.19
|
||||||
|
"@esbuild/linux-loong64": 0.17.19
|
||||||
|
"@esbuild/linux-mips64el": 0.17.19
|
||||||
|
"@esbuild/linux-ppc64": 0.17.19
|
||||||
|
"@esbuild/linux-riscv64": 0.17.19
|
||||||
|
"@esbuild/linux-s390x": 0.17.19
|
||||||
|
"@esbuild/linux-x64": 0.17.19
|
||||||
|
"@esbuild/netbsd-x64": 0.17.19
|
||||||
|
"@esbuild/openbsd-x64": 0.17.19
|
||||||
|
"@esbuild/sunos-x64": 0.17.19
|
||||||
|
"@esbuild/win32-arm64": 0.17.19
|
||||||
|
"@esbuild/win32-ia32": 0.17.19
|
||||||
|
"@esbuild/win32-x64": 0.17.19
|
||||||
|
dependenciesMeta:
|
||||||
|
"@esbuild/android-arm":
|
||||||
|
optional: true
|
||||||
|
"@esbuild/android-arm64":
|
||||||
|
optional: true
|
||||||
|
"@esbuild/android-x64":
|
||||||
|
optional: true
|
||||||
|
"@esbuild/darwin-arm64":
|
||||||
|
optional: true
|
||||||
|
"@esbuild/darwin-x64":
|
||||||
|
optional: true
|
||||||
|
"@esbuild/freebsd-arm64":
|
||||||
|
optional: true
|
||||||
|
"@esbuild/freebsd-x64":
|
||||||
|
optional: true
|
||||||
|
"@esbuild/linux-arm":
|
||||||
|
optional: true
|
||||||
|
"@esbuild/linux-arm64":
|
||||||
|
optional: true
|
||||||
|
"@esbuild/linux-ia32":
|
||||||
|
optional: true
|
||||||
|
"@esbuild/linux-loong64":
|
||||||
|
optional: true
|
||||||
|
"@esbuild/linux-mips64el":
|
||||||
|
optional: true
|
||||||
|
"@esbuild/linux-ppc64":
|
||||||
|
optional: true
|
||||||
|
"@esbuild/linux-riscv64":
|
||||||
|
optional: true
|
||||||
|
"@esbuild/linux-s390x":
|
||||||
|
optional: true
|
||||||
|
"@esbuild/linux-x64":
|
||||||
|
optional: true
|
||||||
|
"@esbuild/netbsd-x64":
|
||||||
|
optional: true
|
||||||
|
"@esbuild/openbsd-x64":
|
||||||
|
optional: true
|
||||||
|
"@esbuild/sunos-x64":
|
||||||
|
optional: true
|
||||||
|
"@esbuild/win32-arm64":
|
||||||
|
optional: true
|
||||||
|
"@esbuild/win32-ia32":
|
||||||
|
optional: true
|
||||||
|
"@esbuild/win32-x64":
|
||||||
|
optional: true
|
||||||
|
bin:
|
||||||
|
esbuild: bin/esbuild
|
||||||
|
checksum: c7ac14bfaaebe4745d5d18347b4f6854fd1140acb9389e88dbfa5c20d4e2122451d9647d5498920470a880a605d6e5502b5c2102da6c282b01f129ddd49d2874
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"escalade@npm:^3.1.1":
|
"escalade@npm:^3.1.1":
|
||||||
version: 3.1.1
|
version: 3.1.1
|
||||||
resolution: "escalade@npm:3.1.1"
|
resolution: "escalade@npm:3.1.1"
|
||||||
@@ -23262,7 +23538,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"glob@npm:^10.2.5":
|
"glob@npm:^10.2.5, glob@npm:^10.2.7":
|
||||||
version: 10.2.7
|
version: 10.2.7
|
||||||
resolution: "glob@npm:10.2.7"
|
resolution: "glob@npm:10.2.7"
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -29262,6 +29538,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"load-tsconfig@npm:^0.2.3":
|
||||||
|
version: 0.2.5
|
||||||
|
resolution: "load-tsconfig@npm:0.2.5"
|
||||||
|
checksum: bf2823dd26389d3497b6567f07435c5a7a58d9df82e879b0b3892f87d8db26900f84c85bc329ef41c0540c0d6a448d1c23ddc64a80f3ff6838b940f3915a3fcb
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"load-yaml-file@npm:^0.2.0":
|
"load-yaml-file@npm:^0.2.0":
|
||||||
version: 0.2.0
|
version: 0.2.0
|
||||||
resolution: "load-yaml-file@npm:0.2.0"
|
resolution: "load-yaml-file@npm:0.2.0"
|
||||||
@@ -32145,6 +32428,19 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"node-emoji@npm:^2.0.2":
|
||||||
|
version: 2.0.2
|
||||||
|
resolution: "node-emoji@npm:2.0.2"
|
||||||
|
dependencies:
|
||||||
|
"@sindresorhus/is": ^5.3.0
|
||||||
|
char-regex: ^2.0.1
|
||||||
|
emojilib: ^2.4.0
|
||||||
|
skin-tone: ^3.0.0
|
||||||
|
tsup: ^6.7.0
|
||||||
|
checksum: 3a6fde771e0ea94c798ba94789c7a834aeda938b6b2fb4bb5bc4426cdc02ca6f291df7517238c76b35dfe89f94363eeb843d17336e117c090eeb4c7524e9a792
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"node-environment-flags@npm:^1.0.5":
|
"node-environment-flags@npm:^1.0.5":
|
||||||
version: 1.0.6
|
version: 1.0.6
|
||||||
resolution: "node-environment-flags@npm:1.0.6"
|
resolution: "node-environment-flags@npm:1.0.6"
|
||||||
@@ -38371,6 +38667,15 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"skin-tone@npm:^3.0.0":
|
||||||
|
version: 3.0.0
|
||||||
|
resolution: "skin-tone@npm:3.0.0"
|
||||||
|
dependencies:
|
||||||
|
unicode-emoji-modifier-base: ^1.0.0
|
||||||
|
checksum: 11d08fd438611ab39382dde3ee27c2d4ece4fb5edca08ecf456304a666215b24dd17e7b0a15e84dcf99bdac236a648060b604a31d05cd64d9cba8c0d1a896d5c
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"slash@npm:^2.0.0":
|
"slash@npm:^2.0.0":
|
||||||
version: 2.0.0
|
version: 2.0.0
|
||||||
resolution: "slash@npm:2.0.0"
|
resolution: "slash@npm:2.0.0"
|
||||||
@@ -40888,6 +41193,42 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"tsup@npm:^6.7.0":
|
||||||
|
version: 6.7.0
|
||||||
|
resolution: "tsup@npm:6.7.0"
|
||||||
|
dependencies:
|
||||||
|
bundle-require: ^4.0.0
|
||||||
|
cac: ^6.7.12
|
||||||
|
chokidar: ^3.5.1
|
||||||
|
debug: ^4.3.1
|
||||||
|
esbuild: ^0.17.6
|
||||||
|
execa: ^5.0.0
|
||||||
|
globby: ^11.0.3
|
||||||
|
joycon: ^3.0.1
|
||||||
|
postcss-load-config: ^3.0.1
|
||||||
|
resolve-from: ^5.0.0
|
||||||
|
rollup: ^3.2.5
|
||||||
|
source-map: 0.8.0-beta.0
|
||||||
|
sucrase: ^3.20.3
|
||||||
|
tree-kill: ^1.2.2
|
||||||
|
peerDependencies:
|
||||||
|
"@swc/core": ^1
|
||||||
|
postcss: ^8.4.12
|
||||||
|
typescript: ">=4.1.0"
|
||||||
|
peerDependenciesMeta:
|
||||||
|
"@swc/core":
|
||||||
|
optional: true
|
||||||
|
postcss:
|
||||||
|
optional: true
|
||||||
|
typescript:
|
||||||
|
optional: true
|
||||||
|
bin:
|
||||||
|
tsup: dist/cli-default.js
|
||||||
|
tsup-node: dist/cli-node.js
|
||||||
|
checksum: f6ab9a191b91c68d2bcac9a4df062d26343a9253d5577ee617fa3409e306cb6373ffa6cdb3f6a772e7222a5cf945e330bf6ad9455a7ae3c47aa9eb13f98ac812
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"tsutils@npm:^3.21.0":
|
"tsutils@npm:^3.21.0":
|
||||||
version: 3.21.0
|
version: 3.21.0
|
||||||
resolution: "tsutils@npm:3.21.0"
|
resolution: "tsutils@npm:3.21.0"
|
||||||
@@ -41476,6 +41817,13 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"unicode-emoji-modifier-base@npm:^1.0.0":
|
||||||
|
version: 1.0.0
|
||||||
|
resolution: "unicode-emoji-modifier-base@npm:1.0.0"
|
||||||
|
checksum: b37623fcf0162186debd20f116483e035a2d5b905b932a2c472459d9143d446ebcbefb2a494e2fe4fa7434355396e2a95ec3fc1f0c29a3bc8f2c827220e79c66
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"unicode-match-property-ecmascript@npm:^2.0.0":
|
"unicode-match-property-ecmascript@npm:^2.0.0":
|
||||||
version: 2.0.0
|
version: 2.0.0
|
||||||
resolution: "unicode-match-property-ecmascript@npm:2.0.0"
|
resolution: "unicode-match-property-ecmascript@npm:2.0.0"
|
||||||
|
|||||||
Reference in new issue
Block a user