chore(medusa-core-utils): Migrate to TS (#2670)
This commit is contained in:
@@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
"medusa-core-utils": patch
|
||||||
|
"@medusajs/medusa": patch
|
||||||
|
---
|
||||||
|
|
||||||
|
chore(medusa-core-utils): Migrate to TS
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
{
|
|
||||||
"plugins": ["@babel/plugin-proposal-class-properties"],
|
|
||||||
"presets": ["@babel/preset-env", "@babel/preset-typescript"],
|
|
||||||
"env": {
|
|
||||||
"test": {
|
|
||||||
"plugins": ["@babel/plugin-transform-runtime"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
module.exports = {
|
||||||
|
globals: {
|
||||||
|
"ts-jest": {
|
||||||
|
tsConfig: "tsconfig.spec.json",
|
||||||
|
isolatedModules: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
transform: {
|
||||||
|
"^.+\\.[jt]s?$": "ts-jest",
|
||||||
|
},
|
||||||
|
testEnvironment: `node`,
|
||||||
|
moduleFileExtensions: [`js`, `jsx`, `ts`, `tsx`, `json`],
|
||||||
|
}
|
||||||
@@ -12,23 +12,16 @@
|
|||||||
"test": "jest",
|
"test": "jest",
|
||||||
"build": "tsc --build",
|
"build": "tsc --build",
|
||||||
"prepare": "cross-env NODE_ENV=production yarn run build",
|
"prepare": "cross-env NODE_ENV=production yarn run build",
|
||||||
"watch": "babel -w src --out-dir dist/ --ignore **/__tests__"
|
"watch": "tsc --watch"
|
||||||
},
|
},
|
||||||
"author": "Sebastian Rindom",
|
"author": "Sebastian Rindom",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/cli": "^7.13.0",
|
|
||||||
"@babel/core": "^7.13.8",
|
|
||||||
"@babel/plugin-proposal-class-properties": "^7.13.0",
|
|
||||||
"@babel/plugin-transform-classes": "^7.9.5",
|
|
||||||
"@babel/plugin-transform-runtime": "^7.7.6",
|
|
||||||
"@babel/preset-env": "^7.13.9",
|
|
||||||
"@babel/preset-typescript": "^7.16.0",
|
|
||||||
"@babel/runtime": "^7.13.9",
|
|
||||||
"class-transformer": "^0.5.1",
|
"class-transformer": "^0.5.1",
|
||||||
"class-validator": "^0.13.1",
|
"class-validator": "^0.13.1",
|
||||||
"cross-env": "^5.2.1",
|
"cross-env": "^5.2.1",
|
||||||
"jest": "^25.5.2",
|
"jest": "^25.5.2",
|
||||||
|
"ts-jest": "^25.5.1",
|
||||||
"typescript": "^4.4.4"
|
"typescript": "^4.4.4"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
@@ -1,17 +0,0 @@
|
|||||||
import _ from "lodash"
|
|
||||||
|
|
||||||
function compareObjectsByProp(object1, object2, prop) {
|
|
||||||
if (Array.isArray(object1[prop])) {
|
|
||||||
object2[prop] = object2[prop].map(({ _id, ...rest }) => rest)
|
|
||||||
return (
|
|
||||||
_.differenceWith(object1[prop], object2[prop], _.isEqual).length === 0
|
|
||||||
)
|
|
||||||
} else if (typeof object1[prop] === "object") {
|
|
||||||
delete object2[prop]._id
|
|
||||||
return _.isEqual(object1[prop], object2[prop])
|
|
||||||
} else {
|
|
||||||
return object1[prop] === object2[prop]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default compareObjectsByProp
|
|
||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
import zeroDecimalCurrencies from "./zero-decimal-currencies"
|
import zeroDecimalCurrencies from "./zero-decimal-currencies"
|
||||||
|
|
||||||
const computerizeAmount = (amount, currency) => {
|
const computerizeAmount = (amount: number, currency: string): number => {
|
||||||
let divisor = 100
|
let divisor = 100
|
||||||
|
|
||||||
if (zeroDecimalCurrencies.includes(currency.toLowerCase())) {
|
if (zeroDecimalCurrencies.includes(currency.toLowerCase())) {
|
||||||
+15
-18
@@ -1,4 +1,11 @@
|
|||||||
export const countries = [
|
type Country = {
|
||||||
|
alpha2: string
|
||||||
|
name: string
|
||||||
|
alpha3: string
|
||||||
|
numeric: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export const countries: Country[] = [
|
||||||
{ alpha2: "AF", name: "Afghanistan", alpha3: "AFG", numeric: "004" },
|
{ alpha2: "AF", name: "Afghanistan", alpha3: "AFG", numeric: "004" },
|
||||||
{ alpha2: "AL", name: "Albania", alpha3: "ALB", numeric: "008" },
|
{ alpha2: "AL", name: "Albania", alpha3: "ALB", numeric: "008" },
|
||||||
{ alpha2: "DZ", name: "Algeria", alpha3: "DZA", numeric: "012" },
|
{ alpha2: "DZ", name: "Algeria", alpha3: "DZA", numeric: "012" },
|
||||||
@@ -402,27 +409,17 @@ export const countries = [
|
|||||||
{ alpha2: "AX", name: "Åland Islands", alpha3: "ALA", numeric: "248" },
|
{ alpha2: "AX", name: "Åland Islands", alpha3: "ALA", numeric: "248" },
|
||||||
]
|
]
|
||||||
|
|
||||||
export function isoCountryLookup(country) {
|
export function isoCountryLookup(country: string): string {
|
||||||
const normalizedCountry = country.toUpperCase()
|
const normalizedCountry = country.toUpperCase()
|
||||||
|
|
||||||
let isoRecord = countries.find(record => {
|
let isoRecord = countries.find((record) => {
|
||||||
return record.name === normalizedCountry
|
return (
|
||||||
|
record.name.toUpperCase() === normalizedCountry ||
|
||||||
|
record.alpha2.toUpperCase() === normalizedCountry ||
|
||||||
|
record.alpha3.toUpperCase() === normalizedCountry
|
||||||
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
// Try alpha2 instead
|
|
||||||
if (!isoRecord) {
|
|
||||||
isoRecord = countries.find(record => {
|
|
||||||
return record.alpha2 === normalizedCountry
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Try alpha3
|
|
||||||
if (!isoRecord) {
|
|
||||||
isoRecord = countries.find(record => {
|
|
||||||
return record.alpha3 === normalizedCountry
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isoRecord) {
|
if (!isoRecord) {
|
||||||
throw new Error("Invalid country name")
|
throw new Error("Invalid country name")
|
||||||
}
|
}
|
||||||
+3
-3
@@ -1,12 +1,12 @@
|
|||||||
import Module from "module"
|
import Module from "module"
|
||||||
import path from "path"
|
import path from "path"
|
||||||
|
|
||||||
const fallback = filename => {
|
const fallback = (filename: string) => {
|
||||||
const mod = new Module(filename)
|
const mod = new Module(filename)
|
||||||
|
|
||||||
mod.filename = filename
|
mod.filename = filename
|
||||||
mod.paths = Module._nodeModulePaths(path.dirname(filename))
|
mod.paths = (Module as any)._nodeModulePaths(path.dirname(filename))
|
||||||
mod._compile(`module.exports = require;`, filename)
|
;(mod as any)._compile(`module.exports = require;`, filename)
|
||||||
|
|
||||||
return mod.exports
|
return mod.exports
|
||||||
}
|
}
|
||||||
+6
-3
@@ -1,4 +1,4 @@
|
|||||||
import path from "path"
|
import { join } from "path"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Attempts to resolve the config file in a given root directory.
|
* Attempts to resolve the config file in a given root directory.
|
||||||
@@ -6,8 +6,11 @@ import path from "path"
|
|||||||
* @param {string} configName - the name of the config file.
|
* @param {string} configName - the name of the config file.
|
||||||
* @return {object} an object containing the config module and its path as well as an error property if the config couldn't be loaded.
|
* @return {object} an object containing the config module and its path as well as an error property if the config couldn't be loaded.
|
||||||
*/
|
*/
|
||||||
function getConfigFile(rootDir, configName) {
|
function getConfigFile<TConfig = unknown>(
|
||||||
const configPath = path.join(rootDir, configName)
|
rootDir: string,
|
||||||
|
configName: string
|
||||||
|
): { configModule: TConfig; configFilePath: string } | { error: any } {
|
||||||
|
const configPath = join(rootDir, configName)
|
||||||
let configFilePath = ``
|
let configFilePath = ``
|
||||||
let configModule
|
let configModule
|
||||||
|
|
||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
import path from "path"
|
import path from "path"
|
||||||
|
|
||||||
export const getMedusaVersion = () => {
|
export const getMedusaVersion = (): string => {
|
||||||
try {
|
try {
|
||||||
return require(path.join(
|
return require(path.join(
|
||||||
process.cwd(),
|
process.cwd(),
|
||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
import zeroDecimalCurrencies from "./zero-decimal-currencies"
|
import zeroDecimalCurrencies from "./zero-decimal-currencies"
|
||||||
|
|
||||||
const humanizeAmount = (amount, currency) => {
|
const humanizeAmount = (amount: number, currency: string): number => {
|
||||||
let divisor = 100
|
let divisor = 100
|
||||||
|
|
||||||
if (zeroDecimalCurrencies.includes(currency.toLowerCase())) {
|
if (zeroDecimalCurrencies.includes(currency.toLowerCase())) {
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
export { default as compareObjectsByProp } from "./compare-objects"
|
|
||||||
export { countries, isoCountryLookup } from "./countries"
|
export { countries, isoCountryLookup } from "./countries"
|
||||||
export { default as createRequireFromPath } from "./create-require-from-path"
|
export { default as createRequireFromPath } from "./create-require-from-path"
|
||||||
export { default as MedusaError } from "./errors"
|
export { default as MedusaError } from "./errors"
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
/**
|
|
||||||
* Takes an object and a list of fields to tranform in that object. If the field
|
|
||||||
* exists on the object and its value is a string it will append `_id` to the
|
|
||||||
* field name. This is used when allowing API calls to hold either ID or object
|
|
||||||
* values in the payload. The method returns a new object with the
|
|
||||||
* transformation.
|
|
||||||
* @param {Object} obj - the object to transform
|
|
||||||
* @param {Array<String>} fields - the fields to apply transformation to
|
|
||||||
* @returns {Object} the transformed object
|
|
||||||
*/
|
|
||||||
export const transformIdableFields = (obj, fields) => {
|
|
||||||
const ret = { ...obj }
|
|
||||||
|
|
||||||
for (const key of fields) {
|
|
||||||
if (key in obj && typeof ret[key] === "string") {
|
|
||||||
ret[`${key}_id`] = ret[key]
|
|
||||||
delete ret[key]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
type ComputePropertyNames<
|
||||||
|
T,
|
||||||
|
TKey extends keyof T & string,
|
||||||
|
TFields extends (keyof T | string)[] = (keyof T | string)[]
|
||||||
|
> = TKey extends TFields[number]
|
||||||
|
? T[TKey] extends string
|
||||||
|
? `${TKey}_id`
|
||||||
|
: TKey
|
||||||
|
: TKey
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Takes an object and a list of fields to tranform in that object. If the field
|
||||||
|
* exists on the object and its value is a string it will append `_id` to the
|
||||||
|
* field name. This is used when allowing API calls to hold either ID or object
|
||||||
|
* values in the payload. The method returns a new object with the
|
||||||
|
* transformation.
|
||||||
|
* @param obj - the object to transform
|
||||||
|
* @param fields - the fields to apply transformation to
|
||||||
|
* @returns the transformed object
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* ```ts
|
||||||
|
* const obj = { test: "test", toto: 1, tata: Symbol("tata") }
|
||||||
|
* const out = transformIdableFields(obj, ["test"]) // out: { test_id: string, toto: number, tata: symbol }
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
export const transformIdableFields = <
|
||||||
|
T = Record<string, unknown>,
|
||||||
|
TFields extends (keyof T | string)[] = (keyof T | string)[],
|
||||||
|
TOutput = {
|
||||||
|
[P in ComputePropertyNames<T, keyof T & string, TFields>]: P extends keyof T
|
||||||
|
? T[P]
|
||||||
|
: string
|
||||||
|
}
|
||||||
|
>(
|
||||||
|
obj: T,
|
||||||
|
fields: TFields
|
||||||
|
): TOutput => {
|
||||||
|
const ret = { ...obj }
|
||||||
|
|
||||||
|
for (let key of fields) {
|
||||||
|
key = key as string
|
||||||
|
if (key in obj && typeof obj[key] === "string") {
|
||||||
|
ret[`${key.toString()}_id`] = obj[key]
|
||||||
|
delete ret[key]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret as unknown as TOutput
|
||||||
|
}
|
||||||
@@ -1,129 +0,0 @@
|
|||||||
import Joi from "joi"
|
|
||||||
|
|
||||||
Joi.objectId = require("joi-objectid")(Joi)
|
|
||||||
|
|
||||||
// if address is a string, we assume that it is an id
|
|
||||||
Joi.address = () => {
|
|
||||||
return Joi.alternatives().try(
|
|
||||||
Joi.string(),
|
|
||||||
Joi.object().keys({
|
|
||||||
first_name: Joi.string().required(),
|
|
||||||
last_name: Joi.string().required(),
|
|
||||||
company: Joi.string().optional(),
|
|
||||||
address_1: Joi.string().required(),
|
|
||||||
address_2: Joi.string()
|
|
||||||
.allow(null, "")
|
|
||||||
.optional(),
|
|
||||||
city: Joi.string().required(),
|
|
||||||
country_code: Joi.string().required(),
|
|
||||||
province: Joi.string()
|
|
||||||
.allow(null, "")
|
|
||||||
.optional(),
|
|
||||||
postal_code: Joi.string().required(),
|
|
||||||
phone: Joi.string().optional(),
|
|
||||||
metadata: Joi.object()
|
|
||||||
.allow(null, {})
|
|
||||||
.optional(),
|
|
||||||
})
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
Joi.dateFilter = () => {
|
|
||||||
return Joi.object({
|
|
||||||
lt: Joi.alternatives(Joi.date().timestamp("unix"), Joi.date()),
|
|
||||||
gt: Joi.alternatives(Joi.date().timestamp("unix"), Joi.date()),
|
|
||||||
gte: Joi.alternatives(Joi.date().timestamp("unix"), Joi.date()),
|
|
||||||
lte: Joi.alternatives(Joi.date().timestamp("unix"), Joi.date()),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
Joi.orderFilter = () => {
|
|
||||||
return Joi.object().keys({
|
|
||||||
id: Joi.string(),
|
|
||||||
q: Joi.string(),
|
|
||||||
status: Joi.array()
|
|
||||||
.items(
|
|
||||||
Joi.string().valid(
|
|
||||||
"pending",
|
|
||||||
"completed",
|
|
||||||
"archived",
|
|
||||||
"canceled",
|
|
||||||
"requires_action"
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.single(),
|
|
||||||
fulfillment_status: Joi.array()
|
|
||||||
.items(
|
|
||||||
Joi.string().valid(
|
|
||||||
"not_fulfilled",
|
|
||||||
"fulfilled",
|
|
||||||
"partially_fulfilled",
|
|
||||||
"shipped",
|
|
||||||
"partially_shipped",
|
|
||||||
"canceled",
|
|
||||||
"returned",
|
|
||||||
"partially_returned",
|
|
||||||
"requires_action"
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.single(),
|
|
||||||
payment_status: Joi.array()
|
|
||||||
.items(
|
|
||||||
Joi.string().valid(
|
|
||||||
"captured",
|
|
||||||
"awaiting",
|
|
||||||
"not_paid",
|
|
||||||
"refunded",
|
|
||||||
"partially_refunded",
|
|
||||||
"canceled",
|
|
||||||
"requires_action"
|
|
||||||
)
|
|
||||||
)
|
|
||||||
.single(),
|
|
||||||
display_id: Joi.string(),
|
|
||||||
cart_id: Joi.string(),
|
|
||||||
offset: Joi.string(),
|
|
||||||
limit: Joi.string(),
|
|
||||||
expand: Joi.string(),
|
|
||||||
fields: Joi.string(),
|
|
||||||
customer_id: Joi.string(),
|
|
||||||
email: Joi.string(),
|
|
||||||
region_id: Joi.string(),
|
|
||||||
currency_code: Joi.string(),
|
|
||||||
tax_rate: Joi.string(),
|
|
||||||
canceled_at: Joi.dateFilter(),
|
|
||||||
created_at: Joi.dateFilter(),
|
|
||||||
updated_at: Joi.dateFilter(),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
Joi.productFilter = () => {
|
|
||||||
return Joi.object().keys({
|
|
||||||
id: Joi.string(),
|
|
||||||
q: Joi.string().allow(null, ""),
|
|
||||||
status: Joi.array()
|
|
||||||
.items(Joi.string().valid("proposed", "draft", "published", "rejected"))
|
|
||||||
.single(),
|
|
||||||
collection_id: Joi.array()
|
|
||||||
.items(Joi.string())
|
|
||||||
.single(),
|
|
||||||
tags: Joi.array()
|
|
||||||
.items(Joi.string())
|
|
||||||
.single(),
|
|
||||||
title: Joi.string(),
|
|
||||||
description: Joi.string(),
|
|
||||||
handle: Joi.string(),
|
|
||||||
is_giftcard: Joi.string(),
|
|
||||||
type: Joi.string(),
|
|
||||||
offset: Joi.string(),
|
|
||||||
limit: Joi.string(),
|
|
||||||
expand: Joi.string(),
|
|
||||||
fields: Joi.string(),
|
|
||||||
order: Joi.string().optional(),
|
|
||||||
created_at: Joi.dateFilter(),
|
|
||||||
updated_at: Joi.dateFilter(),
|
|
||||||
deleted_at: Joi.dateFilter(),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
export default Joi
|
|
||||||
@@ -0,0 +1,128 @@
|
|||||||
|
import { default as Joi } from "joi"
|
||||||
|
|
||||||
|
const dateFilter = () => {
|
||||||
|
return Joi.object({
|
||||||
|
lt: Joi.alternatives(Joi.date().timestamp("unix"), Joi.date()),
|
||||||
|
gt: Joi.alternatives(Joi.date().timestamp("unix"), Joi.date()),
|
||||||
|
gte: Joi.alternatives(Joi.date().timestamp("unix"), Joi.date()),
|
||||||
|
lte: Joi.alternatives(Joi.date().timestamp("unix"), Joi.date()),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
Object.assign(Joi, {
|
||||||
|
objectId: require("joi-objectid")(Joi),
|
||||||
|
address: () => {
|
||||||
|
return Joi.alternatives().try(
|
||||||
|
Joi.string(),
|
||||||
|
Joi.object().keys({
|
||||||
|
first_name: Joi.string().required(),
|
||||||
|
last_name: Joi.string().required(),
|
||||||
|
company: Joi.string().optional(),
|
||||||
|
address_1: Joi.string().required(),
|
||||||
|
address_2: Joi.string().allow(null, "").optional(),
|
||||||
|
city: Joi.string().required(),
|
||||||
|
country_code: Joi.string().required(),
|
||||||
|
province: Joi.string().allow(null, "").optional(),
|
||||||
|
postal_code: Joi.string().required(),
|
||||||
|
phone: Joi.string().optional(),
|
||||||
|
metadata: Joi.object().allow(null, {}).optional(),
|
||||||
|
})
|
||||||
|
)
|
||||||
|
},
|
||||||
|
dateFilter,
|
||||||
|
orderFilter: () => {
|
||||||
|
return Joi.object().keys({
|
||||||
|
id: Joi.string(),
|
||||||
|
q: Joi.string(),
|
||||||
|
status: Joi.array()
|
||||||
|
.items(
|
||||||
|
Joi.string().valid(
|
||||||
|
"pending",
|
||||||
|
"completed",
|
||||||
|
"archived",
|
||||||
|
"canceled",
|
||||||
|
"requires_action"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.single(),
|
||||||
|
fulfillment_status: Joi.array()
|
||||||
|
.items(
|
||||||
|
Joi.string().valid(
|
||||||
|
"not_fulfilled",
|
||||||
|
"fulfilled",
|
||||||
|
"partially_fulfilled",
|
||||||
|
"shipped",
|
||||||
|
"partially_shipped",
|
||||||
|
"canceled",
|
||||||
|
"returned",
|
||||||
|
"partially_returned",
|
||||||
|
"requires_action"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.single(),
|
||||||
|
payment_status: Joi.array()
|
||||||
|
.items(
|
||||||
|
Joi.string().valid(
|
||||||
|
"captured",
|
||||||
|
"awaiting",
|
||||||
|
"not_paid",
|
||||||
|
"refunded",
|
||||||
|
"partially_refunded",
|
||||||
|
"canceled",
|
||||||
|
"requires_action"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.single(),
|
||||||
|
display_id: Joi.string(),
|
||||||
|
cart_id: Joi.string(),
|
||||||
|
offset: Joi.string(),
|
||||||
|
limit: Joi.string(),
|
||||||
|
expand: Joi.string(),
|
||||||
|
fields: Joi.string(),
|
||||||
|
customer_id: Joi.string(),
|
||||||
|
email: Joi.string(),
|
||||||
|
region_id: Joi.string(),
|
||||||
|
currency_code: Joi.string(),
|
||||||
|
tax_rate: Joi.string(),
|
||||||
|
canceled_at: dateFilter(),
|
||||||
|
created_at: dateFilter(),
|
||||||
|
updated_at: dateFilter(),
|
||||||
|
})
|
||||||
|
},
|
||||||
|
productFilter: () => {
|
||||||
|
return Joi.object().keys({
|
||||||
|
id: Joi.string(),
|
||||||
|
q: Joi.string().allow(null, ""),
|
||||||
|
status: Joi.array()
|
||||||
|
.items(Joi.string().valid("proposed", "draft", "published", "rejected"))
|
||||||
|
.single(),
|
||||||
|
collection_id: Joi.array().items(Joi.string()).single(),
|
||||||
|
tags: Joi.array().items(Joi.string()).single(),
|
||||||
|
title: Joi.string(),
|
||||||
|
description: Joi.string(),
|
||||||
|
handle: Joi.string(),
|
||||||
|
is_giftcard: Joi.string(),
|
||||||
|
type: Joi.string(),
|
||||||
|
offset: Joi.string(),
|
||||||
|
limit: Joi.string(),
|
||||||
|
expand: Joi.string(),
|
||||||
|
fields: Joi.string(),
|
||||||
|
order: Joi.string().optional(),
|
||||||
|
created_at: dateFilter(),
|
||||||
|
updated_at: dateFilter(),
|
||||||
|
deleted_at: dateFilter(),
|
||||||
|
})
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
declare module "joi" {
|
||||||
|
interface Root {
|
||||||
|
objectId: Joi.StringSchema
|
||||||
|
address: <T>() => Joi.AlternativesSchema
|
||||||
|
dateFilter: <T>() => Joi.ObjectSchema<T>
|
||||||
|
orderFilter: <T>() => Joi.ObjectSchema<T>
|
||||||
|
productFilter: <T>() => Joi.ObjectSchema<T>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Joi
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"extends": "./tsconfig.json",
|
||||||
|
"include": [
|
||||||
|
"./src/**/*",
|
||||||
|
"index.d.ts",
|
||||||
|
"./src/**/__tests__",
|
||||||
|
"./src/**/__mocks__"
|
||||||
|
],
|
||||||
|
"exclude": ["node_modules"]
|
||||||
|
}
|
||||||
@@ -1,23 +1,23 @@
|
|||||||
import { EntityManager } from "typeorm"
|
import { EntityManager } from "typeorm"
|
||||||
import { MedusaError, computerizeAmount } from "medusa-core-utils"
|
import { computerizeAmount, MedusaError } from "medusa-core-utils"
|
||||||
|
|
||||||
import { AbstractBatchJobStrategy, IFileService } from "../../../interfaces"
|
import { AbstractBatchJobStrategy, IFileService } from "../../../interfaces"
|
||||||
import CsvParser from "../../../services/csv-parser"
|
import CsvParser from "../../../services/csv-parser"
|
||||||
import {
|
import {
|
||||||
BatchJobService,
|
BatchJobService,
|
||||||
ProductVariantService,
|
|
||||||
PriceListService,
|
PriceListService,
|
||||||
|
ProductVariantService,
|
||||||
RegionService,
|
RegionService,
|
||||||
} from "../../../services"
|
} from "../../../services"
|
||||||
import { CreateBatchJobInput } from "../../../types/batch-job"
|
import { CreateBatchJobInput } from "../../../types/batch-job"
|
||||||
import {
|
import {
|
||||||
InjectedProps,
|
InjectedProps,
|
||||||
OperationType,
|
OperationType,
|
||||||
PriceListImportOperation,
|
|
||||||
PriceListImportOperationPrice,
|
|
||||||
ParsedPriceListImportPrice,
|
ParsedPriceListImportPrice,
|
||||||
PriceListImportBatchJob,
|
PriceListImportBatchJob,
|
||||||
PriceListImportCsvSchema,
|
PriceListImportCsvSchema,
|
||||||
|
PriceListImportOperation,
|
||||||
|
PriceListImportOperationPrice,
|
||||||
TBuiltPriceListImportLine,
|
TBuiltPriceListImportLine,
|
||||||
TParsedPriceListImportRowData,
|
TParsedPriceListImportRowData,
|
||||||
} from "./types"
|
} from "./types"
|
||||||
@@ -204,7 +204,10 @@ class PriceListImportStrategy extends AbstractBatchJobStrategy {
|
|||||||
record.currency_code = price.currency_code
|
record.currency_code = price.currency_code
|
||||||
}
|
}
|
||||||
|
|
||||||
record.amount = computerizeAmount(record.amount, record.currency_code)
|
record.amount = computerizeAmount(
|
||||||
|
record.amount as number,
|
||||||
|
record.currency_code
|
||||||
|
)
|
||||||
|
|
||||||
operationalPrices.push(record as PriceListImportOperationPrice)
|
operationalPrices.push(record as PriceListImportOperationPrice)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -218,7 +218,10 @@ class ProductImportStrategy extends AbstractBatchJobStrategy {
|
|||||||
record.currency_code = price.currency_code
|
record.currency_code = price.currency_code
|
||||||
}
|
}
|
||||||
|
|
||||||
record.amount = computerizeAmount(record.amount, record.currency_code)
|
record.amount = computerizeAmount(
|
||||||
|
Number(record.amount),
|
||||||
|
record.currency_code as string
|
||||||
|
)
|
||||||
prices.push(record)
|
prices.push(record)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -216,7 +216,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@babel/cli@npm:^7.12.1, @babel/cli@npm:^7.13.0, @babel/cli@npm:^7.14.3, @babel/cli@npm:^7.15.4, @babel/cli@npm:^7.16.0, @babel/cli@npm:^7.7.5":
|
"@babel/cli@npm:^7.12.1, @babel/cli@npm:^7.14.3, @babel/cli@npm:^7.15.4, @babel/cli@npm:^7.16.0, @babel/cli@npm:^7.7.5":
|
||||||
version: 7.18.6
|
version: 7.18.6
|
||||||
resolution: "@babel/cli@npm:7.18.6"
|
resolution: "@babel/cli@npm:7.18.6"
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -292,7 +292,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@babel/core@npm:^7.1.0, @babel/core@npm:^7.12.10, @babel/core@npm:^7.12.3, @babel/core@npm:^7.12.7, @babel/core@npm:^7.13.8, @babel/core@npm:^7.14.0, @babel/core@npm:^7.14.3, @babel/core@npm:^7.15.5, @babel/core@npm:^7.16.0, @babel/core@npm:^7.18.6, @babel/core@npm:^7.7.2, @babel/core@npm:^7.7.5, @babel/core@npm:^7.8.0":
|
"@babel/core@npm:^7.1.0, @babel/core@npm:^7.12.10, @babel/core@npm:^7.12.3, @babel/core@npm:^7.12.7, @babel/core@npm:^7.14.0, @babel/core@npm:^7.14.3, @babel/core@npm:^7.15.5, @babel/core@npm:^7.16.0, @babel/core@npm:^7.18.6, @babel/core@npm:^7.7.2, @babel/core@npm:^7.7.5, @babel/core@npm:^7.8.0":
|
||||||
version: 7.18.6
|
version: 7.18.6
|
||||||
resolution: "@babel/core@npm:7.18.6"
|
resolution: "@babel/core@npm:7.18.6"
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -709,7 +709,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@babel/plugin-proposal-class-properties@npm:^7.0.0, @babel/plugin-proposal-class-properties@npm:^7.10.4, @babel/plugin-proposal-class-properties@npm:^7.12.1, @babel/plugin-proposal-class-properties@npm:^7.13.0, @babel/plugin-proposal-class-properties@npm:^7.14.0, @babel/plugin-proposal-class-properties@npm:^7.14.5, @babel/plugin-proposal-class-properties@npm:^7.16.0, @babel/plugin-proposal-class-properties@npm:^7.18.6, @babel/plugin-proposal-class-properties@npm:^7.7.4":
|
"@babel/plugin-proposal-class-properties@npm:^7.0.0, @babel/plugin-proposal-class-properties@npm:^7.10.4, @babel/plugin-proposal-class-properties@npm:^7.12.1, @babel/plugin-proposal-class-properties@npm:^7.14.0, @babel/plugin-proposal-class-properties@npm:^7.14.5, @babel/plugin-proposal-class-properties@npm:^7.16.0, @babel/plugin-proposal-class-properties@npm:^7.18.6, @babel/plugin-proposal-class-properties@npm:^7.7.4":
|
||||||
version: 7.18.6
|
version: 7.18.6
|
||||||
resolution: "@babel/plugin-proposal-class-properties@npm:7.18.6"
|
resolution: "@babel/plugin-proposal-class-properties@npm:7.18.6"
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -1668,7 +1668,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@babel/preset-env@npm:^7.11.5, @babel/preset-env@npm:^7.12.11, @babel/preset-env@npm:^7.12.7, @babel/preset-env@npm:^7.13.9, @babel/preset-env@npm:^7.15.4, @babel/preset-env@npm:^7.15.6, @babel/preset-env@npm:^7.16.4, @babel/preset-env@npm:^7.18.6, @babel/preset-env@npm:^7.7.5":
|
"@babel/preset-env@npm:^7.11.5, @babel/preset-env@npm:^7.12.11, @babel/preset-env@npm:^7.12.7, @babel/preset-env@npm:^7.15.4, @babel/preset-env@npm:^7.15.6, @babel/preset-env@npm:^7.16.4, @babel/preset-env@npm:^7.18.6, @babel/preset-env@npm:^7.7.5":
|
||||||
version: 7.18.6
|
version: 7.18.6
|
||||||
resolution: "@babel/preset-env@npm:7.18.6"
|
resolution: "@babel/preset-env@npm:7.18.6"
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -1835,7 +1835,7 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.0, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.10.4, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.9, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.18.0, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.5.0, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.2, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.9.2, @babel/runtime@npm:^7.9.6":
|
"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.0, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.10.4, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.18.0, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.5.0, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.2, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.9.2, @babel/runtime@npm:^7.9.6":
|
||||||
version: 7.18.6
|
version: 7.18.6
|
||||||
resolution: "@babel/runtime@npm:7.18.6"
|
resolution: "@babel/runtime@npm:7.18.6"
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -23568,20 +23568,13 @@ __metadata:
|
|||||||
version: 0.0.0-use.local
|
version: 0.0.0-use.local
|
||||||
resolution: "medusa-core-utils@workspace:packages/medusa-core-utils"
|
resolution: "medusa-core-utils@workspace:packages/medusa-core-utils"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/cli": ^7.13.0
|
|
||||||
"@babel/core": ^7.13.8
|
|
||||||
"@babel/plugin-proposal-class-properties": ^7.13.0
|
|
||||||
"@babel/plugin-transform-classes": ^7.9.5
|
|
||||||
"@babel/plugin-transform-runtime": ^7.7.6
|
|
||||||
"@babel/preset-env": ^7.13.9
|
|
||||||
"@babel/preset-typescript": ^7.16.0
|
|
||||||
"@babel/runtime": ^7.13.9
|
|
||||||
class-transformer: ^0.5.1
|
class-transformer: ^0.5.1
|
||||||
class-validator: ^0.13.1
|
class-validator: ^0.13.1
|
||||||
cross-env: ^5.2.1
|
cross-env: ^5.2.1
|
||||||
jest: ^25.5.2
|
jest: ^25.5.2
|
||||||
joi: ^17.3.0
|
joi: ^17.3.0
|
||||||
joi-objectid: ^3.0.1
|
joi-objectid: ^3.0.1
|
||||||
|
ts-jest: ^25.5.1
|
||||||
typescript: ^4.4.4
|
typescript: ^4.4.4
|
||||||
languageName: unknown
|
languageName: unknown
|
||||||
linkType: soft
|
linkType: soft
|
||||||
|
|||||||
Reference in New Issue
Block a user