Add SQLite support for easy setup (#336)

* Modifies schema to allow SQLite as a DB driver. SQLite is preinstalled in most OSes allowing for minimal prerequisites in the installation process.

* Removes Redis dependency and replaces "real" redis instance with ioredis-mock this is not feature complete and errors are expected.

* Updates medusa new command to only ask for Postgres credentials if the starter template has database_type === "postgres" in medusa-config.js

* Small improvements to bin resolution

* Improvements to endpoint stability
This commit is contained in:
Sebastian Rindom
2021-08-16 15:45:26 +02:00
committed by GitHub
parent 09d1b1a141
commit 1039d040e9
76 changed files with 2072 additions and 523 deletions

View File

@@ -21,7 +21,7 @@ describe("/store/carts", () => {
beforeAll(async () => {
const cwd = path.resolve(path.join(__dirname, "..", ".."));
dbConnection = await initDb({ cwd });
medusaProcess = await setupServer({ cwd, verbose: true });
medusaProcess = await setupServer({ cwd });
});
afterAll(async () => {

View File

@@ -73,7 +73,7 @@ describe("/store/customers", () => {
})
.catch((err) => err.response);
expect(response.status).toEqual(409);
expect(response.status).toEqual(402);
});
});

View File

@@ -8,15 +8,15 @@
"build": "babel src -d dist --extensions \".ts,.js\""
},
"dependencies": {
"@medusajs/medusa": "1.1.34-dev-1628665194353",
"medusa-interfaces": "1.1.21-dev-1628665194353",
"@medusajs/medusa": "1.1.36-dev-1629109473927",
"medusa-interfaces": "1.1.21-dev-1629109473927",
"typeorm": "^0.2.31"
},
"devDependencies": {
"@babel/cli": "^7.12.10",
"@babel/core": "^7.12.10",
"@babel/node": "^7.12.10",
"babel-preset-medusa-package": "1.1.13-dev-1628665194353",
"babel-preset-medusa-package": "1.1.13-dev-1629109473927",
"jest": "^26.6.3"
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -7,6 +7,7 @@ const { createConnection } = require("typeorm");
const DB_USERNAME = process.env.DB_USERNAME || "postgres";
const DB_PASSWORD = process.env.DB_PASSWORD || "";
const DB_URL = `postgres://${DB_USERNAME}:${DB_PASSWORD}@localhost/medusa-integration`;
const pgGodCredentials = {
user: DB_USERNAME,
password: DB_PASSWORD,
@@ -21,6 +22,8 @@ const keepTables = [
"currency",
];
let connectionType = "postgresql";
const DbTestUtil = {
db_: null,
@@ -36,7 +39,12 @@ const DbTestUtil = {
const entities = this.db_.entityMetadatas;
const manager = this.db_.manager;
await manager.query(`SET session_replication_role = 'replica';`);
if (connectionType === "sqlite") {
await manager.query(`PRAGMA foreign_keys = OFF`);
} else {
await manager.query(`SET session_replication_role = 'replica';`);
}
for (const entity of entities) {
if (keepTables.includes(entity.tableName)) {
continue;
@@ -44,7 +52,11 @@ const DbTestUtil = {
await manager.query(`DELETE FROM "${entity.tableName}";`);
}
await manager.query(`SET session_replication_role = 'origin';`);
if (connectionType === "sqlite") {
await manager.query(`PRAGMA foreign_keys = ON`);
} else {
await manager.query(`SET session_replication_role = 'origin';`);
}
},
shutdown: async function () {
@@ -58,28 +70,7 @@ const instance = DbTestUtil;
module.exports = {
initDb: async function ({ cwd }) {
const migrationDir = path.resolve(
path.join(
cwd,
`node_modules`,
`@medusajs`,
`medusa`,
`dist`,
`migrations`
)
);
const databaseName = "medusa-integration";
await createDatabase({ databaseName }, pgGodCredentials);
const connection = await createConnection({
type: "postgres",
url: DB_URL,
migrations: [`${migrationDir}/*.js`],
});
await connection.runMigrations();
await connection.close();
const configPath = path.resolve(path.join(cwd, `medusa-config.js`));
const modelsLoader = require(path.join(
cwd,
@@ -90,16 +81,53 @@ module.exports = {
`loaders`,
`models`
)).default;
const entities = modelsLoader({}, { register: false });
const dbConnection = await createConnection({
type: "postgres",
url: DB_URL,
entities,
});
instance.setDb(dbConnection);
return dbConnection;
const { projectConfig } = require(configPath);
if (projectConfig.database_type === "sqlite") {
connectionType = "sqlite";
const dbConnection = await createConnection({
type: "sqlite",
database: projectConfig.database_database,
synchronize: true,
entities,
});
instance.setDb(dbConnection);
return dbConnection;
} else {
const migrationDir = path.resolve(
path.join(
cwd,
`node_modules`,
`@medusajs`,
`medusa`,
`dist`,
`migrations`
)
);
const databaseName = "medusa-integration";
await createDatabase({ databaseName }, pgGodCredentials);
const connection = await createConnection({
type: "postgres",
url: DB_URL,
migrations: [`${migrationDir}/*.js`],
});
await connection.runMigrations();
await connection.close();
const dbConnection = await createConnection({
type: "postgres",
url: DB_URL,
entities,
});
instance.setDb(dbConnection);
return dbConnection;
}
},
useDb: function () {
return instance;

View File

@@ -8,6 +8,8 @@ const { track } = require("medusa-telemetry")
const { getToken } = require("../util/token-store")
const logger = require("../reporter").default
const MEDUSA_CLI_DEBUG = process.env.MEDUSA_CLI_DEBUG || false
module.exports = {
link: async argv => {
track("CLI_LINK", { args: argv })
@@ -59,6 +61,12 @@ module.exports = {
},
}
)
if (MEDUSA_CLI_DEBUG) {
proc.stderr.pipe(process.stderr)
proc.stdout.pipe(process.stdout)
}
const res = await proc
if (res.stderr) {
const err = new Error("stderr error")

View File

@@ -19,6 +19,14 @@ import inquirer from "inquirer"
import reporter from "../reporter"
import { getPackageManager, setPackageManager } from "../util/package-manager"
const removeUndefined = obj => {
return Object.fromEntries(
Object.entries(obj)
.filter(([_, v]) => v != null)
.map(([k, v]) => [k, v === Object(v) ? removeEmpty(v) : v])
)
}
const spawnWithArgs = (file, args, options) =>
execa(file, args, { stdio: `inherit`, preferLocal: false, ...options })
@@ -199,6 +207,24 @@ const clone = async (hostInfo, rootPath) => {
if (!isGit) await createInitialGitCommit(rootPath, url)
}
const getMedusaConfig = rootPath => {
try {
const configPath = sysPath.join(rootPath, "medusa-config.js")
if (existsSync(configPath)) {
const resolved = sysPath.resolve(configPath)
const configModule = require(resolved)
return configModule
}
throw Error()
} catch (err) {
console.log(err)
reporter.warn(
`Couldn't find a medusa-config.js file; please double check that you have the correct starter installed`
)
}
return {}
}
const getPaths = async (starterPath, rootPath) => {
let selectedOtherStarter = false
@@ -211,7 +237,18 @@ const getPaths = async (starterPath, rootPath) => {
message: `What is your project called?`,
initial: `my-medusa-store`,
},
{
type: `select`,
name: `starter`,
message: `What starter would you like to use?`,
choices: [
{ title: `medusa-starter-default`, value: `medusa-starter-default` },
{ title: `(Use a different starter)`, value: `different` },
],
initial: 0,
},
])
// exit gracefully if responses aren't provided
if (!response.starter || !response.path.trim()) {
throw new Error(
@@ -220,7 +257,7 @@ const getPaths = async (starterPath, rootPath) => {
}
selectedOtherStarter = response.starter === `different`
starterPath = `medusajs/medusa-starter-default`
starterPath = `medusajs/${response.starter}`
rootPath = response.path
}
@@ -232,8 +269,7 @@ const getPaths = async (starterPath, rootPath) => {
}
const successMessage = path => {
reporter.info(`
Your new Medusa project is ready for you! To start developing run:
reporter.info(`Your new Medusa project is ready for you! To start developing run:
cd ${path}
medusa develop
@@ -241,7 +277,7 @@ Your new Medusa project is ready for you! To start developing run:
}
const defaultDBCreds = {
user: "postgres",
user: process.env.USER || "postgres",
database: "postgres",
password: "",
port: 5432,
@@ -392,27 +428,32 @@ const setupDB = async (dbName, dbCreds = {}) => {
})
}
const setupEnvVars = async (rootPath, dbName, dbCreds = {}) => {
const credentials = Object.assign({}, defaultDBCreds, dbCreds)
let dbUrl = ""
if (
credentials.user !== defaultDBCreds.user ||
credentials.password !== defaultDBCreds.password
) {
dbUrl = `postgres://${credentials.user}:${credentials.password}@${credentials.host}:${credentials.port}/${dbName}`
} else {
dbUrl = `postgres://${credentials.host}:${credentials.port}/${dbName}`
}
const setupEnvVars = async (
rootPath,
dbName,
dbCreds = {},
isPostgres = true
) => {
const templatePath = sysPath.join(rootPath, ".env.template")
const destination = sysPath.join(rootPath, ".env")
if (existsSync(templatePath)) {
fs.renameSync(templatePath, destination)
} else {
reporter.info(`No .env.template found. Creating .env.`)
}
fs.appendFileSync(destination, `DATABASE_URL=${dbUrl}\n`)
if (isPostgres) {
const credentials = Object.assign({}, defaultDBCreds, dbCreds)
let dbUrl = ""
if (
credentials.user !== defaultDBCreds.user ||
credentials.password !== defaultDBCreds.password
) {
dbUrl = `postgres://${credentials.user}:${credentials.password}@${credentials.host}:${credentials.port}/${dbName}`
} else {
dbUrl = `postgres://${credentials.host}:${credentials.port}/${dbName}`
}
fs.appendFileSync(destination, `DATABASE_URL=${dbUrl}\n`)
}
}
const runMigrations = async rootPath => {
@@ -494,25 +535,39 @@ export const newStarter = async args => {
dbHost,
} = args
const dbCredentials = {
const dbCredentials = removeUndefined({
user: dbUser,
database: dbDatabase,
password: dbPass,
port: dbPort,
host: dbHost,
}
})
const { starterPath, rootPath } = await getPaths(starter, root)
const { starterPath, rootPath, selectedOtherStarter } = await getPaths(
starter,
root
)
const urlObject = url.parse(rootPath)
if (selectedOtherStarter) {
reporter.info(
`Find the url of the Medusa starter you wish to create and run:
medusa new ${rootPath} [url-to-starter]
`
)
return
}
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: `11610`,
id: `10000`,
context: {
starter,
rootPath,
@@ -521,7 +576,7 @@ export const newStarter = async args => {
return
}
reporter.panic({
id: `11611`,
id: `10001`,
context: {
rootPath,
},
@@ -531,7 +586,7 @@ export const newStarter = async args => {
if (!isValid(rootPath)) {
reporter.panic({
id: `11612`,
id: `10002`,
context: {
path: sysPath.resolve(rootPath),
},
@@ -541,7 +596,7 @@ export const newStarter = async args => {
if (existsSync(sysPath.join(rootPath, `package.json`))) {
reporter.panic({
id: `11613`,
id: `10003`,
context: {
rootPath,
},
@@ -556,28 +611,36 @@ export const newStarter = async args => {
await copy(starterPath, rootPath)
}
const medusaConfig = getMedusaConfig(rootPath)
let isPostgres = false
if (medusaConfig && medusaConfig.projectConfig) {
const databaseType = medusaConfig.projectConfig.database_type
isPostgres = databaseType === "postgres"
}
track("CLI_NEW_LAYOUT_COMPLETED")
let creds = dbCredentials
if (!useDefaults && !skipDb && !skipEnv) {
creds = await interactiveDbCreds(root, dbCredentials)
if (isPostgres && !useDefaults && !skipDb && !skipEnv) {
creds = await interactiveDbCreds(rootPath, dbCredentials)
}
if (creds === null) {
reporter.info("Skipping automatic database setup")
} else {
if (!skipDb) {
if (!skipDb && isPostgres) {
track("CLI_NEW_SETUP_DB")
await setupDB(root, creds)
await setupDB(rootPath, creds)
}
if (!skipEnv) {
track("CLI_NEW_SETUP_ENV")
await setupEnvVars(rootPath, root, creds)
await setupEnvVars(rootPath, rootPath, creds, isPostgres)
}
if (!skipMigrations) {
if (!skipMigrations && isPostgres) {
track("CLI_NEW_RUN_MIGRATIONS")
await runMigrations(rootPath)
}

View File

@@ -100,27 +100,22 @@ function buildLocalCommands(cli, isLocalProject) {
.option(`db-user`, {
type: `string`,
describe: `The database user to use for database setup and migrations.`,
default: `postgres`,
})
.option(`db-database`, {
type: `string`,
describe: `The database use for database setup and migrations.`,
default: `postgres`,
})
.option(`db-pass`, {
type: `string`,
describe: `The database password to use for database setup and migrations.`,
default: ``,
})
.option(`db-port`, {
type: `number`,
describe: `The database port to use for database setup and migrations.`,
default: 5432,
})
.option(`db-host`, {
type: `string`,
describe: `The database host to use for database setup and migrations.`,
default: `localhost`,
}),
desc: `Create a new Medusa project.`,
handler: handlerP(newStarter),

View File

@@ -4,11 +4,14 @@ import winston from "winston"
import ora from "ora"
import { track } from "medusa-telemetry"
import { panicHandler } from "./panic-handler"
const LOG_LEVEL = process.env.LOG_LEVEL || "silly"
const NODE_ENV = process.env.NODE_ENV || "development"
const IS_DEV = NODE_ENV === "development"
const transports = []
if (process.env.NODE_ENV && process.env.NODE_ENV !== "development") {
if (!IS_DEV) {
transports.push(new winston.transports.Console())
} else {
transports.push(
@@ -43,10 +46,12 @@ export class Reporter {
}
panic = data => {
const parsedPanic = panicHandler(data)
this.loggerInstance_.log({
level: "error",
details: data,
message: data.error && data.error.message,
message: parsedPanic.message,
})
track("PANIC_ERROR_REACHED", {
@@ -92,7 +97,7 @@ export class Reporter {
*/
activity = (message, config = {}) => {
const id = ulid()
if (NODE_ENV === "development" && this.shouldLog("info")) {
if (IS_DEV && this.shouldLog("info")) {
const activity = this.ora_(message).start()
this.activities_[id] = {
@@ -168,6 +173,11 @@ export class Reporter {
}
this.loggerInstance_.log(toLog)
// Give stack traces and details in dev
if (error && IS_DEV) {
console.log(error)
}
}
/**

View File

@@ -0,0 +1,25 @@
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",
}
}
}

View File

@@ -25,7 +25,12 @@
dependencies:
"@babel/highlight" "^7.14.5"
"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.14.5", "@babel/compat-data@^7.14.7":
"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.14.7", "@babel/compat-data@^7.15.0":
version "7.15.0"
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz#2dbaf8b85334796cafbb0f5793a90a2fc010b176"
integrity sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==
"@babel/compat-data@^7.14.5":
version "7.14.7"
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.7.tgz#7b047d7a3a89a67d2258dc61f604f098f1bc7e08"
integrity sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==
@@ -60,6 +65,15 @@
jsesc "^2.5.1"
source-map "^0.5.0"
"@babel/generator@^7.15.0":
version "7.15.0"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.0.tgz#a7d0c172e0d814974bad5aa77ace543b97917f15"
integrity sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==
dependencies:
"@babel/types" "^7.15.0"
jsesc "^2.5.1"
source-map "^0.5.0"
"@babel/helper-annotate-as-pure@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz#7bf478ec3b71726d56a8ca5775b046fc29879e61"
@@ -75,7 +89,17 @@
"@babel/helper-explode-assignable-expression" "^7.14.5"
"@babel/types" "^7.14.5"
"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.14.5":
"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.15.0":
version "7.15.0"
resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.0.tgz#973df8cbd025515f3ff25db0c05efc704fa79818"
integrity sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A==
dependencies:
"@babel/compat-data" "^7.15.0"
"@babel/helper-validator-option" "^7.14.5"
browserslist "^4.16.6"
semver "^6.3.0"
"@babel/helper-compilation-targets@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz#7a99c5d0967911e972fe2c3411f7d5b498498ecf"
integrity sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==
@@ -85,7 +109,19 @@
browserslist "^4.16.6"
semver "^6.3.0"
"@babel/helper-create-class-features-plugin@^7.14.5", "@babel/helper-create-class-features-plugin@^7.14.6":
"@babel/helper-create-class-features-plugin@^7.14.5":
version "7.15.0"
resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.0.tgz#c9a137a4d137b2d0e2c649acf536d7ba1a76c0f7"
integrity sha512-MdmDXgvTIi4heDVX/e9EFfeGpugqm9fobBVg/iioE8kueXrOHdRDe36FAY7SnE9xXLVeYCoJR/gdrBEIHRC83Q==
dependencies:
"@babel/helper-annotate-as-pure" "^7.14.5"
"@babel/helper-function-name" "^7.14.5"
"@babel/helper-member-expression-to-functions" "^7.15.0"
"@babel/helper-optimise-call-expression" "^7.14.5"
"@babel/helper-replace-supers" "^7.15.0"
"@babel/helper-split-export-declaration" "^7.14.5"
"@babel/helper-create-class-features-plugin@^7.14.6":
version "7.14.8"
resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.8.tgz#a6f8c3de208b1e5629424a9a63567f56501955fc"
integrity sha512-bpYvH8zJBWzeqi1o+co8qOrw+EXzQ/0c74gVmY205AWXy9nifHrOg77y+1zwxX5lXE7Icq4sPlSQ4O2kWBrteQ==
@@ -156,6 +192,13 @@
dependencies:
"@babel/types" "^7.14.5"
"@babel/helper-member-expression-to-functions@^7.15.0":
version "7.15.0"
resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz#0ddaf5299c8179f27f37327936553e9bba60990b"
integrity sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==
dependencies:
"@babel/types" "^7.15.0"
"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3"
@@ -163,7 +206,21 @@
dependencies:
"@babel/types" "^7.14.5"
"@babel/helper-module-transforms@^7.14.5", "@babel/helper-module-transforms@^7.14.8":
"@babel/helper-module-transforms@^7.14.5", "@babel/helper-module-transforms@^7.15.0":
version "7.15.0"
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz#679275581ea056373eddbe360e1419ef23783b08"
integrity sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg==
dependencies:
"@babel/helper-module-imports" "^7.14.5"
"@babel/helper-replace-supers" "^7.15.0"
"@babel/helper-simple-access" "^7.14.8"
"@babel/helper-split-export-declaration" "^7.14.5"
"@babel/helper-validator-identifier" "^7.14.9"
"@babel/template" "^7.14.5"
"@babel/traverse" "^7.15.0"
"@babel/types" "^7.15.0"
"@babel/helper-module-transforms@^7.14.8":
version "7.14.8"
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.8.tgz#d4279f7e3fd5f4d5d342d833af36d4dd87d7dc49"
integrity sha512-RyE+NFOjXn5A9YU1dkpeBaduagTlZ0+fccnIcAGbv1KGUlReBj7utF7oEth8IdIBQPcux0DDgW5MFBH2xu9KcA==
@@ -208,7 +265,17 @@
"@babel/traverse" "^7.14.5"
"@babel/types" "^7.14.5"
"@babel/helper-simple-access@^7.14.5", "@babel/helper-simple-access@^7.14.8":
"@babel/helper-replace-supers@^7.15.0":
version "7.15.0"
resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz#ace07708f5bf746bf2e6ba99572cce79b5d4e7f4"
integrity sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==
dependencies:
"@babel/helper-member-expression-to-functions" "^7.15.0"
"@babel/helper-optimise-call-expression" "^7.14.5"
"@babel/traverse" "^7.15.0"
"@babel/types" "^7.15.0"
"@babel/helper-simple-access@^7.14.8":
version "7.14.8"
resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz#82e1fec0644a7e775c74d305f212c39f8fe73924"
integrity sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==
@@ -234,6 +301,11 @@
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz#32be33a756f29e278a0d644fa08a2c9e0f88a34c"
integrity sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==
"@babel/helper-validator-identifier@^7.14.9":
version "7.14.9"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz#6654d171b2024f6d8ee151bf2509699919131d48"
integrity sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==
"@babel/helper-validator-option@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3"
@@ -272,6 +344,11 @@
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.8.tgz#66fd41666b2d7b840bd5ace7f7416d5ac60208d4"
integrity sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==
"@babel/parser@^7.15.0":
version "7.15.3"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.3.tgz#3416d9bea748052cfcb63dbcc27368105b1ed862"
integrity sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz#4b467302e1548ed3b1be43beae2cc9cf45e0bb7e"
@@ -281,10 +358,10 @@
"@babel/helper-skip-transparent-expression-wrappers" "^7.14.5"
"@babel/plugin-proposal-optional-chaining" "^7.14.5"
"@babel/plugin-proposal-async-generator-functions@^7.14.7":
version "7.14.7"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.7.tgz#784a48c3d8ed073f65adcf30b57bcbf6c8119ace"
integrity sha512-RK8Wj7lXLY3bqei69/cc25gwS5puEc3dknoFPFbqfy3XxYQBQFvu4ioWpafMBAB+L9NyptQK4nMOa5Xz16og8Q==
"@babel/plugin-proposal-async-generator-functions@^7.14.9":
version "7.14.9"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.9.tgz#7028dc4fa21dc199bbacf98b39bab1267d0eaf9a"
integrity sha512-d1lnh+ZnKrFKwtTYdw320+sQWCTwgkB9fmUhNXRADA4akR6wLjaruSGnIEUjpt9HCOwTr4ynFTKu19b7rFRpmw==
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
"@babel/helper-remap-async-to-generator" "^7.14.5"
@@ -568,16 +645,16 @@
"@babel/helper-plugin-utils" "^7.14.5"
"@babel/plugin-transform-block-scoping@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz#8cc63e61e50f42e078e6f09be775a75f23ef9939"
integrity sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==
version "7.15.3"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz#94c81a6e2fc230bcce6ef537ac96a1e4d2b3afaf"
integrity sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q==
dependencies:
"@babel/helper-plugin-utils" "^7.14.5"
"@babel/plugin-transform-classes@^7.12.1", "@babel/plugin-transform-classes@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz#0e98e82097b38550b03b483f9b51a78de0acb2cf"
integrity sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA==
"@babel/plugin-transform-classes@^7.12.1", "@babel/plugin-transform-classes@^7.14.9":
version "7.14.9"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.9.tgz#2a391ffb1e5292710b00f2e2c210e1435e7d449f"
integrity sha512-NfZpTcxU3foGWbl4wxmZ35mTsYJy8oQocbeIMoDAGGFarAmSQlL+LWMkDx/tj6pNotpbX3rltIA4dprgAPOq5A==
dependencies:
"@babel/helper-annotate-as-pure" "^7.14.5"
"@babel/helper-function-name" "^7.14.5"
@@ -669,14 +746,14 @@
"@babel/helper-plugin-utils" "^7.14.5"
babel-plugin-dynamic-import-node "^2.3.3"
"@babel/plugin-transform-modules-commonjs@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz#7aaee0ea98283de94da98b28f8c35701429dad97"
integrity sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A==
"@babel/plugin-transform-modules-commonjs@^7.15.0":
version "7.15.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.0.tgz#3305896e5835f953b5cdb363acd9e8c2219a5281"
integrity sha512-3H/R9s8cXcOGE8kgMlmjYYC9nqr5ELiPkJn4q0mypBrjhYQoc+5/Maq69vV4xRPWnkzZuwJPf5rArxpB/35Cig==
dependencies:
"@babel/helper-module-transforms" "^7.14.5"
"@babel/helper-module-transforms" "^7.15.0"
"@babel/helper-plugin-utils" "^7.14.5"
"@babel/helper-simple-access" "^7.14.5"
"@babel/helper-simple-access" "^7.14.8"
babel-plugin-dynamic-import-node "^2.3.3"
"@babel/plugin-transform-modules-systemjs@^7.14.5":
@@ -698,10 +775,10 @@
"@babel/helper-module-transforms" "^7.14.5"
"@babel/helper-plugin-utils" "^7.14.5"
"@babel/plugin-transform-named-capturing-groups-regex@^7.14.7":
version "7.14.7"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.7.tgz#60c06892acf9df231e256c24464bfecb0908fd4e"
integrity sha512-DTNOTaS7TkW97xsDMrp7nycUVh6sn/eq22VaxWfEdzuEbRsiaOU0pqU7DlyUGHVsbQbSghvjKRpEl+nUCKGQSg==
"@babel/plugin-transform-named-capturing-groups-regex@^7.14.9":
version "7.14.9"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz#c68f5c5d12d2ebaba3762e57c2c4f6347a46e7b2"
integrity sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA==
dependencies:
"@babel/helper-create-regexp-features-plugin" "^7.14.5"
@@ -749,9 +826,9 @@
"@babel/helper-plugin-utils" "^7.14.5"
"@babel/plugin-transform-runtime@^7.12.1":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.5.tgz#30491dad49c6059f8f8fa5ee8896a0089e987523"
integrity sha512-fPMBhh1AV8ZyneiCIA+wYYUH1arzlXR1UMcApjvchDhfKxhy2r2lReJv8uHEyihi4IFIGlr1Pdx7S5fkESDQsg==
version "7.15.0"
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.15.0.tgz#d3aa650d11678ca76ce294071fda53d7804183b3"
integrity sha512-sfHYkLGjhzWTq6xsuQ01oEsUYjkHRux9fW1iUA68dC7Qd8BS1Unq4aZ8itmQp95zUzIcyR2EbNMTzAicFj+guw==
dependencies:
"@babel/helper-module-imports" "^7.14.5"
"@babel/helper-plugin-utils" "^7.14.5"
@@ -821,16 +898,16 @@
"@babel/helper-plugin-utils" "^7.14.5"
"@babel/preset-env@^7.12.7":
version "7.14.8"
resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.14.8.tgz#254942f5ca80ccabcfbb2a9f524c74bca574005b"
integrity sha512-a9aOppDU93oArQ51H+B8M1vH+tayZbuBqzjOhntGetZVa+4tTu5jp+XTwqHGG2lxslqomPYVSjIxQkFwXzgnxg==
version "7.15.0"
resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.15.0.tgz#e2165bf16594c9c05e52517a194bf6187d6fe464"
integrity sha512-FhEpCNFCcWW3iZLg0L2NPE9UerdtsCR6ZcsGHUX6Om6kbCQeL5QZDqFDmeNHC6/fy6UH3jEge7K4qG5uC9In0Q==
dependencies:
"@babel/compat-data" "^7.14.7"
"@babel/helper-compilation-targets" "^7.14.5"
"@babel/compat-data" "^7.15.0"
"@babel/helper-compilation-targets" "^7.15.0"
"@babel/helper-plugin-utils" "^7.14.5"
"@babel/helper-validator-option" "^7.14.5"
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.14.5"
"@babel/plugin-proposal-async-generator-functions" "^7.14.7"
"@babel/plugin-proposal-async-generator-functions" "^7.14.9"
"@babel/plugin-proposal-class-properties" "^7.14.5"
"@babel/plugin-proposal-class-static-block" "^7.14.5"
"@babel/plugin-proposal-dynamic-import" "^7.14.5"
@@ -863,7 +940,7 @@
"@babel/plugin-transform-async-to-generator" "^7.14.5"
"@babel/plugin-transform-block-scoped-functions" "^7.14.5"
"@babel/plugin-transform-block-scoping" "^7.14.5"
"@babel/plugin-transform-classes" "^7.14.5"
"@babel/plugin-transform-classes" "^7.14.9"
"@babel/plugin-transform-computed-properties" "^7.14.5"
"@babel/plugin-transform-destructuring" "^7.14.7"
"@babel/plugin-transform-dotall-regex" "^7.14.5"
@@ -874,10 +951,10 @@
"@babel/plugin-transform-literals" "^7.14.5"
"@babel/plugin-transform-member-expression-literals" "^7.14.5"
"@babel/plugin-transform-modules-amd" "^7.14.5"
"@babel/plugin-transform-modules-commonjs" "^7.14.5"
"@babel/plugin-transform-modules-commonjs" "^7.15.0"
"@babel/plugin-transform-modules-systemjs" "^7.14.5"
"@babel/plugin-transform-modules-umd" "^7.14.5"
"@babel/plugin-transform-named-capturing-groups-regex" "^7.14.7"
"@babel/plugin-transform-named-capturing-groups-regex" "^7.14.9"
"@babel/plugin-transform-new-target" "^7.14.5"
"@babel/plugin-transform-object-super" "^7.14.5"
"@babel/plugin-transform-parameters" "^7.14.5"
@@ -892,11 +969,11 @@
"@babel/plugin-transform-unicode-escapes" "^7.14.5"
"@babel/plugin-transform-unicode-regex" "^7.14.5"
"@babel/preset-modules" "^0.1.4"
"@babel/types" "^7.14.8"
"@babel/types" "^7.15.0"
babel-plugin-polyfill-corejs2 "^0.2.2"
babel-plugin-polyfill-corejs3 "^0.2.2"
babel-plugin-polyfill-regenerator "^0.2.2"
core-js-compat "^3.15.0"
core-js-compat "^3.16.0"
semver "^6.3.0"
"@babel/preset-modules@^0.1.4":
@@ -920,9 +997,9 @@
"@babel/plugin-transform-typescript" "^7.14.5"
"@babel/runtime@^7.8.4":
version "7.14.8"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.8.tgz#7119a56f421018852694290b9f9148097391b446"
integrity sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg==
version "7.15.3"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.3.tgz#2e1c2880ca118e5b2f9988322bd8a7656a32502b"
integrity sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA==
dependencies:
regenerator-runtime "^0.13.4"
@@ -935,7 +1012,7 @@
"@babel/parser" "^7.14.5"
"@babel/types" "^7.14.5"
"@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.14.5", "@babel/traverse@^7.14.8":
"@babel/traverse@^7.1.0", "@babel/traverse@^7.14.5", "@babel/traverse@^7.14.8":
version "7.14.8"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.8.tgz#c0253f02677c5de1a8ff9df6b0aacbec7da1a8ce"
integrity sha512-kexHhzCljJcFNn1KYAQ6A5wxMRzq9ebYpEDV4+WdNyr3i7O44tanbDOR/xjiG2F3sllan+LgwK+7OMk0EmydHg==
@@ -950,7 +1027,22 @@
debug "^4.1.0"
globals "^11.1.0"
"@babel/types@^7.0.0", "@babel/types@^7.14.5", "@babel/types@^7.14.8", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4":
"@babel/traverse@^7.13.0", "@babel/traverse@^7.15.0":
version "7.15.0"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.0.tgz#4cca838fd1b2a03283c1f38e141f639d60b3fc98"
integrity sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==
dependencies:
"@babel/code-frame" "^7.14.5"
"@babel/generator" "^7.15.0"
"@babel/helper-function-name" "^7.14.5"
"@babel/helper-hoist-variables" "^7.14.5"
"@babel/helper-split-export-declaration" "^7.14.5"
"@babel/parser" "^7.15.0"
"@babel/types" "^7.15.0"
debug "^4.1.0"
globals "^11.1.0"
"@babel/types@^7.0.0", "@babel/types@^7.14.5", "@babel/types@^7.14.8", "@babel/types@^7.3.0", "@babel/types@^7.3.3":
version "7.14.8"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.8.tgz#38109de8fcadc06415fbd9b74df0065d4d41c728"
integrity sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==
@@ -958,6 +1050,14 @@
"@babel/helper-validator-identifier" "^7.14.8"
to-fast-properties "^2.0.0"
"@babel/types@^7.15.0", "@babel/types@^7.4.4":
version "7.15.0"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.0.tgz#61af11f2286c4e9c69ca8deb5f4375a73c72dcbd"
integrity sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==
dependencies:
"@babel/helper-validator-identifier" "^7.14.9"
to-fast-properties "^2.0.0"
"@bcoe/v8-coverage@^0.2.3":
version "0.2.3"
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
@@ -1707,6 +1807,17 @@ browserslist@^4.16.6:
escalade "^3.1.1"
node-releases "^1.1.71"
browserslist@^4.16.7:
version "4.16.7"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.7.tgz#108b0d1ef33c4af1b587c54f390e7041178e4335"
integrity sha512-7I4qVwqZltJ7j37wObBe3SoTz+nS8APaNcrBOlgoirb6/HbEU2XxW/LpUDTCngM6iauwFqmRTuOMfyKnFGY5JA==
dependencies:
caniuse-lite "^1.0.30001248"
colorette "^1.2.2"
electron-to-chromium "^1.3.793"
escalade "^3.1.1"
node-releases "^1.1.73"
bser@2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"
@@ -1775,6 +1886,11 @@ caniuse-lite@^1.0.30001219:
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001248.tgz#26ab45e340f155ea5da2920dadb76a533cb8ebce"
integrity sha512-NwlQbJkxUFJ8nMErnGtT0QTM2TJ33xgz4KXJSMIrjXIbDVdaYueGyjOrLKRtJC+rTiWfi6j5cnZN1NBiSBJGNw==
caniuse-lite@^1.0.30001248:
version "1.0.30001251"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz#6853a606ec50893115db660f82c094d18f096d85"
integrity sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A==
capture-exit@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4"
@@ -1978,18 +2094,18 @@ copy-descriptor@^0.1.0:
resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
core-js-compat@^3.14.0, core-js-compat@^3.15.0:
version "3.16.0"
resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.16.0.tgz#fced4a0a534e7e02f7e084bff66c701f8281805f"
integrity sha512-5D9sPHCdewoUK7pSUPfTF7ZhLh8k9/CoJXWUEo+F1dZT5Z1DVgcuRqUKhjeKW+YLb8f21rTFgWwQJiNw1hoZ5Q==
core-js-compat@^3.14.0, core-js-compat@^3.16.0:
version "3.16.1"
resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.16.1.tgz#c44b7caa2dcb94b673a98f27eee1c8312f55bc2d"
integrity sha512-NHXQXvRbd4nxp9TEmooTJLUf94ySUG6+DSsscBpTftN1lQLQ4LjnWvc7AoIo4UjDsFF3hB8Uh5LLCRRdaiT5MQ==
dependencies:
browserslist "^4.16.6"
browserslist "^4.16.7"
semver "7.0.0"
core-js@^3.7.0:
version "3.16.0"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.16.0.tgz#1d46fb33720bc1fa7f90d20431f36a5540858986"
integrity sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==
version "3.16.1"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.16.1.tgz#f4485ce5c9f3c6a7cb18fa80488e08d362097249"
integrity sha512-AAkP8i35EbefU+JddyWi12AWE9f2N/qr/pwnDtWz4nyUIBGMJPX99ANFFRSw6FefM374lDujdtLDyhN2A/btHw==
core-util-is@1.0.2, core-util-is@~1.0.0:
version "1.0.2"
@@ -2202,6 +2318,11 @@ electron-to-chromium@^1.3.723:
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.791.tgz#e38f325ff22470bdcff34409d58c0baf9c2e3e93"
integrity sha512-Tdx7w1fZpeWOOBluK+kXTAKCXyc79K65RB6Zp0+sPSZZhDjXlrxfGlXrlMGVVQUrKCyEZFQs1UBBLNz5IdbF0g==
electron-to-chromium@^1.3.793:
version "1.3.805"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.805.tgz#a0873393a3b027ec60bdaf22a19c4946688cf941"
integrity sha512-uUJF59M6pNSRHQaXwdkaNB4BhSQ9lldRdG1qCjlrAFkynPGDc5wPoUcYEQQeQGmKyAWJPvGkYAWmtVrxWmDAkg==
emoji-regex@^7.0.1:
version "7.0.3"
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
@@ -3958,6 +4079,11 @@ node-releases@^1.1.71:
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20"
integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==
node-releases@^1.1.73:
version "1.1.74"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.74.tgz#e5866488080ebaa70a93b91144ccde06f3c3463e"
integrity sha512-caJBVempXZPepZoZAPCWRTNxYQ+xtG/KAi4ozTA5A+nJ7IU+kLQCbqaUjb5Rwy14M9upBWiQ4NutcmW04LJSRw==
nodemon@^2.0.1:
version "2.0.12"
resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.12.tgz#5dae4e162b617b91f1873b3bfea215dd71e144d5"

View File

@@ -3,4 +3,4 @@ node_modules
.DS_store
.env*
.env
*.sql

View File

@@ -27,6 +27,7 @@
"medusa-interfaces": "^1.1.21",
"nodemon": "^2.0.1",
"prettier": "^1.19.1",
"sqlite3": "^5.0.2",
"supertest": "^4.0.2"
},
"scripts": {
@@ -60,6 +61,7 @@
"fs-exists-cached": "^1.0.0",
"glob": "^7.1.6",
"ioredis": "^4.17.3",
"ioredis-mock": "^5.6.0",
"joi": "^17.3.0",
"joi-objectid": "^3.0.1",
"jsonwebtoken": "^8.5.1",
@@ -78,6 +80,7 @@
"request-ip": "^2.1.3",
"resolve-cwd": "^3.0.0",
"scrypt-kdf": "^2.0.1",
"sqlite3": "^5.0.2",
"ulid": "^2.3.0",
"uuid": "^8.3.1",
"winston": "^3.2.1"

View File

@@ -1,16 +1,39 @@
import { MedusaError } from "medusa-core-utils"
const QUERY_RUNNER_RELEASED = "QueryRunnerAlreadyReleasedError"
const TRANSACTION_STARTED = "TransactionAlreadyStartedError"
const TRANSACTION_NOT_STARTED = "TransactionNotStartedError"
const API_ERROR = "api_error"
const INVALID_REQUEST_ERROR = "invalid_request_error"
const INVALID_STATE_ERROR = "invalid_state_error"
export default () => {
return (err, req, res, next) => {
const logger = req.scope.resolve("logger")
logger.error(err.message)
logger.error(err)
console.error(err)
const errorType = err.type || err.name
const errObj = {
code: err.code,
type: err.type,
message: err.message,
}
let statusCode = 500
switch (err.name) {
case MedusaError.Types.DUPLICATE_ERROR:
switch (errorType) {
case QUERY_RUNNER_RELEASED:
case TRANSACTION_STARTED:
case TRANSACTION_NOT_STARTED:
statusCode = 409
errObj.code = INVALID_STATE_ERROR
errObj.message =
"The request conflicted with another request. You may retry the request with the provided Idempotency-Key."
break
case MedusaError.Types.DUPLICATE_ERROR:
statusCode = 402
errObj.code = INVALID_REQUEST_ERROR
break
case MedusaError.Types.NOT_ALLOWED:
case MedusaError.Types.INVALID_DATA:
@@ -21,14 +44,12 @@ export default () => {
break
case MedusaError.Types.DB_ERROR:
statusCode = 500
errObj.code = API_ERROR
break
default:
break
}
res.status(statusCode).json({
name: err.name,
message: err.message,
})
res.status(statusCode).json(errObj)
}
}

View File

@@ -58,7 +58,7 @@ describe("POST /admin/collections", () => {
})
it("returns error details", () => {
expect(subject.body.name).toEqual("invalid_data")
expect(subject.body.type).toEqual("invalid_data")
expect(subject.body.message[0].message).toEqual(`"title" is required`)
})
})

View File

@@ -135,7 +135,7 @@ describe("POST /admin/products", () => {
})
it("returns error details", () => {
expect(subject.body.name).toEqual("invalid_data")
expect(subject.body.type).toEqual("invalid_data")
expect(subject.body.message[0].message).toEqual(`"title" is required`)
})
})

View File

@@ -43,15 +43,14 @@ export default async (req, res) => {
const cartService = req.scope.resolve("cartService")
await manager.transaction(async m => {
await cartService
.withTransaction(m)
.addShippingMethod(id, value.option_id, value.data)
const updated = await cartService.withTransaction(m).retrieve(id, {
const txCartService = cartService.withTransaction(m)
await txCartService.addShippingMethod(id, value.option_id, value.data)
const updated = await txCartService.retrieve(id, {
relations: ["payment_sessions"],
})
if (updated.payment_sessions?.length) {
await cartService.withTransaction(m).setPaymentSessions(id)
await txCartService.setPaymentSessions(id)
}
})

View File

@@ -43,27 +43,27 @@ export default async (req, res) => {
const lineItemService = req.scope.resolve("lineItemService")
const cartService = req.scope.resolve("cartService")
let cart = await cartService.retrieve(id)
await manager.transaction(async m => {
const line = await lineItemService.generate(
value.variant_id,
cart.region_id,
value.quantity,
{ metadata: value.metadata }
)
await cartService.withTransaction(m).addLineItem(id, line)
const txCartService = cartService.withTransaction(m)
const cart = await txCartService.retrieve(id)
const updated = await cartService.withTransaction(m).retrieve(id, {
const line = await lineItemService
.withTransaction(m)
.generate(value.variant_id, cart.region_id, value.quantity, {
metadata: value.metadata,
})
await txCartService.addLineItem(id, line)
const updated = await txCartService.retrieve(id, {
relations: ["payment_sessions"],
})
if (updated.payment_sessions?.length) {
await cartService.withTransaction(m).setPaymentSessions(id)
await txCartService.setPaymentSessions(id)
}
})
cart = await cartService.retrieve(id, {
const cart = await cartService.retrieve(id, {
select: defaultFields,
relations: defaultRelations,
})

View File

@@ -61,7 +61,7 @@ describe("POST /store/customers", () => {
})
it("returns product decorated", () => {
expect(subject.body.name).toEqual("invalid_data")
expect(subject.body.type).toEqual("invalid_data")
})
})
})

View File

@@ -1,3 +1,4 @@
import path from "path"
import { spawn, execSync } from "child_process"
import chokidar from "chokidar"
@@ -9,12 +10,13 @@ export default async function({ port, directory }) {
args.shift()
args.shift()
execSync("babel src -d dist", {
const babelPath = path.join(directory, "node_modules", ".bin", "babel")
execSync(`${babelPath} src -d dist`, {
cwd: directory,
stdio: ["ignore", process.stdout, process.stderr],
})
const cliPath = "./node_modules/@medusajs/medusa/cli.js"
const cliPath = path.join(directory, "node_modules", ".bin", "medusa")
let child = spawn(cliPath, [`start`, ...args], {
cwd: directory,
env: process.env,
@@ -26,7 +28,7 @@ export default async function({ port, directory }) {
Logger.info(`${f} changed: restarting...`)
child.kill("SIGINT")
execSync(`babel src -d dist`, {
execSync(`./node_modules/.bin/babel src -d dist`, {
cwd: directory,
stdio: ["pipe", process.stdout, process.stderr],
})

View File

@@ -27,11 +27,13 @@ const t = async function({ directory, migrate, seedFile }) {
}
}
if (migrate) {
const { configModule } = getConfigFile(directory, `medusa-config`)
const dbType = configModule.projectConfig.database_type
if (migrate && dbType !== "sqlite") {
const migrationDirs = getMigrations(directory)
const { configModule } = getConfigFile(directory, `medusa-config`)
const connection = await createConnection({
type: configModule.projectConfig.database_type,
database: configModule.projectConfig.database_database,
url: configModule.projectConfig.database_url,
extra: configModule.projectConfig.database_extra || {},
migrations: migrationDirs,

View File

@@ -2,6 +2,7 @@ import "core-js/stable"
import "regenerator-runtime/runtime"
import express from "express"
import { track } from "medusa-telemetry"
import loaders from "../loaders"

View File

@@ -1,18 +1,27 @@
import { createConnection, Connection, DefaultNamingStrategy } from "typeorm"
import { createConnection } from "typeorm"
import { ShortenedNamingStrategy } from "../utils/naming-strategy"
export default async ({ container, configModule }) => {
const entities = container.resolve("db_entities")
const isSqlite = configModule.projectConfig.database_type === "sqlite"
const connection = await createConnection({
type: configModule.projectConfig.database_type,
url: configModule.projectConfig.database_url,
database: configModule.projectConfig.database_database,
extra: configModule.projectConfig.database_extra || {},
entities,
namingStrategy: new ShortenedNamingStrategy(),
logging: configModule.projectConfig.database_logging || false,
})
if (isSqlite) {
await connection.query(`PRAGMA foreign_keys = OFF`)
await connection.synchronize()
await connection.query(`PRAGMA foreign_keys = ON`)
}
return connection
}

View File

@@ -1,3 +1,6 @@
import { currencies } from "../utils/currencies"
import { countries } from "../utils/countries"
const silentResolution = (container, name, logger) => {
try {
const resolved = container.resolve(name)
@@ -29,11 +32,54 @@ const silentResolution = (container, name, logger) => {
export default async ({ container }) => {
const storeService = container.resolve("storeService")
const currencyRepository = container.resolve("currencyRepository")
const countryRepository = container.resolve("countryRepository")
const profileService = container.resolve("shippingProfileService")
const logger = container.resolve("logger")
const entityManager = container.resolve("manager")
await entityManager.transaction(async manager => {
const countryRepo = manager.getCustomRepository(countryRepository)
const hasCountries = await countryRepo.findOne()
if (!hasCountries) {
for (const c of countries) {
const query = `INSERT INTO "country" ("iso_2", "iso_3", "num_code", "name", "display_name") VALUES ($1, $2, $3, $4, $5)`
const iso2 = c.alpha2.toLowerCase()
const iso3 = c.alpha3.toLowerCase()
const numeric = c.numeric
const name = c.name.toUpperCase()
const display = c.name
await manager.queryRunner.query(query, [
iso2,
iso3,
numeric,
name,
display,
])
}
}
})
await entityManager.transaction(async manager => {
const currencyRepo = manager.getCustomRepository(currencyRepository)
const hasCurrencies = await currencyRepo.findOne()
if (!hasCurrencies) {
for (const [_, c] of Object.entries(currencies)) {
const query = `INSERT INTO "currency" ("code", "symbol", "symbol_native", "name") VALUES ($1, $2, $3, $4)`
const code = c.code.toLowerCase()
const sym = c.symbol
const nat = c.symbol_native
const name = c.name
await manager.queryRunner.query(query, [code, sym, nat, name])
}
}
})
await entityManager.transaction(async manager => {
await storeService.withTransaction(manager).create()

View File

@@ -1,4 +1,3 @@
import express from "express"
import session from "express-session"
import cookieParser from "cookie-parser"
import morgan from "morgan"
@@ -18,8 +17,24 @@ export default async ({ app, configModule }) => {
sameSite = "none"
}
const RedisStore = createStore(session)
const redisClient = redis.createClient(configModule.projectConfig.redis_url)
let sessionOpts = {
resave: true,
saveUninitialized: true,
cookieName: "session",
proxy: true,
secret: config.cookieSecret,
cookie: {
sameSite,
secure,
maxAge: 10 * 60 * 60 * 1000,
},
}
if (configModule.projectConfig.redis_url) {
const RedisStore = createStore(session)
const redisClient = redis.createClient(configModule.projectConfig.redis_url)
sessionOpts.store = new RedisStore({ client: redisClient })
}
app.set("trust proxy", 1)
app.use(
@@ -28,21 +43,7 @@ export default async ({ app, configModule }) => {
})
)
app.use(cookieParser())
app.use(
session({
store: new RedisStore({ client: redisClient }),
resave: true,
saveUninitialized: true,
cookieName: "session",
proxy: true,
secret: config.cookieSecret,
cookie: {
sameSite,
secure,
maxAge: 10 * 60 * 60 * 1000,
},
})
)
app.use(session(sessionOpts))
app.get("/health", (req, res) => {
res.status(200).send("OK")

View File

@@ -1,11 +1,11 @@
import { createContainer, asValue } from "awilix"
import Redis from "ioredis"
import requestIp from "request-ip"
import { getManager } from "typeorm"
import { getConfigFile } from "medusa-core-utils"
import { track } from "medusa-telemetry"
import expressLoader from "./express"
import redisLoader from "./redis"
import databaseLoader from "./database"
import repositoriesLoader from "./repositories"
import apiLoader from "./api"
@@ -18,10 +18,7 @@ import defaultsLoader from "./defaults"
import Logger from "./logger"
export default async ({ directory: rootDirectory, expressApp }) => {
const { configModule, configFilePath } = getConfigFile(
rootDirectory,
`medusa-config`
)
const { configModule } = getConfigFile(rootDirectory, `medusa-config`)
const container = createContainer()
container.registerAdd = function(name, registration) {
@@ -40,10 +37,6 @@ export default async ({ directory: rootDirectory, expressApp }) => {
return this
}.bind(container)
// Economical way of dealing with redis clients
const client = new Redis(configModule.projectConfig.redis_url)
const subscriber = new Redis(configModule.projectConfig.redis_url)
// Add additional information to context of request
expressApp.use((req, res, next) => {
const ipAddress = requestIp.getClientIp(req)
@@ -57,11 +50,11 @@ export default async ({ directory: rootDirectory, expressApp }) => {
})
container.register({
redisClient: asValue(client),
redisSubscriber: asValue(subscriber),
logger: asValue(Logger),
})
await redisLoader({ container, configModule, logger: Logger })
const modelsActivity = Logger.activity("Initializing models")
track("MODELS_INIT_STARTED")
modelsLoader({ container, activityId: modelsActivity })

View File

@@ -0,0 +1,34 @@
import { asValue } from "awilix"
import RealRedis from "ioredis"
import FakeRedis from "ioredis-mock"
const redisLoader = async ({ container, configModule, logger }) => {
if (configModule.projectConfig.redis_url) {
// Economical way of dealing with redis clients
const client = new RealRedis(configModule.projectConfig.redis_url)
const subscriber = new RealRedis(configModule.projectConfig.redis_url)
container.register({
redisClient: asValue(client),
redisSubscriber: asValue(subscriber),
})
} else {
if (process.env.NODE_ENV === "production") {
logger.warn(
`No Redis url was provided - using Medusa in production without a proper Redis instance is not recommended`
)
}
logger.info("Using fake Redis")
// Economical way of dealing with redis clients
const client = new FakeRedis()
container.register({
redisClient: asValue(client),
redisSubscriber: asValue(client),
})
}
}
export default redisLoader

View File

@@ -39,6 +39,7 @@ import {
JoinColumn,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { Customer } from "./customer"
import { Country } from "./country"
@@ -90,16 +91,16 @@ export class Address {
@Column({ nullable: true })
phone: string
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: "timestamptz" })
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: "timestamptz" })
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
@BeforeInsert()

View File

@@ -102,6 +102,7 @@ import {
BeforeUpdate,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { Region } from "./region"
import { Address } from "./address"
@@ -223,30 +224,30 @@ export class Cart {
)
shipping_methods: ShippingMethod[]
@Column({ type: "enum", enum: CartType, default: "default" })
@DbAwareColumn({ type: "enum", enum: CartType, default: "default" })
type: boolean
@Column({ type: "timestamptz", nullable: true })
@Column({ type: resolveDbType("timestamptz"), nullable: true })
completed_at: Date
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: "timestamptz" })
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: "timestamptz" })
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
@Column({ nullable: true })
idempotency_key: string
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
context: any
// Total fields
shipping_total: number
discount_total: number

View File

@@ -14,6 +14,8 @@ import { ulid } from "ulid"
import { ClaimItem } from "./claim-item"
import { DbAwareColumn, resolveDbType } from "../utils/db-aware-column"
@Entity()
export class ClaimImage {
@PrimaryColumn()
@@ -33,16 +35,16 @@ export class ClaimImage {
@Column()
url: string
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: "timestamptz" })
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: "timestamptz" })
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
@BeforeInsert()

View File

@@ -14,6 +14,7 @@ import {
JoinTable,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { LineItem } from "./line-item"
import { ClaimImage } from "./claim-image"
@@ -67,7 +68,7 @@ export class ClaimItem {
@JoinColumn({ name: "variant_id" })
variant: ProductVariant
@Column({ type: "enum", enum: ClaimReason })
@DbAwareColumn({ type: "enum", enum: ClaimReason })
reason: ClaimReason
@Column({ nullable: true })
@@ -90,16 +91,16 @@ export class ClaimItem {
})
tags: ClaimTag[]
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: "timestamptz" })
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: "timestamptz" })
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
@BeforeInsert()

View File

@@ -13,6 +13,7 @@ import {
JoinColumn,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { Fulfillment } from "./fulfillment"
import { LineItem } from "./line-item"
@@ -50,14 +51,14 @@ export class ClaimOrder {
@PrimaryColumn()
id: string
@Column({
@DbAwareColumn({
type: "enum",
enum: ClaimPaymentStatus,
default: ClaimPaymentStatus.NA,
})
payment_status: ClaimPaymentStatus
@Column({
@DbAwareColumn({
type: "enum",
enum: ClaimFulfillmentStatus,
default: ClaimFulfillmentStatus.NOT_FULFILLED,
@@ -77,7 +78,7 @@ export class ClaimOrder {
)
additional_items: LineItem[]
@Column({ type: "enum", enum: ClaimType })
@DbAwareColumn({ type: "enum", enum: ClaimType })
type: ClaimType
@Index()
@@ -122,22 +123,22 @@ export class ClaimOrder {
@Column({ type: "int", nullable: true })
refund_amount: number
@Column({ type: "timestamptz", nullable: true })
@Column({ type: resolveDbType("timestamptz"), nullable: true })
canceled_at: Date
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: "timestamptz" })
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: "timestamptz" })
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@Column({ type: "boolean", nullable: true})
@Column({ type: "boolean", nullable: true })
no_notification: Boolean
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
@Column({ nullable: true })

View File

@@ -12,6 +12,7 @@ import {
JoinColumn,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
@Entity()
export class ClaimTag {
@@ -22,16 +23,16 @@ export class ClaimTag {
@Column()
value: string
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: "timestamptz" })
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: "timestamptz" })
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
@BeforeInsert()

View File

@@ -12,6 +12,7 @@ import {
JoinColumn,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { Address } from "./address"
import { Order } from "./order"
@@ -60,16 +61,16 @@ export class Customer {
)
orders: Order[]
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: "timestamptz" })
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: "timestamptz" })
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
@BeforeInsert()

View File

@@ -11,6 +11,7 @@ import {
JoinTable,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { Product } from "./product"
@@ -33,7 +34,7 @@ export class DiscountRule {
@Column({ nullable: true })
description: string
@Column({
@DbAwareColumn({
type: "enum",
enum: DiscountRuleType,
})
@@ -42,7 +43,7 @@ export class DiscountRule {
@Column()
value: number
@Column({
@DbAwareColumn({
type: "enum",
enum: AllocationType,
nullable: true,
@@ -63,16 +64,16 @@ export class DiscountRule {
})
valid_for: Product[]
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: "timestamptz" })
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: "timestamptz" })
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
@BeforeInsert()

View File

@@ -14,6 +14,7 @@ import {
JoinColumn,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { DiscountRule } from "./discount-rule"
import { Region } from "./region"
@@ -48,10 +49,13 @@ export class Discount {
@JoinColumn({ name: "parent_discount_id" })
parent_discount: Discount
@Column({ type: "timestamptz", default: () => "CURRENT_TIMESTAMP" })
@Column({
type: resolveDbType("timestamptz"),
default: () => "CURRENT_TIMESTAMP",
})
starts_at: Date
@Column({ type: "timestamptz", nullable: true })
@Column({ type: resolveDbType("timestamptz"), nullable: true })
ends_at: Date
@ManyToMany(() => Region, { cascade: true })
@@ -74,16 +78,16 @@ export class Discount {
@Column({ default: 0 })
usage_count: number
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: "timestamptz" })
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: "timestamptz" })
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
@BeforeInsert()

View File

@@ -11,6 +11,12 @@ import {
JoinColumn,
} from "typeorm"
import { ulid } from "ulid"
import {
resolveDbType,
resolveDbGenerationStrategy,
DbAwareColumn,
} from "../utils/db-aware-column"
import { manualAutoIncrement } from "../utils/manual-auto-increment"
import { Cart } from "./cart"
import { Order } from "./order"
@@ -25,12 +31,12 @@ export class DraftOrder {
@PrimaryColumn()
id: string
@Column({ type: "enum", enum: DraftOrderStatus, default: "open" })
@DbAwareColumn({ type: "enum", enum: DraftOrderStatus, default: "open" })
status: DraftOrderStatus
@Index()
@Column()
@Generated("increment")
@Generated(resolveDbGenerationStrategy("increment"))
display_id: number
@Index()
@@ -49,32 +55,37 @@ export class DraftOrder {
@JoinColumn({ name: "order_id" })
order: Order
@Column({ nullable: true, type: "timestamptz" })
@Column({ nullable: true, type: resolveDbType("timestamptz") })
canceled_at: Date
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: "timestamptz" })
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@Column({ type: "timestamptz", nullable: true })
@Column({ type: resolveDbType("timestamptz"), nullable: true })
completed_at: Date
@Column({ nullable: true})
@Column({ nullable: true })
no_notification_order: boolean
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
@Column({ nullable: true })
idempotency_key: string
@BeforeInsert()
private beforeInsert() {
if (this.id) return
const id = ulid()
this.id = `dorder_${id}`
private async beforeInsert() {
if (!this.id) {
const id = ulid()
this.id = `dorder_${id}`
}
if (process.env.NODE_ENV === "development" && !this.display_id) {
this.display_id = await manualAutoIncrement("draft_order")
}
}
}

View File

@@ -16,6 +16,7 @@ import {
JoinTable,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { Order } from "./order"
import { FulfillmentProvider } from "./fulfillment-provider"
@@ -62,7 +63,7 @@ export class Fulfillment {
@JoinColumn({ name: "order_id" })
order: Order
@Column({ type: "boolean", nullable: true})
@Column({ type: "boolean", nullable: true })
no_notification: Boolean
@Index()
@@ -87,25 +88,25 @@ export class Fulfillment {
)
tracking_links: TrackingLink[]
@Column({ type: "jsonb", default: [] })
@DbAwareColumn({ type: "jsonb", default: [] })
tracking_numbers: string[]
@Column({ type: "jsonb" })
@DbAwareColumn({ type: "jsonb" })
data: any
@Column({ type: "timestamptz", nullable: true })
@Column({ type: resolveDbType("timestamptz"), nullable: true })
shipped_at: Date
@Column({ type: "timestamptz", nullable: true })
@Column({ type: resolveDbType("timestamptz"), nullable: true })
canceled_at: Date
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: "timestamptz" })
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
@Column({ nullable: true })

View File

@@ -10,6 +10,7 @@ import {
JoinColumn,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType } from "../utils/db-aware-column"
import { GiftCard } from "./gift-card"
import { Order } from "./order"
@@ -38,7 +39,7 @@ export class GiftCardTransaction {
@Column("int")
amount: number
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@BeforeInsert()

View File

@@ -11,6 +11,7 @@ import {
JoinColumn,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { Region } from "./region"
import { Order } from "./order"
@@ -50,21 +51,21 @@ export class GiftCard {
is_disabled: boolean
@Column({
type: "timestamptz",
type: resolveDbType("timestamptz"),
nullable: true,
})
ends_at: Date
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: "timestamptz" })
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: "timestamptz" })
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
@BeforeInsert()

View File

@@ -7,6 +7,7 @@ import {
PrimaryColumn,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
@Entity()
export class IdempotencyKey {
@@ -17,16 +18,16 @@ export class IdempotencyKey {
@Column()
idempotency_key: string
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@Column({ type: "timestamptz", nullable: true })
@DbAwareColumn({ type: "timestamptz", nullable: true })
locked_at: Date
@Column({ nullable: true })
request_method: string
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
request_params: any
@Column({ nullable: true })
@@ -35,7 +36,7 @@ export class IdempotencyKey {
@Column({ type: "int", nullable: true })
response_code: number
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
response_body: any
@Column({ default: "started" })

View File

@@ -8,6 +8,7 @@ import {
PrimaryColumn,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
@Entity()
export class Image {
@@ -17,16 +18,16 @@ export class Image {
@Column()
url: string
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: "timestamptz" })
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: "timestamptz" })
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
@BeforeInsert()

View File

@@ -11,6 +11,7 @@ import {
JoinColumn,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { Swap } from "./swap"
import { Cart } from "./cart"
@@ -115,13 +116,13 @@ export class LineItem {
@Column({ nullable: true, type: "int" })
shipped_quantity: number
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: "timestamptz" })
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
refundable: number | null

View File

@@ -16,6 +16,7 @@ import {
JoinTable,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { Currency } from "./currency"
import { ProductVariant } from "./product-variant"
@@ -55,13 +56,13 @@ export class MoneyAmount {
@JoinColumn({ name: "region_id" })
region: Region
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: "timestamptz" })
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: "timestamptz" })
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@BeforeInsert()

View File

@@ -11,6 +11,7 @@ import {
JoinColumn,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { Customer } from "./customer"
import { NotificationProvider } from "./notification-provider"
@@ -42,7 +43,7 @@ export class Notification {
@Column()
to: string
@Column({ type: "jsonb" })
@DbAwareColumn({ type: "jsonb" })
data: any
@Column({ nullable: true })
@@ -65,10 +66,10 @@ export class Notification {
@JoinColumn({ name: "provider_id" })
provider: NotificationProvider
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: "timestamptz" })
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@BeforeInsert()

View File

@@ -16,6 +16,7 @@ import {
JoinTable,
} from "typeorm"
import { ulid } from "ulid"
import { DbAwareColumn } from "../utils/db-aware-column"
@Entity()
export class Oauth {
@@ -35,7 +36,7 @@ export class Oauth {
@Column({ nullable: true })
uninstall_url: string
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
data: any
@BeforeInsert()

View File

@@ -15,6 +15,12 @@ import {
JoinTable,
} from "typeorm"
import { ulid } from "ulid"
import {
resolveDbType,
resolveDbGenerationStrategy,
DbAwareColumn,
} from "../utils/db-aware-column"
import { manualAutoIncrement } from "../utils/manual-auto-increment"
import { Address } from "./address"
import { LineItem } from "./line-item"
@@ -69,18 +75,22 @@ export class Order {
@PrimaryColumn()
id: string
@Column({ type: "enum", enum: OrderStatus, default: "pending" })
@DbAwareColumn({ type: "enum", enum: OrderStatus, default: "pending" })
status: OrderStatus
@Column({ type: "enum", enum: FulfillmentStatus, default: "not_fulfilled" })
@DbAwareColumn({
type: "enum",
enum: FulfillmentStatus,
default: "not_fulfilled",
})
fulfillment_status: FulfillmentStatus
@Column({ type: "enum", enum: PaymentStatus, default: "not_paid" })
@DbAwareColumn({ type: "enum", enum: PaymentStatus, default: "not_paid" })
payment_status: PaymentStatus
@Index()
@Column()
@Generated("increment")
@Generated(resolveDbGenerationStrategy("increment"))
display_id: number
@Index()
@@ -233,19 +243,19 @@ export class Order {
)
gift_card_transactions: GiftCardTransaction[]
@Column({ nullable: true, type: "timestamptz" })
@Column({ nullable: true, type: resolveDbType("timestamptz") })
canceled_at: Date
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: "timestamptz" })
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
@Column({ type: "boolean", nullable: true})
@Column({ type: "boolean", nullable: true })
no_notification: Boolean
@Column({ nullable: true })
@@ -263,10 +273,15 @@ export class Order {
gift_card_total: number
@BeforeInsert()
private beforeInsert() {
if (this.id) return
const id = ulid()
this.id = `order_${id}`
private async beforeInsert() {
if (!this.id) {
const id = ulid()
this.id = `order_${id}`
}
if (process.env.NODE_ENV === "development" && !this.display_id) {
this.display_id = await manualAutoIncrement("order")
}
}
}

View File

@@ -11,6 +11,7 @@ import {
Unique,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { Cart } from "./cart"
export enum PaymentSessionStatus {
@@ -45,16 +46,16 @@ export class PaymentSession {
@Column({ nullable: true })
is_selected: boolean
@Column({ type: "enum", enum: PaymentSessionStatus })
@DbAwareColumn({ type: "enum", enum: PaymentSessionStatus })
status: string
@Column({ type: "jsonb" })
@DbAwareColumn({ type: "jsonb" })
data: any
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: "timestamptz" })
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@Column({ nullable: true })

View File

@@ -11,6 +11,7 @@ import {
JoinColumn,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { Swap } from "./swap"
import { Currency } from "./currency"
@@ -67,22 +68,22 @@ export class Payment {
@Column()
provider_id: string
@Column({ type: "jsonb" })
@DbAwareColumn({ type: "jsonb" })
data: any
@Column({ type: "timestamptz", nullable: true })
@Column({ type: resolveDbType("timestamptz"), nullable: true })
captured_at: Date
@Column({ type: "timestamptz", nullable: true })
@Column({ type: resolveDbType("timestamptz"), nullable: true })
canceled_at: Date
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: "timestamptz" })
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
@Column({ nullable: true })

View File

@@ -11,6 +11,7 @@ import {
OneToMany,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import _ from "lodash"
import { Product } from "./product"
@@ -33,16 +34,16 @@ export class ProductCollection {
)
products: Product[]
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: "timestamptz" })
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: "timestamptz" })
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
@BeforeInsert()

View File

@@ -11,6 +11,7 @@ import {
PrimaryColumn,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { ProductOption } from "./product-option"
import { ProductVariant } from "./product-variant"
@@ -45,16 +46,16 @@ export class ProductOptionValue {
@JoinColumn({ name: "variant_id" })
variant: ProductVariant
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: "timestamptz" })
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: "timestamptz" })
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
@BeforeInsert()

View File

@@ -11,6 +11,7 @@ import {
JoinColumn,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { Product } from "./product"
import { ProductOptionValue } from "./product-option-value"
@@ -39,16 +40,16 @@ export class ProductOption {
@JoinColumn({ name: "product_id" })
product: Product
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: "timestamptz" })
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: "timestamptz" })
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
@BeforeInsert()

View File

@@ -8,6 +8,7 @@ import {
PrimaryColumn,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
@Entity()
export class ProductTag {
@@ -17,16 +18,16 @@ export class ProductTag {
@Column()
value: string
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: "timestamptz" })
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: "timestamptz" })
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
@BeforeInsert()

View File

@@ -8,6 +8,7 @@ import {
PrimaryColumn,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
@Entity()
export class ProductType {
@@ -17,16 +18,16 @@ export class ProductType {
@Column()
value: string
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: "timestamptz" })
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: "timestamptz" })
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
@BeforeInsert()

View File

@@ -14,6 +14,7 @@ import {
JoinTable,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { Product } from "./product"
import { MoneyAmount } from "./money-amount"
@@ -102,16 +103,16 @@ export class ProductVariant {
)
options: ProductOptionValue[]
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: "timestamptz" })
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: "timestamptz" })
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
@BeforeInsert()

View File

@@ -15,6 +15,7 @@ import {
JoinTable,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { Image } from "./image"
import { ProductCollection } from "./product-collection"
@@ -139,16 +140,16 @@ export class Product {
@Column({ default: true })
discountable: boolean
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: "timestamptz" })
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: "timestamptz" })
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
@BeforeInsert()

View File

@@ -11,6 +11,7 @@ import {
JoinColumn,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { Currency } from "./currency"
import { Cart } from "./cart"
@@ -46,16 +47,16 @@ export class Refund {
@Column({ nullable: true })
note: string
@Column({ type: "enum", enum: RefundReason })
@DbAwareColumn({ type: "enum", enum: RefundReason })
reason: string
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: "timestamptz" })
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
@Column({ nullable: true })

View File

@@ -13,6 +13,7 @@ import {
JoinColumn,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { Currency } from "./currency"
import { Country } from "./country"
@@ -74,16 +75,16 @@ export class Region {
})
fulfillment_providers: FulfillmentProvider[]
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: "timestamptz" })
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: "timestamptz" })
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
@BeforeInsert()

View File

@@ -15,6 +15,7 @@ import {
JoinColumn,
JoinTable,
} from "typeorm"
import { DbAwareColumn } from "../utils/db-aware-column"
import { ReturnReason } from "./return-reason"
import { Return } from "./return"
@@ -58,7 +59,7 @@ export class ReturnItem {
@Column({ nullable: true })
note: string
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
}

View File

@@ -9,6 +9,7 @@ import {
PrimaryColumn,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
@Entity()
export class ReturnReason {
@@ -25,16 +26,16 @@ export class ReturnReason {
@Column({ nullable: true })
description: string
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: "timestamptz" })
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: "timestamptz" })
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
@BeforeInsert()

View File

@@ -16,6 +16,7 @@ import {
JoinTable,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { Order } from "./order"
import { Swap } from "./swap"
@@ -34,7 +35,11 @@ export class Return {
@PrimaryColumn()
id: string
@Column({ type: "enum", enum: ReturnStatus, default: ReturnStatus.REQUESTED })
@DbAwareColumn({
type: "enum",
enum: ReturnStatus,
default: ReturnStatus.REQUESTED,
})
status: ReturnStatus
@OneToMany(
@@ -84,25 +89,25 @@ export class Return {
)
shipping_method: ShippingMethod
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
shipping_data: any
@Column({ type: "int" })
refund_amount: number
@Column({ type: "timestamptz", nullable: true })
@Column({ type: resolveDbType("timestamptz"), nullable: true })
received_at: Date
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: "timestamptz" })
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@Column({ type: "boolean", nullable: true})
@Column({ type: "boolean", nullable: true })
no_notification: Boolean
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
@Column({ nullable: true })

View File

@@ -10,6 +10,7 @@ import {
Index,
} from "typeorm"
import { ulid } from "ulid"
import { DbAwareColumn } from "../utils/db-aware-column"
import { ClaimOrder } from "./claim-order"
import { Order } from "./order"
@@ -81,7 +82,7 @@ export class ShippingMethod {
@Column({ type: "int" })
price: number
@Column({ type: "jsonb" })
@DbAwareColumn({ type: "jsonb" })
data: any
@BeforeInsert()

View File

@@ -16,6 +16,7 @@ import {
JoinTable,
} from "typeorm"
import { ulid } from "ulid"
import { DbAwareColumn } from "../utils/db-aware-column"
import { ShippingOption } from "./shipping-option"
@@ -37,7 +38,7 @@ export class ShippingOptionRequirement {
@JoinColumn({ name: "shipping_option_id" })
shipping_option: ShippingOption
@Column({ type: "enum", enum: RequirementType })
@DbAwareColumn({ type: "enum", enum: RequirementType })
type: RequirementType
@Column({ type: "int" })

View File

@@ -17,6 +17,7 @@ import {
JoinTable,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { ShippingProfile } from "./shipping-profile"
import { Region } from "./region"
@@ -61,7 +62,7 @@ export class ShippingOption {
@JoinColumn({ name: "provider_id" })
provider: FulfillmentProvider
@Column({ type: "enum", enum: ShippingOptionPriceType })
@DbAwareColumn({ type: "enum", enum: ShippingOptionPriceType })
price_type: ShippingOptionPriceType
@Column({ type: "int", nullable: true })
@@ -80,19 +81,19 @@ export class ShippingOption {
)
requirements: ShippingOptionRequirement[]
@Column({ type: "jsonb" })
@DbAwareColumn({ type: "jsonb" })
data: any
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: "timestamptz" })
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: "timestamptz" })
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
@BeforeInsert()

View File

@@ -5,16 +5,11 @@ import {
DeleteDateColumn,
CreateDateColumn,
UpdateDateColumn,
RelationId,
PrimaryColumn,
OneToOne,
OneToMany,
ManyToOne,
ManyToMany,
JoinColumn,
JoinTable,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { ShippingOption } from "./shipping-option"
import { Product } from "./product"
@@ -33,7 +28,7 @@ export class ShippingProfile {
@Column()
name: string
@Column({ type: "enum", enum: ShippingProfileType })
@DbAwareColumn({ type: "enum", enum: ShippingProfileType })
type: ShippingProfileType
@OneToMany(
@@ -48,16 +43,16 @@ export class ShippingProfile {
)
shipping_options: ShippingOption[]
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: "timestamptz" })
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: "timestamptz" })
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
@BeforeInsert()

View File

@@ -15,6 +15,7 @@ import {
JoinTable,
} from "typeorm"
import { ulid } from "ulid"
import { DbAwareColumn } from "../utils/db-aware-column"
@Entity()
export class StagedJob {
@@ -24,7 +25,7 @@ export class StagedJob {
@Column()
event_name: string
@Column({ type: "jsonb" })
@DbAwareColumn({ type: "jsonb" })
data: any
@BeforeInsert()

View File

@@ -15,6 +15,7 @@ import {
JoinTable,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { Currency } from "./currency"
@@ -53,13 +54,13 @@ export class Store {
@Column({ nullable: true })
payment_link_template: string
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: "timestamptz" })
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
@BeforeInsert()

View File

@@ -15,6 +15,7 @@ import {
JoinTable,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { Order } from "./order"
import { Fulfillment } from "./fulfillment"
@@ -49,10 +50,10 @@ export class Swap {
@PrimaryColumn()
id: string
@Column({ type: "enum", enum: FulfillmentStatus })
@DbAwareColumn({ type: "enum", enum: FulfillmentStatus })
fulfillment_status: FulfillmentStatus
@Column({ type: "enum", enum: PaymentStatus })
@DbAwareColumn({ type: "enum", enum: PaymentStatus })
payment_status: PaymentStatus
@Index()
@@ -118,22 +119,22 @@ export class Swap {
@JoinColumn({ name: "cart_id" })
cart: Cart
@Column({ type: "timestamptz", nullable: true })
@Column({ type: resolveDbType("timestamptz"), nullable: true })
confirmed_at: Date
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: "timestamptz" })
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: "timestamptz" })
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@Column({ type: "boolean", nullable: true})
@Column({ type: "boolean", nullable: true })
no_notification: Boolean
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
@Column({ nullable: true })

View File

@@ -15,6 +15,7 @@ import {
JoinTable,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
import { Fulfillment } from "./fulfillment"
@@ -39,16 +40,16 @@ export class TrackingLink {
@JoinColumn({ name: "fulfillment_id" })
fulfillment: Fulfillment
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: "timestamptz" })
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: "timestamptz" })
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
@Column({ nullable: true })

View File

@@ -9,6 +9,7 @@ import {
PrimaryColumn,
} from "typeorm"
import { ulid } from "ulid"
import { resolveDbType, DbAwareColumn } from "../utils/db-aware-column"
@Entity()
export class User {
@@ -31,16 +32,16 @@ export class User {
@Column({ nullable: true })
api_token: string
@CreateDateColumn({ type: "timestamptz" })
@CreateDateColumn({ type: resolveDbType("timestamptz") })
created_at: Date
@UpdateDateColumn({ type: "timestamptz" })
@UpdateDateColumn({ type: resolveDbType("timestamptz") })
updated_at: Date
@DeleteDateColumn({ type: "timestamptz" })
@DeleteDateColumn({ type: resolveDbType("timestamptz") })
deleted_at: Date
@Column({ type: "jsonb", nullable: true })
@DbAwareColumn({ type: "jsonb", nullable: true })
metadata: any
@BeforeInsert()

View File

@@ -13,6 +13,9 @@ describe("LineItemService", () => {
})
const regionService = {
withTransaction: function() {
return this
},
retrieve: () => {
return {
id: IdMap.getId("test-region"),
@@ -21,6 +24,9 @@ describe("LineItemService", () => {
}
const productVariantService = {
withTransaction: function() {
return this
},
retrieve: query => {
if (query === IdMap.getId("test-giftcard")) {
return {

View File

@@ -20,7 +20,10 @@ class EventBusService {
case "subscriber":
return redisSubscriber
default:
return new Redis(config.projectConfig.redis_url)
if (config.projectConfig.redis_url) {
return new Redis(config.projectConfig.redis_url)
}
return redisClient
}
},
}

View File

@@ -90,45 +90,50 @@ class LineItemService extends BaseService {
}
async generate(variantId, regionId, quantity, config = {}) {
const variant = await this.productVariantService_.retrieve(variantId, {
relations: ["product"],
})
return this.atomicPhase_(async manager => {
const variant = await this.productVariantService_
.withTransaction(manager)
.retrieve(variantId, {
relations: ["product"],
})
const region = await this.regionService_.retrieve(regionId)
const region = await this.regionService_
.withTransaction(manager)
.retrieve(regionId)
let price
let shouldMerge = true
let price
let shouldMerge = true
if (config.unit_price && typeof config.unit_price !== `undefined`) {
// if custom unit_price, we ensure positive values
// and we choose to not merge the items
shouldMerge = false
if (config.unit_price < 0) {
price = 0
if (config.unit_price && typeof config.unit_price !== `undefined`) {
// if custom unit_price, we ensure positive values
// and we choose to not merge the items
shouldMerge = false
if (config.unit_price < 0) {
price = 0
} else {
price = config.unit_price
}
} else {
price = config.unit_price
price = await this.productVariantService_
.withTransaction(manager)
.getRegionPrice(variant.id, region.id)
}
} else {
price = await this.productVariantService_.getRegionPrice(
variant.id,
region.id
)
}
const toCreate = {
unit_price: price,
title: variant.product.title,
description: variant.title,
thumbnail: variant.product.thumbnail,
variant_id: variant.id,
quantity: quantity || 1,
allow_discounts: variant.product.discountable,
is_giftcard: variant.product.is_giftcard,
metadata: config?.metadata || {},
should_merge: shouldMerge,
}
const toCreate = {
unit_price: price,
title: variant.product.title,
description: variant.title,
thumbnail: variant.product.thumbnail,
variant_id: variant.id,
quantity: quantity || 1,
allow_discounts: variant.product.discountable,
is_giftcard: variant.product.is_giftcard,
metadata: config?.metadata || {},
should_merge: shouldMerge,
}
return toCreate
return toCreate
})
}
/**

View File

@@ -0,0 +1,58 @@
import path from "path"
import { Column, ColumnOptions, ColumnType } from "typeorm"
import { getConfigFile } from "medusa-core-utils"
const pgSqliteTypeMapping: { [key: string]: ColumnType } = {
increment: "rowid",
timestamptz: "datetime",
jsonb: "simple-json",
enum: "text",
}
const pgSqliteGenerationMapping: {
[key: string]: "increment" | "uuid" | "rowid"
} = {
increment: "rowid",
}
let dbType: string
export function resolveDbType(pgSqlType: ColumnType): ColumnType {
if (!dbType) {
const { configModule } = getConfigFile(path.resolve("."), `medusa-config`)
dbType = configModule.projectConfig.database_type
}
if (dbType === "sqlite" && pgSqlType in pgSqliteTypeMapping) {
return pgSqliteTypeMapping[pgSqlType.toString()]
}
return pgSqlType
}
export function resolveDbGenerationStrategy(
pgSqlType: "increment" | "uuid" | "rowid"
): "increment" | "uuid" | "rowid" {
if (!dbType) {
const { configModule } = getConfigFile(path.resolve("."), `medusa-config`)
dbType = configModule.projectConfig.database_type
}
if (dbType === "sqlite" && pgSqlType in pgSqliteTypeMapping) {
return pgSqliteGenerationMapping[pgSqlType]
}
return pgSqlType
}
export function DbAwareColumn(columnOptions: ColumnOptions) {
const pre = columnOptions.type
if (columnOptions.type) {
columnOptions.type = resolveDbType(columnOptions.type)
}
if (pre === "jsonb" && pre !== columnOptions.type) {
if ("default" in columnOptions) {
columnOptions.default = JSON.stringify(columnOptions.default)
}
}
return Column(columnOptions)
}

View File

@@ -0,0 +1,24 @@
import path from "path"
import { getConnection } from "typeorm"
import { getConfigFile } from "medusa-core-utils"
export async function manualAutoIncrement(
tableName: string
): Promise<number | null> {
const { configModule } = getConfigFile(path.resolve("."), `medusa-config`)
const dbType = configModule.projectConfig.database_type
if (dbType === "sqlite") {
const connection = getConnection()
const [rec] = await connection.query(
`SELECT MAX(rowid) as mr FROM "${tableName}"`
)
let mr = 0
if (rec && rec.mr) {
mr = rec.mr
}
return mr + 1
}
return null
}

View File

@@ -1229,10 +1229,10 @@
"@types/yargs" "^15.0.0"
chalk "^3.0.0"
"@medusajs/medusa-cli@^1.1.14":
version "1.1.14"
resolved "https://registry.yarnpkg.com/@medusajs/medusa-cli/-/medusa-cli-1.1.14.tgz#3abe5ae2aeba9126a83912d73f4212a259513aad"
integrity sha512-rmC54zBn5Sz+03/i+CzKzIdiCP3YJi/aQhhnJG80+w4nMkH/9lt///4NlbySYFYtIw7ORq8zkOza3//LVKRk4A==
"@medusajs/medusa-cli@^1.1.15":
version "1.1.15"
resolved "https://registry.yarnpkg.com/@medusajs/medusa-cli/-/medusa-cli-1.1.15.tgz#01837aeb8850349b204a85cb2bbac0d5ce166eeb"
integrity sha512-WxToDuksYZWSUvrKhOvETwzBGgOqhd9q2l2kGLOV997bMu/elj90Nhzrf0jZ+ioNsXmebq7aw6/fCrmZc9KxbQ==
dependencies:
"@babel/polyfill" "^7.8.7"
"@babel/runtime" "^7.9.6"
@@ -1251,6 +1251,7 @@
joi-objectid "^3.0.1"
meant "^1.0.1"
medusa-core-utils "^0.1.27"
medusa-telemetry "^0.0.2"
netrc-parser "^3.1.6"
open "^8.0.6"
ora "^5.4.1"
@@ -1581,6 +1582,11 @@ ansi-escapes@^4.2.1, ansi-escapes@^4.3.0:
dependencies:
type-fest "^0.21.3"
ansi-regex@^2.0.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
ansi-regex@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
@@ -1636,6 +1642,19 @@ append-field@^1.0.0:
resolved "https://registry.yarnpkg.com/append-field/-/append-field-1.0.0.tgz#1e3440e915f0b1203d23748e78edd7b9b5b43e56"
integrity sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=
aproba@^1.0.3:
version "1.2.0"
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
are-we-there-yet@~1.1.2:
version "1.1.5"
resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
dependencies:
delegates "^1.0.0"
readable-stream "^2.0.6"
argparse@^1.0.7:
version "1.0.10"
resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
@@ -1738,6 +1757,13 @@ aws4@^1.8.0:
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
axios-retry@^3.1.9:
version "3.1.9"
resolved "https://registry.yarnpkg.com/axios-retry/-/axios-retry-3.1.9.tgz#6c30fc9aeb4519aebaec758b90ef56fa03fe72e8"
integrity sha512-NFCoNIHq8lYkJa6ku4m+V1837TP6lCa7n79Iuf8/AqATAHYB0ISaAS1eyIenDOfHOLtym34W65Sjke2xjg2fsA==
dependencies:
is-retry-allowed "^1.1.0"
axios@^0.21.1:
version "0.21.1"
resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8"
@@ -1913,6 +1939,13 @@ bl@^4.1.0:
inherits "^2.0.4"
readable-stream "^3.4.0"
block-stream@*:
version "0.0.9"
resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=
dependencies:
inherits "~2.0.0"
body-parser@1.19.0, body-parser@^1.19.0:
version "1.19.0"
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a"
@@ -1943,6 +1976,20 @@ boxen@^4.2.0:
type-fest "^0.8.1"
widest-line "^3.1.0"
boxen@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.0.1.tgz#657528bdd3f59a772b8279b831f27ec2c744664b"
integrity sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA==
dependencies:
ansi-align "^3.0.0"
camelcase "^6.2.0"
chalk "^4.1.0"
cli-boxes "^2.2.1"
string-width "^4.2.0"
type-fest "^0.20.2"
widest-line "^3.1.0"
wrap-ansi "^7.0.0"
brace-expansion@^1.1.7:
version "1.1.11"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
@@ -2110,6 +2157,11 @@ camelcase@^5.0.0, camelcase@^5.3.1:
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
camelcase@^6.2.0:
version "6.2.0"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809"
integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==
caniuse-lite@^1.0.30001219:
version "1.0.30001236"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001236.tgz#0a80de4cdf62e1770bb46a30d884fc8d633e3958"
@@ -2180,11 +2232,21 @@ chokidar@^3.2.2, chokidar@^3.4.0, chokidar@^3.4.2:
optionalDependencies:
fsevents "~2.3.1"
chownr@^1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
ci-info@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
ci-info@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.2.0.tgz#2876cb948a498797b5236f0095bc057d0dca38b6"
integrity sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==
class-utils@^0.3.5:
version "0.3.6"
resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
@@ -2202,7 +2264,7 @@ clean-stack@^3.0.0:
dependencies:
escape-string-regexp "4.0.0"
cli-boxes@^2.2.0:
cli-boxes@^2.2.0, cli-boxes@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f"
integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==
@@ -2295,6 +2357,11 @@ co@^4.6.0:
resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
code-point-at@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
collect-v8-coverage@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59"
@@ -2415,6 +2482,11 @@ connect-redis@^5.0.0:
resolved "https://registry.yarnpkg.com/connect-redis/-/connect-redis-5.2.0.tgz#d38e173f2e2cccecb89b8757ce7627ecdb8e3b94"
integrity sha512-wcv1lZWa2K7RbsdSlrvwApBQFLQx+cia+oirLIeim0axR3D/9ZJbHdeTM/j8tJYYKk34dVs2QPAuAqcIklWD+Q==
console-control-strings@^1.0.0, console-control-strings@~1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
content-disposition@0.5.3:
version "0.5.3"
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd"
@@ -2680,6 +2752,11 @@ delayed-stream@~1.0.0:
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
delegates@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
denque@^1.1.0, denque@^1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/denque/-/denque-1.5.0.tgz#773de0686ff2d8ec2ff92914316a47b73b1c73de"
@@ -2700,6 +2777,11 @@ destroy@~1.0.4:
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
detect-libc@^1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
detect-newline@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"
@@ -3249,6 +3331,20 @@ fecha@^4.2.0:
resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.1.tgz#0a83ad8f86ef62a091e22bb5a039cd03d23eecce"
integrity sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==
fengari-interop@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/fengari-interop/-/fengari-interop-0.1.2.tgz#f7731dcdd2ff4449073fb7ac3c451a8841ce1e87"
integrity sha512-8iTvaByZVoi+lQJhHH9vC+c/Yaok9CwOqNQZN6JrVpjmWwW4dDkeblBXhnHC+BoI6eF4Cy5NKW3z6ICEjvgywQ==
fengari@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/fengari/-/fengari-0.1.4.tgz#72416693cd9e43bd7d809d7829ddc0578b78b0bb"
integrity sha512-6ujqUuiIYmcgkGz8MGAdERU57EIluGGPSUgGPTsco657EHa+srq0S3/YUl/r9kx1+D+d4rGfYObd+m8K22gB1g==
dependencies:
readline-sync "^1.4.9"
sprintf-js "^1.1.1"
tmp "^0.0.33"
figures@^3.0.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
@@ -3405,6 +3501,13 @@ fs-extra@^8.1:
jsonfile "^4.0.0"
universalify "^0.1.0"
fs-minipass@^1.2.7:
version "1.2.7"
resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7"
integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==
dependencies:
minipass "^2.6.0"
fs-readdir-recursive@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27"
@@ -3420,6 +3523,16 @@ fsevents@^2.1.2, fsevents@~2.3.1:
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
fstream@^1.0.0, fstream@^1.0.12:
version "1.0.12"
resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045"
integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==
dependencies:
graceful-fs "^4.1.2"
inherits "~2.0.0"
mkdirp ">=0.5 0"
rimraf "2"
function-bind@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
@@ -3430,6 +3543,20 @@ functional-red-black-tree@^1.0.1:
resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
gauge@~2.7.3:
version "2.7.4"
resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
dependencies:
aproba "^1.0.3"
console-control-strings "^1.0.0"
has-unicode "^2.0.0"
object-assign "^4.1.0"
signal-exit "^3.0.0"
string-width "^1.0.1"
strip-ansi "^3.0.1"
wide-align "^1.1.0"
gensync@^1.0.0-beta.2:
version "1.0.0-beta.2"
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
@@ -3510,7 +3637,7 @@ glob-parent@^5.0.0, glob-parent@^5.1.2, glob-parent@~5.1.0:
dependencies:
is-glob "^4.0.1"
glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
version "7.1.7"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"
integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==
@@ -3613,6 +3740,11 @@ has-symbols@^1.0.1, has-symbols@^1.0.2:
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423"
integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==
has-unicode@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
has-value@^0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
@@ -3731,7 +3863,7 @@ hyperlinker@^1.0.0:
resolved "https://registry.yarnpkg.com/hyperlinker/-/hyperlinker-1.0.0.tgz#23dc9e38a206b208ee49bc2d6c8ef47027df0c0e"
integrity sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==
iconv-lite@0.4.24, iconv-lite@^0.4.24:
iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
@@ -3748,6 +3880,13 @@ ignore-by-default@^1.0.1:
resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09"
integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk=
ignore-walk@^3.0.1:
version "3.0.4"
resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.4.tgz#c9a09f69b7c7b479a5d74ac1a3c0d4236d2a6335"
integrity sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==
dependencies:
minimatch "^3.0.4"
ignore@^4.0.6:
version "4.0.6"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
@@ -3797,7 +3936,7 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3:
inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@@ -3856,6 +3995,16 @@ inquirer@^8.0.0:
strip-ansi "^6.0.0"
through "^2.3.6"
ioredis-mock@^5.6.0:
version "5.6.0"
resolved "https://registry.yarnpkg.com/ioredis-mock/-/ioredis-mock-5.6.0.tgz#f60f9fbc3a53b50f567be9369e2b211ed52c0653"
integrity sha512-Ow+tyKdijg/gA2gSEv7lq8dLp6bO7FnwDXbJ9as37NF23XNRGMLzBc7ITaqMydfrbTodWnLcE2lKEaBs7SBpyA==
dependencies:
fengari "^0.1.4"
fengari-interop "^0.1.2"
lodash "^4.17.21"
standard-as-callback "^2.1.0"
ioredis@^4.17.3, ioredis@^4.27.0:
version "4.27.5"
resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-4.27.5.tgz#b62192bb6198f8a5a02947902117150aef39b7f1"
@@ -3993,7 +4142,7 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2:
is-data-descriptor "^1.0.0"
kind-of "^6.0.2"
is-docker@^2.0.0, is-docker@^2.1.1:
is-docker@^2.0.0, is-docker@^2.1.1, is-docker@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
@@ -4020,6 +4169,13 @@ is-extglob@^2.1.0, is-extglob@^2.1.1:
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
is-fullwidth-code-point@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
dependencies:
number-is-nan "^1.0.0"
is-fullwidth-code-point@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
@@ -4141,6 +4297,11 @@ is-regex@^1.1.3:
call-bind "^1.0.2"
has-symbols "^1.0.2"
is-retry-allowed@^1.1.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4"
integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==
is-stream@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
@@ -5071,28 +5232,42 @@ medusa-core-utils@^0.1.27:
"@hapi/joi" "^16.1.8"
joi-objectid "^3.0.1"
medusa-core-utils@^1.1.19:
version "1.1.19"
resolved "https://registry.yarnpkg.com/medusa-core-utils/-/medusa-core-utils-1.1.19.tgz#d792cfd487e9fd80c41fed0ffbfdf6d677777c22"
integrity sha512-tNEpRFh0siqHSyTNtvMzsckyar2+TcM78xdoiC9qtkdYvNEgou5dXm4YRH0pBtYQSOyOaSll6nUwqFM1p2zhOg==
medusa-core-utils@^1.1.20:
version "1.1.20"
resolved "https://registry.yarnpkg.com/medusa-core-utils/-/medusa-core-utils-1.1.20.tgz#676c0dc863a206b80cc53299a984c532d07df65f"
integrity sha512-gf+/L5eeqHea3xgjwD7YZEzfUGlxbjfvaeiiGWi3Wfu0dLa+G1B4S0TsX+upR+oVeWPmk66VMqWC80h3e4csqw==
dependencies:
joi "^17.3.0"
joi-objectid "^3.0.1"
medusa-interfaces@^1.1.20:
version "1.1.20"
resolved "https://registry.yarnpkg.com/medusa-interfaces/-/medusa-interfaces-1.1.20.tgz#66fcb1e351cae95305714c239393ba63c96fe3e0"
integrity sha512-54WIK9E65QVecqcaLuoJFvhJQclQnOb2q6ASk3sdZZk3QPl6mVGqg7dKJZwU3xSnhoQ3Up7cPtduGpvXHTMmIw==
medusa-interfaces@^1.1.21:
version "1.1.21"
resolved "https://registry.yarnpkg.com/medusa-interfaces/-/medusa-interfaces-1.1.21.tgz#ca86808e939b7ecc21a6d316008a4e41f163619f"
integrity sha512-mlHHoMIOFBc+Exs+uVIQsfeEP2C1Pi6IZHcpbm7O00tYBdQdqRjJre9+Z/I/Z37wt5IwA28/TIoVkYG71iQYxw==
dependencies:
medusa-core-utils "^1.1.19"
medusa-core-utils "^1.1.20"
medusa-test-utils@^1.1.22:
version "1.1.22"
resolved "https://registry.yarnpkg.com/medusa-test-utils/-/medusa-test-utils-1.1.22.tgz#2839fa8023f6f4a7a1170bfdb3a27443923efe3b"
integrity sha512-ZaQmQ+hjrQNs9XsmmROXKJ2QZ23FAD29jLAhUVIwxd11NQ/gZof2F2dgqWyA6sIXKn82tMCTgpiE3KWDtnbA7Q==
medusa-telemetry@^0.0.2:
version "0.0.2"
resolved "https://registry.yarnpkg.com/medusa-telemetry/-/medusa-telemetry-0.0.2.tgz#f3324eb3703b3f877f472dce450b5ad600a9a8f1"
integrity sha512-pZYYcXWPBkfoDSvReR9Aph3pKiXHf6sBiijtI+eSTvA1RmuPGktL7xpiKdGOG6IBKQpeqQRRfX0rV9bptu/PRg==
dependencies:
axios "^0.21.1"
axios-retry "^3.1.9"
boxen "^5.0.1"
ci-info "^3.2.0"
configstore "5.0.1"
is-docker "^2.2.1"
remove-trailing-slash "^0.1.1"
uuid "^8.3.2"
medusa-test-utils@^1.1.23:
version "1.1.23"
resolved "https://registry.yarnpkg.com/medusa-test-utils/-/medusa-test-utils-1.1.23.tgz#e8380df499979cd0b97a5bb87779662f4da9d722"
integrity sha512-okyUgB4t7bqDieE0XO+HkbVVemn6hE1tTAtF9PXRi2igmKmcnyW/Ljk3lqrKYVhjei4z3Z/b+K2b0oNwhopbGQ==
dependencies:
"@babel/plugin-transform-classes" "^7.9.5"
medusa-core-utils "^1.1.19"
medusa-core-utils "^1.1.20"
randomatic "^3.1.1"
merge-descriptors@1.0.1:
@@ -5181,6 +5356,21 @@ minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5:
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
minipass@^2.6.0, minipass@^2.9.0:
version "2.9.0"
resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6"
integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==
dependencies:
safe-buffer "^5.1.2"
yallist "^3.0.0"
minizlib@^1.3.3:
version "1.3.3"
resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d"
integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==
dependencies:
minipass "^2.9.0"
mixin-deep@^1.2.0:
version "1.3.2"
resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
@@ -5189,7 +5379,7 @@ mixin-deep@^1.2.0:
for-in "^1.0.2"
is-extendable "^1.0.1"
mkdirp@^0.5.1:
"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.5:
version "0.5.5"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
@@ -5285,6 +5475,15 @@ natural-orderby@^2.0.1:
resolved "https://registry.yarnpkg.com/natural-orderby/-/natural-orderby-2.0.3.tgz#8623bc518ba162f8ff1cdb8941d74deb0fdcc016"
integrity sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==
needle@^2.2.1:
version "2.8.0"
resolved "https://registry.yarnpkg.com/needle/-/needle-2.8.0.tgz#1c8ef9c1a2c29dcc1e83d73809d7bc681c80a048"
integrity sha512-ZTq6WYkN/3782H1393me3utVYdq2XyqNUFBsprEE3VMAT0+hP/cItpnITpqsY6ep2yeFE4Tqtqwc74VqUlUYtw==
dependencies:
debug "^3.2.6"
iconv-lite "^0.4.4"
sax "^1.2.4"
negotiator@0.6.2:
version "0.6.2"
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
@@ -5311,6 +5510,29 @@ no-case@^3.0.4:
lower-case "^2.0.2"
tslib "^2.0.3"
node-addon-api@^3.0.0:
version "3.2.1"
resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161"
integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==
node-gyp@3.x:
version "3.8.0"
resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c"
integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==
dependencies:
fstream "^1.0.0"
glob "^7.0.3"
graceful-fs "^4.1.2"
mkdirp "^0.5.0"
nopt "2 || 3"
npmlog "0 || 1 || 2 || 3 || 4"
osenv "0"
request "^2.87.0"
rimraf "2"
semver "~5.3.0"
tar "^2.0.0"
which "1"
node-int64@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
@@ -5332,6 +5554,22 @@ node-notifier@^6.0.0:
shellwords "^0.1.1"
which "^1.3.1"
node-pre-gyp@^0.11.0:
version "0.11.0"
resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz#db1f33215272f692cd38f03238e3e9b47c5dd054"
integrity sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==
dependencies:
detect-libc "^1.0.2"
mkdirp "^0.5.1"
needle "^2.2.1"
nopt "^4.0.1"
npm-packlist "^1.1.6"
npmlog "^4.0.2"
rc "^1.2.7"
rimraf "^2.6.1"
semver "^5.3.0"
tar "^4"
node-releases@^1.1.71:
version "1.1.73"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20"
@@ -5353,6 +5591,21 @@ nodemon@^2.0.1:
undefsafe "^2.0.3"
update-notifier "^4.1.0"
"nopt@2 || 3":
version "3.0.6"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k=
dependencies:
abbrev "1"
nopt@^4.0.1:
version "4.0.3"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48"
integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==
dependencies:
abbrev "1"
osenv "^0.1.4"
nopt@~1.0.10:
version "1.0.10"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee"
@@ -5387,6 +5640,27 @@ normalize-url@^4.1.0:
resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a"
integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==
npm-bundled@^1.0.1:
version "1.1.2"
resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1"
integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==
dependencies:
npm-normalize-package-bin "^1.0.1"
npm-normalize-package-bin@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2"
integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==
npm-packlist@^1.1.6:
version "1.4.8"
resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e"
integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==
dependencies:
ignore-walk "^3.0.1"
npm-bundled "^1.0.1"
npm-normalize-package-bin "^1.0.1"
npm-run-path@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
@@ -5401,6 +5675,21 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1:
dependencies:
path-key "^3.0.0"
"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
dependencies:
are-we-there-yet "~1.1.2"
console-control-strings "~1.1.0"
gauge "~2.7.3"
set-blocking "~2.0.0"
number-is-nan@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
nwsapi@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7"
@@ -5411,7 +5700,7 @@ oauth-sign@~0.9.0:
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
object-assign@^4, object-assign@^4.1.1:
object-assign@^4, object-assign@^4.1.0, object-assign@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
@@ -5542,11 +5831,24 @@ ora@^5.3.0, ora@^5.4.1:
strip-ansi "^6.0.0"
wcwidth "^1.0.1"
os-tmpdir@~1.0.2:
os-homedir@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
os-tmpdir@^1.0.0, os-tmpdir@~1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
osenv@0, osenv@^0.1.4:
version "0.1.5"
resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
dependencies:
os-homedir "^1.0.0"
os-tmpdir "^1.0.0"
p-cancelable@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc"
@@ -6034,7 +6336,7 @@ raw-body@2.4.0:
iconv-lite "0.4.24"
unpipe "1.0.0"
rc@^1.2.8:
rc@^1.2.7, rc@^1.2.8:
version "1.2.8"
resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
@@ -6078,7 +6380,7 @@ readable-stream@1.1.x:
isarray "0.0.1"
string_decoder "~0.10.x"
readable-stream@^2.0.2, readable-stream@^2.2.2, readable-stream@^2.3.5, readable-stream@^2.3.7:
readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.2.2, readable-stream@^2.3.5, readable-stream@^2.3.7:
version "2.3.7"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
@@ -6116,6 +6418,11 @@ readdirp@~3.5.0:
dependencies:
picomatch "^2.2.1"
readline-sync@^1.4.9:
version "1.4.10"
resolved "https://registry.yarnpkg.com/readline-sync/-/readline-sync-1.4.10.tgz#41df7fbb4b6312d673011594145705bf56d8873b"
integrity sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==
realpath-native@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-2.0.0.tgz#7377ac429b6e1fd599dc38d08ed942d0d7beb866"
@@ -6240,6 +6547,11 @@ remove-trailing-separator@^1.0.1:
resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
remove-trailing-slash@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz#be2285a59f39c74d1bce4f825950061915e3780d"
integrity sha512-o4S4Qh6L2jpnCy83ysZDau+VORNvnFw07CKSAymkd6ICNVEPisMyzlc00KlvvicsxKck94SEwhDnMNdICzO+tA==
repeat-element@^1.1.2:
version "1.1.4"
resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9"
@@ -6273,7 +6585,7 @@ request-promise-native@^1.0.7:
stealthy-require "^1.1.1"
tough-cookie "^2.3.3"
request@^2.88.0:
request@^2.87.0, request@^2.88.0:
version "2.88.2"
resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"
integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==
@@ -6369,6 +6681,13 @@ reusify@^1.0.4:
resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
rimraf@2, rimraf@^2.6.1:
version "2.7.1"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
dependencies:
glob "^7.1.3"
rimraf@2.6.3:
version "2.6.3"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
@@ -6412,7 +6731,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0:
safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@^5.2.1, safe-buffer@~5.2.0:
version "5.2.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
@@ -6444,6 +6763,11 @@ sane@^4.0.3:
minimist "^1.1.1"
walker "~1.0.5"
sax@^1.2.4:
version "1.2.4"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
saxes@^3.1.9:
version "3.1.11"
resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b"
@@ -6463,7 +6787,7 @@ semver-diff@^3.1.1:
dependencies:
semver "^6.3.0"
"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0, semver@^5.7.1:
"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.6.0, semver@^5.7.1:
version "5.7.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
@@ -6485,6 +6809,11 @@ semver@^7.3.2:
dependencies:
lru-cache "^6.0.0"
semver@~5.3.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8=
send@0.17.1:
version "0.17.1"
resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8"
@@ -6514,7 +6843,7 @@ serve-static@1.14.1:
parseurl "~1.3.3"
send "0.17.1"
set-blocking@^2.0.0:
set-blocking@^2.0.0, set-blocking@~2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
@@ -6717,11 +7046,26 @@ split2@^3.1.1:
dependencies:
readable-stream "^3.0.0"
sprintf-js@^1.1.1:
version "1.1.2"
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673"
integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==
sprintf-js@~1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
sqlite3@^5.0.2:
version "5.0.2"
resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-5.0.2.tgz#00924adcc001c17686e0a6643b6cbbc2d3965083"
integrity sha512-1SdTNo+BVU211Xj1csWa8lV6KM0CtucDwRyA0VHl91wEH1Mgh7RxUpI4rVvG7OhHrzCSGaVyW5g8vKvlrk9DJA==
dependencies:
node-addon-api "^3.0.0"
node-pre-gyp "^0.11.0"
optionalDependencies:
node-gyp "3.x"
sshpk@^1.7.0:
version "1.16.1"
resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
@@ -6785,7 +7129,16 @@ string-length@^3.1.0:
astral-regex "^1.0.0"
strip-ansi "^5.2.0"
string-width@^2.1.1:
string-width@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
dependencies:
code-point-at "^1.0.0"
is-fullwidth-code-point "^1.0.0"
strip-ansi "^3.0.0"
"string-width@^1.0.2 || 2", string-width@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
@@ -6846,6 +7199,13 @@ string_decoder@~1.1.1:
dependencies:
safe-buffer "~5.1.0"
strip-ansi@^3.0.0, strip-ansi@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
dependencies:
ansi-regex "^2.0.0"
strip-ansi@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
@@ -6960,6 +7320,28 @@ table@^5.2.3:
slice-ansi "^2.1.0"
string-width "^3.0.0"
tar@^2.0.0:
version "2.2.2"
resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40"
integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==
dependencies:
block-stream "*"
fstream "^1.0.12"
inherits "2"
tar@^4:
version "4.4.16"
resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.16.tgz#4a48b3c025e77d9d0c788f038a09b91c594d326d"
integrity sha512-gOVUT/KWPkGFZQmCRDVFNUWBl7niIo/PRR7lzrIqtZpit+st54lGROuVjc6zEQM9FhH+dJfQIl+9F0k8GNXg5g==
dependencies:
chownr "^1.1.4"
fs-minipass "^1.2.7"
minipass "^2.9.0"
minizlib "^1.3.3"
mkdirp "^0.5.5"
safe-buffer "^5.2.1"
yallist "^3.1.1"
term-size@^2.1.0:
version "2.2.1"
resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54"
@@ -7136,6 +7518,11 @@ type-detect@4.0.8:
resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
type-fest@^0.20.2:
version "0.20.2"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
type-fest@^0.21.3:
version "0.21.3"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
@@ -7345,7 +7732,7 @@ uuid@^3.3.2:
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
uuid@^8.3.0, uuid@^8.3.1:
uuid@^8.3.0, uuid@^8.3.1, uuid@^8.3.2:
version "8.3.2"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
@@ -7458,7 +7845,7 @@ which-module@^2.0.0:
resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
which@^1.2.9, which@^1.3.1:
which@1, which@^1.2.9, which@^1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
@@ -7472,6 +7859,13 @@ which@^2.0.1, which@^2.0.2:
dependencies:
isexe "^2.0.0"
wide-align@^1.1.0:
version "1.1.3"
resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
dependencies:
string-width "^1.0.2 || 2"
widest-line@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca"
@@ -7586,6 +7980,11 @@ y18n@^4.0.0:
resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf"
integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==
yallist@^3.0.0, yallist@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
yallist@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"