chore: Remove FlagRouter from core (#4710)

* Allow nested feature flags

* clean up

* Create loud-wombats-shave.md

* add warning

* Add more tests

* Address PR comments

* add back boolean check

* Replace core flag router with utils one

* lol - actually remove it

* Create eleven-doors-roll.md

---------

Co-authored-by: carlos-r-l-rodrigues <rodrigolr@gmail.com>
This commit is contained in:
Oli Juhl
2023-08-08 13:05:50 +02:00
committed by GitHub
co-authored by carlos-r-l-rodrigues
parent 281b0746cf
commit d1e298f5dc
54 changed files with 495 additions and 593 deletions
+5
View File
@@ -0,0 +1,5 @@
---
"@medusajs/medusa": patch
---
chore: Remove FlagRouter from core
@@ -1,5 +1,5 @@
import { FlagRouter } from "@medusajs/utils"
import { NextFunction, Request, Response } from "express" import { NextFunction, Request, Response } from "express"
import { FlagRouter } from "../../utils/flag-router"
export function isFeatureFlagEnabled( export function isFeatureFlagEnabled(
flagKey: string flagKey: string
@@ -1,7 +1,7 @@
import { FlagRouter } from "@medusajs/utils"
import { NextFunction, Request, Response } from "express" import { NextFunction, Request, Response } from "express"
import SalesChannelFeatureFlag from "../../loaders/feature-flags/sales-channels" import SalesChannelFeatureFlag from "../../loaders/feature-flags/sales-channels"
import { SalesChannelService } from "../../services" import { SalesChannelService } from "../../services"
import { FlagRouter } from "../../utils/flag-router"
/** /**
* Middleware that includes the default sales channel on the request, if no sales channels present * Middleware that includes the default sales channel on the request, if no sales channels present
@@ -1,81 +1,81 @@
import { FlagRouter } from "@medusajs/utils"
import { Router } from "express" import { Router } from "express"
import "reflect-metadata" import "reflect-metadata"
import { Order } from "../../../.." import { Order } from "../../../.."
import SalesChannelFeatureFlag from "../../../../loaders/feature-flags/sales-channels" import SalesChannelFeatureFlag from "../../../../loaders/feature-flags/sales-channels"
import { FindParams, PaginatedResponse } from "../../../../types/common" import { FindParams, PaginatedResponse } from "../../../../types/common"
import { FlagRouter } from "../../../../utils/flag-router" import {
defaultAdminOrdersFields,
defaultAdminOrdersRelations,
} from "../../../../types/orders"
import middlewares, { import middlewares, {
transformBody, transformBody,
transformIncludesOptions, transformIncludesOptions,
transformQuery, transformQuery,
} from "../../../middlewares" } from "../../../middlewares"
import { checkRegisteredModules } from "../../../middlewares/check-registered-modules" import { checkRegisteredModules } from "../../../middlewares/check-registered-modules"
import { AdminOrdersOrderLineItemReservationReq } from "./create-reservation-for-line-item"
import { AdminGetOrdersOrderReservationsParams } from "./get-reservations"
import { AdminGetOrdersParams } from "./list-orders"
import {
AdminPostOrdersOrderSwapsParams,
AdminPostOrdersOrderSwapsReq,
} from "./create-swap"
import {
AdminPostOrdersOrderParams,
AdminPostOrdersOrderReq,
} from "./update-order"
import { AdminPostOrdersOrderCompleteParams } from "./complete-order"
import {
AdminPostOrdersOrderRefundsParams,
AdminPostOrdersOrderRefundsReq,
} from "./refund-payment"
import { AdminPostOrdersOrderCaptureParams } from "./capture-payment"
import {
AdminPostOrdersOrderFulfillmentsParams,
AdminPostOrdersOrderFulfillmentsReq,
} from "./create-fulfillment"
import { AdminPostOrdersOrderFulfillementsCancelParams } from "./cancel-fulfillment"
import { AdminPostOrdersOrderSwapFulfillementsCancelParams } from "./cancel-fulfillment-swap"
import { AdminPostOrdersClaimFulfillmentsCancelParams } from "./cancel-fulfillment-claim"
import {
AdminPostOrdersOrderShipmentParams,
AdminPostOrdersOrderShipmentReq,
} from "./create-shipment"
import {
AdminPostOrdersOrderReturnsParams,
AdminPostOrdersOrderReturnsReq,
} from "./request-return"
import { AdminPostOrdersOrderCancel } from "./cancel-order"
import { import {
AdminPostOrdersOrderShippingMethodsParams, AdminPostOrdersOrderShippingMethodsParams,
AdminPostOrdersOrderShippingMethodsReq, AdminPostOrdersOrderShippingMethodsReq,
} from "./add-shipping-method" } from "./add-shipping-method"
import { AdminPostOrdersOrderArchiveParams } from "./archive-order" import { AdminPostOrdersOrderArchiveParams } from "./archive-order"
import { AdminPostOrdersClaimCancel } from "./cancel-claim"
import { AdminPostOrdersOrderFulfillementsCancelParams } from "./cancel-fulfillment"
import { AdminPostOrdersClaimFulfillmentsCancelParams } from "./cancel-fulfillment-claim"
import { AdminPostOrdersOrderSwapFulfillementsCancelParams } from "./cancel-fulfillment-swap"
import { AdminPostOrdersOrderCancel } from "./cancel-order"
import { AdminPostOrdersSwapCancelParams } from "./cancel-swap" import { AdminPostOrdersSwapCancelParams } from "./cancel-swap"
import { AdminPostOrdersOrderSwapsSwapFulfillmentsParams } from "./fulfill-swap" import { AdminPostOrdersOrderCaptureParams } from "./capture-payment"
import { import { AdminPostOrdersOrderCompleteParams } from "./complete-order"
AdminPostOrdersOrderSwapsSwapShipmentsParams,
AdminPostOrdersOrderSwapsSwapShipmentsReq,
} from "./create-swap-shipment"
import { AdminPostOrdersOrderSwapsSwapProcessPaymentParams } from "./process-swap-payment"
import { import {
AdminPostOrdersOrderClaimsParams, AdminPostOrdersOrderClaimsParams,
AdminPostOrdersOrderClaimsReq, AdminPostOrdersOrderClaimsReq,
} from "./create-claim" } from "./create-claim"
import { AdminPostOrdersClaimCancel } from "./cancel-claim"
import {
AdminPostOrdersOrderClaimsClaimParams,
AdminPostOrdersOrderClaimsClaimReq,
} from "./update-claim"
import {
AdminPostOrdersOrderClaimsClaimFulfillmentsParams,
AdminPostOrdersOrderClaimsClaimFulfillmentsReq,
} from "./fulfill-claim"
import { import {
AdminPostOrdersOrderClaimsClaimShipmentsParams, AdminPostOrdersOrderClaimsClaimShipmentsParams,
AdminPostOrdersOrderClaimsClaimShipmentsReq, AdminPostOrdersOrderClaimsClaimShipmentsReq,
} from "./create-claim-shipment" } from "./create-claim-shipment"
import { import {
defaultAdminOrdersFields, AdminPostOrdersOrderFulfillmentsParams,
defaultAdminOrdersRelations, AdminPostOrdersOrderFulfillmentsReq,
} from "../../../../types/orders" } from "./create-fulfillment"
import { AdminOrdersOrderLineItemReservationReq } from "./create-reservation-for-line-item"
import {
AdminPostOrdersOrderShipmentParams,
AdminPostOrdersOrderShipmentReq,
} from "./create-shipment"
import {
AdminPostOrdersOrderSwapsParams,
AdminPostOrdersOrderSwapsReq,
} from "./create-swap"
import {
AdminPostOrdersOrderSwapsSwapShipmentsParams,
AdminPostOrdersOrderSwapsSwapShipmentsReq,
} from "./create-swap-shipment"
import {
AdminPostOrdersOrderClaimsClaimFulfillmentsParams,
AdminPostOrdersOrderClaimsClaimFulfillmentsReq,
} from "./fulfill-claim"
import { AdminPostOrdersOrderSwapsSwapFulfillmentsParams } from "./fulfill-swap"
import { AdminGetOrdersOrderReservationsParams } from "./get-reservations"
import { AdminGetOrdersParams } from "./list-orders"
import { AdminPostOrdersOrderSwapsSwapProcessPaymentParams } from "./process-swap-payment"
import {
AdminPostOrdersOrderRefundsParams,
AdminPostOrdersOrderRefundsReq,
} from "./refund-payment"
import {
AdminPostOrdersOrderReturnsParams,
AdminPostOrdersOrderReturnsReq,
} from "./request-return"
import {
AdminPostOrdersOrderClaimsClaimParams,
AdminPostOrdersOrderClaimsClaimReq,
} from "./update-claim"
import {
AdminPostOrdersOrderParams,
AdminPostOrdersOrderReq,
} from "./update-order"
const route = Router() const route = Router()
@@ -779,3 +779,4 @@ export * from "./refund-payment"
export * from "./request-return" export * from "./request-return"
export * from "./update-claim" export * from "./update-claim"
export * from "./update-order" export * from "./update-order"
@@ -1,20 +1,20 @@
import { FlagRouter } from "@medusajs/utils"
import { Router } from "express" import { Router } from "express"
import "reflect-metadata" import "reflect-metadata"
import { PriceList, Product } from "../../../.." import { PriceList, Product } from "../../../.."
import TaxInclusivePricingFeatureFlag from "../../../../loaders/feature-flags/tax-inclusive-pricing"
import { DeleteResponse, PaginatedResponse } from "../../../../types/common" import { DeleteResponse, PaginatedResponse } from "../../../../types/common"
import middlewares, { import middlewares, {
transformBody, transformBody,
transformQuery, transformQuery,
} from "../../../middlewares" } from "../../../middlewares"
import { AdminGetPriceListPaginationParams } from "./list-price-lists"
import { AdminGetPriceListsPriceListProductsParams } from "./list-price-list-products"
import { import {
defaultAdminProductFields, defaultAdminProductFields,
defaultAdminProductRelations, defaultAdminProductRelations,
} from "../products" } from "../products"
import { AdminPostPriceListsPriceListReq } from "./create-price-list" import { AdminPostPriceListsPriceListReq } from "./create-price-list"
import { FlagRouter } from "../../../../utils/flag-router" import { AdminGetPriceListsPriceListProductsParams } from "./list-price-list-products"
import TaxInclusivePricingFeatureFlag from "../../../../loaders/feature-flags/tax-inclusive-pricing" import { AdminGetPriceListPaginationParams } from "./list-price-lists"
const route = Router() const route = Router()
@@ -280,8 +280,9 @@ export type AdminPriceListsProductsListRes = PaginatedResponse & {
export * from "./add-prices-batch" export * from "./add-prices-batch"
export * from "./create-price-list" export * from "./create-price-list"
export * from "./delete-price-list" export * from "./delete-price-list"
export * from "./delete-prices-batch"
export * from "./get-price-list" export * from "./get-price-list"
export * from "./list-price-list-products"
export * from "./list-price-lists" export * from "./list-price-lists"
export * from "./update-price-list" export * from "./update-price-list"
export * from "./delete-prices-batch"
export * from "./list-price-list-products"
@@ -1,14 +1,14 @@
import "reflect-metadata" import "reflect-metadata"
import { FindParams, PaginatedResponse } from "../../../../types/common"
import { Product, ProductTag, ProductType, ProductVariant } from "../../../.." import { Product, ProductTag, ProductType, ProductVariant } from "../../../.."
import { FindParams, PaginatedResponse } from "../../../../types/common"
import middlewares, { transformQuery } from "../../../middlewares" import middlewares, { transformQuery } from "../../../middlewares"
import { AdminGetProductsParams } from "./list-products" import { FlagRouter } from "@medusajs/utils"
import { FlagRouter } from "../../../../utils/flag-router"
import { Router } from "express" import { Router } from "express"
import { validateSalesChannelsExist } from "../../../middlewares/validators/sales-channel-existence"
import { PricedProduct } from "../../../../types/pricing" import { PricedProduct } from "../../../../types/pricing"
import { validateSalesChannelsExist } from "../../../middlewares/validators/sales-channel-existence"
import { AdminGetProductsParams } from "./list-products"
const route = Router() const route = Router()
@@ -407,3 +407,4 @@ export * from "./set-metadata"
export * from "./update-option" export * from "./update-option"
export * from "./update-product" export * from "./update-product"
export * from "./update-variant" export * from "./update-variant"
@@ -1,10 +1,10 @@
import { FlagRouter } from "@medusajs/utils"
import { Router } from "express" import { Router } from "express"
import "reflect-metadata"
import { Region } from "../../../.." import { Region } from "../../../.."
import TaxInclusivePricingFeatureFlag from "../../../../loaders/feature-flags/tax-inclusive-pricing"
import { DeleteResponse, PaginatedResponse } from "../../../../types/common" import { DeleteResponse, PaginatedResponse } from "../../../../types/common"
import middlewares from "../../../middlewares" import middlewares from "../../../middlewares"
import "reflect-metadata"
import { FlagRouter } from "../../../../utils/flag-router"
import TaxInclusivePricingFeatureFlag from "../../../../loaders/feature-flags/tax-inclusive-pricing"
const route = Router() const route = Router()
@@ -204,9 +204,10 @@ export class AdminGetRegionsRegionFulfillmentOptionsRes {
fulfillment_options: FulfillmentOption[] fulfillment_options: FulfillmentOption[]
} }
export * from "./add-country"
export * from "./add-fulfillment-provider"
export * from "./add-payment-provider"
export * from "./create-region"
export * from "./list-regions" export * from "./list-regions"
export * from "./update-region" export * from "./update-region"
export * from "./create-region"
export * from "./add-country"
export * from "./add-payment-provider"
export * from "./add-fulfillment-provider"
@@ -1,9 +1,9 @@
import { FlagRouter } from "@medusajs/utils"
import { Router } from "express" import { Router } from "express"
import { ShippingOption } from "../../../.." import { ShippingOption } from "../../../.."
import TaxInclusivePricingFeatureFlag from "../../../../loaders/feature-flags/tax-inclusive-pricing"
import { DeleteResponse, PaginatedResponse } from "../../../../types/common" import { DeleteResponse, PaginatedResponse } from "../../../../types/common"
import middlewares from "../../../middlewares" import middlewares from "../../../middlewares"
import { FlagRouter } from "../../../../utils/flag-router"
import TaxInclusivePricingFeatureFlag from "../../../../loaders/feature-flags/tax-inclusive-pricing"
const route = Router() const route = Router()
@@ -139,3 +139,4 @@ export * from "./delete-shipping-option"
export * from "./get-shipping-option" export * from "./get-shipping-option"
export * from "./list-shipping-options" export * from "./list-shipping-options"
export * from "./update-shipping-option" export * from "./update-shipping-option"
@@ -1,12 +1,12 @@
import { ModulesHelper } from "@medusajs/modules-sdk" import { ModulesHelper } from "@medusajs/modules-sdk"
import { FlagRouter } from "@medusajs/utils"
import { defaultRelationsExtended } from "." import { defaultRelationsExtended } from "."
import { import {
FulfillmentProviderService, FulfillmentProviderService,
PaymentProviderService, PaymentProviderService,
StoreService, StoreService,
} from "../../../../services" } from "../../../../services"
import { ExtendedStoreDTO } from "../../../../types/store" import { ExtendedStoreDTO } from "../../../../types/store"
import { FlagRouter } from "../../../../utils/flag-router"
/** /**
* @oas [get] /admin/store * @oas [get] /admin/store
@@ -17,6 +17,7 @@ import reqIp from "request-ip"
import { EntityManager } from "typeorm" import { EntityManager } from "typeorm"
import { Logger } from "@medusajs/types" import { Logger } from "@medusajs/types"
import { FlagRouter } from "@medusajs/utils"
import { defaultStoreCartFields, defaultStoreCartRelations } from "." import { defaultStoreCartFields, defaultStoreCartRelations } from "."
import SalesChannelFeatureFlag from "../../../../loaders/feature-flags/sales-channels" import SalesChannelFeatureFlag from "../../../../loaders/feature-flags/sales-channels"
import { Cart, LineItem } from "../../../../models" import { Cart, LineItem } from "../../../../models"
@@ -28,7 +29,6 @@ import {
import { CartCreateProps } from "../../../../types/cart" import { CartCreateProps } from "../../../../types/cart"
import { cleanResponseData } from "../../../../utils/clean-response-data" import { cleanResponseData } from "../../../../utils/clean-response-data"
import { FeatureFlagDecorators } from "../../../../utils/feature-flag-decorators" import { FeatureFlagDecorators } from "../../../../utils/feature-flag-decorators"
import { FlagRouter } from "../../../../utils/flag-router"
/** /**
* @oas [post] /store/carts * @oas [post] /store/carts
@@ -1,10 +1,10 @@
import { FlagRouter } from "@medusajs/utils"
import { AwilixContainer } from "awilix" import { AwilixContainer } from "awilix"
import { EntityManager } from "typeorm" import { EntityManager } from "typeorm"
import { Cart } from "../../../../../../models" import { Cart } from "../../../../../../models"
import { CartService, LineItemService } from "../../../../../../services" import { CartService, LineItemService } from "../../../../../../services"
import { WithRequiredProperty } from "../../../../../../types/common" import { WithRequiredProperty } from "../../../../../../types/common"
import { IdempotencyCallbackResult } from "../../../../../../types/idempotency-key" import { IdempotencyCallbackResult } from "../../../../../../types/idempotency-key"
import { FlagRouter } from "../../../../../../utils/flag-router"
import { defaultStoreCartFields, defaultStoreCartRelations } from "../../index" import { defaultStoreCartFields, defaultStoreCartRelations } from "../../index"
export const CreateLineItemSteps = { export const CreateLineItemSteps = {
@@ -2,17 +2,17 @@ import "reflect-metadata"
import middlewares, { transformStoreQuery } from "../../../middlewares" import middlewares, { transformStoreQuery } from "../../../middlewares"
import { FlagRouter } from "../../../../utils/flag-router" import { FlagRouter } from "@medusajs/utils"
import { Router } from "express"
import { Product } from "../../../.."
import { PaginatedResponse } from "../../../../types/common" import { PaginatedResponse } from "../../../../types/common"
import { PricedProduct } from "../../../../types/pricing" import { PricedProduct } from "../../../../types/pricing"
import { Product } from "../../../.."
import { Router } from "express"
import { StoreGetProductsParams } from "./list-products"
import { StoreGetProductsProductParams } from "./get-product"
import { extendRequestParams } from "../../../middlewares/publishable-api-key/extend-request-params" import { extendRequestParams } from "../../../middlewares/publishable-api-key/extend-request-params"
import { validateProductSalesChannelAssociation } from "../../../middlewares/publishable-api-key/validate-product-sales-channel-association" import { validateProductSalesChannelAssociation } from "../../../middlewares/publishable-api-key/validate-product-sales-channel-association"
import { validateSalesChannelParam } from "../../../middlewares/publishable-api-key/validate-sales-channel-param" import { validateSalesChannelParam } from "../../../middlewares/publishable-api-key/validate-sales-channel-param"
import { withDefaultSalesChannel } from "../../../middlewares/with-default-sales-channel" import { withDefaultSalesChannel } from "../../../middlewares/with-default-sales-channel"
import { StoreGetProductsProductParams } from "./get-product"
import { StoreGetProductsParams } from "./list-products"
const route = Router() const route = Router()
+24 -24
View File
@@ -1,31 +1,31 @@
import { import { FlagRouter } from "@medusajs/utils"
BaseFulfillmentService,
BaseNotificationService,
BasePaymentService,
} from "medusa-interfaces"
import { currencies } from "../utils/currencies"
import { countries } from "../utils/countries"
import { AwilixContainer } from "awilix" import { AwilixContainer } from "awilix"
import { Logger } from "../types/global" import {
BaseFulfillmentService,
BaseNotificationService,
BasePaymentService,
} from "medusa-interfaces"
import { EntityManager } from "typeorm" import { EntityManager } from "typeorm"
import { CountryRepository } from "../repositories/country"
import { import {
FulfillmentProviderService, AbstractPaymentProcessor,
NotificationService, AbstractPaymentService,
PaymentProviderService, AbstractTaxService,
SalesChannelService,
ShippingProfileService,
StoreService,
TaxProviderService,
} from "../services"
import { CurrencyRepository } from "../repositories/currency"
import { FlagRouter } from "../utils/flag-router"
import SalesChannelFeatureFlag from "./feature-flags/sales-channels"
import {
AbstractPaymentProcessor,
AbstractPaymentService,
AbstractTaxService,
} from "../interfaces" } from "../interfaces"
import { CountryRepository } from "../repositories/country"
import { CurrencyRepository } from "../repositories/currency"
import {
FulfillmentProviderService,
NotificationService,
PaymentProviderService,
SalesChannelService,
ShippingProfileService,
StoreService,
TaxProviderService,
} from "../services"
import { Logger } from "../types/global"
import { countries } from "../utils/countries"
import { currencies } from "../utils/currencies"
import SalesChannelFeatureFlag from "./feature-flags/sales-channels"
const silentResolution = <T>( const silentResolution = <T>(
container: AwilixContainer, container: AwilixContainer,
@@ -1,15 +1,15 @@
import { FlagRouter } from "@medusajs/utils"
import { asClass, asValue, createContainer } from "awilix" import { asClass, asValue, createContainer } from "awilix"
import { IdMap, MockManager } from "medusa-test-utils" import { IdMap, MockManager } from "medusa-test-utils"
import { taxProviderServiceMock } from "../__mocks__/tax-provider"
import { FlagRouter } from "../../utils/flag-router"
import { import {
GiftCard, GiftCard,
LineItem, LineItem,
LineItemTaxLine, LineItemTaxLine,
ShippingMethod, ShippingMethod,
ShippingMethodTaxLine, ShippingMethodTaxLine,
} from "../../models" } from "../../models"
import TaxCalculationStrategy from "../../strategies/tax-calculation" import TaxCalculationStrategy from "../../strategies/tax-calculation"
import { taxProviderServiceMock } from "../__mocks__/tax-provider"
export const defaultContainerMock = createContainer() export const defaultContainerMock = createContainer()
defaultContainerMock.register("manager", asValue(MockManager)) defaultContainerMock.register("manager", asValue(MockManager))
@@ -1,18 +1,18 @@
import { FlagRouter } from "@medusajs/utils"
import { asClass, asFunction, asValue, createContainer } from "awilix" import { asClass, asFunction, asValue, createContainer } from "awilix"
import { MockManager, MockRepository } from "medusa-test-utils" import { MockManager, MockRepository } from "medusa-test-utils"
import PaymentProviderService from "../payment-provider"
import { PaymentProviderServiceMock } from "../__mocks__/payment-provider"
import { CustomerServiceMock } from "../__mocks__/customer"
import { FlagRouter } from "../../utils/flag-router"
import Logger from "../../loaders/logger"
import { import {
AbstractPaymentProcessor, AbstractPaymentProcessor,
PaymentProcessorContext, PaymentProcessorContext,
PaymentProcessorError, PaymentProcessorError,
PaymentProcessorSessionResponse, PaymentProcessorSessionResponse,
} from "../../interfaces" } from "../../interfaces"
import Logger from "../../loaders/logger"
import { PaymentSessionStatus } from "../../models" import { PaymentSessionStatus } from "../../models"
import { CustomerServiceMock } from "../__mocks__/customer"
import { PaymentServiceMock } from "../__mocks__/payment" import { PaymentServiceMock } from "../__mocks__/payment"
import { PaymentProviderServiceMock } from "../__mocks__/payment-provider"
import PaymentProviderService from "../payment-provider"
export const defaultContainer = createContainer() export const defaultContainer = createContainer()
defaultContainer.register( defaultContainer.register(
@@ -2,7 +2,7 @@ import _ from "lodash"
import { asClass, asValue, createContainer } from "awilix" import { asClass, asValue, createContainer } from "awilix"
import { MedusaError } from "medusa-core-utils" import { MedusaError } from "medusa-core-utils"
import { IdMap, MockManager, MockRepository } from "medusa-test-utils" import { IdMap, MockManager, MockRepository } from "medusa-test-utils"
import { FlagRouter } from "../../utils/flag-router" import { FlagRouter } from "@medusajs/utils"
import CartService from "../cart" import CartService from "../cart"
import { ProductVariantInventoryServiceMock } from "../__mocks__/product-variant-inventory" import { ProductVariantInventoryServiceMock } from "../__mocks__/product-variant-inventory"
import { LineItemAdjustmentServiceMock } from "../__mocks__/line-item-adjustment" import { LineItemAdjustmentServiceMock } from "../__mocks__/line-item-adjustment"
@@ -1,7 +1,7 @@
import { FlagRouter } from "@medusajs/utils"
import { IdMap, MockManager, MockRepository } from "medusa-test-utils" import { IdMap, MockManager, MockRepository } from "medusa-test-utils"
import TaxInclusivePricingFeatureFlag from "../../loaders/feature-flags/tax-inclusive-pricing" import TaxInclusivePricingFeatureFlag from "../../loaders/feature-flags/tax-inclusive-pricing"
import { Currency } from "../../models" import { Currency } from "../../models"
import { FlagRouter } from "../../utils/flag-router"
import CurrencyService from "../currency" import CurrencyService from "../currency"
import EventBusService from "../event-bus" import EventBusService from "../event-bus"
@@ -1,5 +1,5 @@
import { IdMap, MockManager, MockRepository } from "medusa-test-utils" import { IdMap, MockManager, MockRepository } from "medusa-test-utils"
import { FlagRouter } from "../../utils/flag-router" import { FlagRouter } from "@medusajs/utils"
import DiscountService from "../discount" import DiscountService from "../discount"
import { TotalsServiceMock } from "../__mocks__/totals" import { TotalsServiceMock } from "../__mocks__/totals"
import { newTotalsServiceMock } from "../__mocks__/new-totals" import { newTotalsServiceMock } from "../__mocks__/new-totals"
@@ -1,5 +1,5 @@
import { IdMap, MockManager, MockRepository } from "medusa-test-utils" import { IdMap, MockManager, MockRepository } from "medusa-test-utils"
import { FlagRouter } from "../../utils/flag-router" import { FlagRouter } from "@medusajs/utils"
import LineItemService from "../line-item" import LineItemService from "../line-item"
import { PricingServiceMock } from "../__mocks__/pricing" import { PricingServiceMock } from "../__mocks__/pricing"
import { ProductVariantServiceMock } from "../__mocks__/product-variant" import { ProductVariantServiceMock } from "../__mocks__/product-variant"
@@ -1,24 +1,24 @@
import { FlagRouter } from "@medusajs/utils"
import { asClass, asValue, createContainer } from "awilix" import { asClass, asValue, createContainer } from "awilix"
import {
defaultContainerMock,
giftCards,
giftCardsWithTaxRate,
lineItems,
shippingMethods,
} from "../__fixtures__/new-totals"
import { NewTotalsService } from "../index"
import { TaxCalculationContext } from "../../interfaces" import { TaxCalculationContext } from "../../interfaces"
import { taxProviderServiceMock } from "../__mocks__/tax-provider"
import {
Discount,
DiscountRuleType,
LineItem,
ProductVariant,
Region,
ShippingMethod,
} from "../../models"
import { FlagRouter } from "../../utils/flag-router"
import TaxInclusivePricingFeatureFlag from "../../loaders/feature-flags/tax-inclusive-pricing" import TaxInclusivePricingFeatureFlag from "../../loaders/feature-flags/tax-inclusive-pricing"
import {
Discount,
DiscountRuleType,
LineItem,
ProductVariant,
Region,
ShippingMethod,
} from "../../models"
import {
defaultContainerMock,
giftCards,
giftCardsWithTaxRate,
lineItems,
shippingMethods,
} from "../__fixtures__/new-totals"
import { taxProviderServiceMock } from "../__mocks__/tax-provider"
import { NewTotalsService } from "../index"
describe("New totals service", () => { describe("New totals service", () => {
describe("Without [MEDUSA_FF_TAX_INCLUSIVE_PRICING]", () => { describe("Without [MEDUSA_FF_TAX_INCLUSIVE_PRICING]", () => {
@@ -1,7 +1,7 @@
import { MedusaError } from "medusa-core-utils" import { MedusaError } from "medusa-core-utils"
import { IdMap, MockManager, MockRepository } from "medusa-test-utils" import { IdMap, MockManager, MockRepository } from "medusa-test-utils"
import { MoneyAmountRepository } from "../../repositories/money-amount" import { MoneyAmountRepository } from "../../repositories/money-amount"
import { FlagRouter } from "../../utils/flag-router" import { FlagRouter } from "@medusajs/utils"
import PriceListService from "../price-list" import PriceListService from "../price-list"
import { RegionServiceMock } from "../__mocks__/region" import { RegionServiceMock } from "../__mocks__/region"
@@ -1,6 +1,6 @@
import { IdMap, MockManager, MockRepository } from "medusa-test-utils" import { IdMap, MockManager, MockRepository } from "medusa-test-utils"
import ProductService from "../product" import ProductService from "../product"
import { FlagRouter } from "../../utils/flag-router" import { FlagRouter } from "@medusajs/utils"
const eventBusService = { const eventBusService = {
emit: jest.fn(), emit: jest.fn(),
@@ -1,11 +1,11 @@
import { FlagRouter } from "@medusajs/utils"
import { IdMap, MockManager, MockRepository } from "medusa-test-utils" import { IdMap, MockManager, MockRepository } from "medusa-test-utils"
import { CreateRegionInput } from "../../types/region" import { CreateRegionInput } from "../../types/region"
import { FlagRouter } from "../../utils/flag-router"
import EventBusService from "../event-bus" import EventBusService from "../event-bus"
import { import {
FulfillmentProviderService, FulfillmentProviderService,
PaymentProviderService, PaymentProviderService,
StoreService, StoreService,
} from "../index" } from "../index"
import RegionService from "../region" import RegionService from "../region"
@@ -1,6 +1,6 @@
import { IdMap, MockManager, MockRepository } from "medusa-test-utils" import { IdMap, MockManager, MockRepository } from "medusa-test-utils"
import TaxInclusivePricingFeatureFlag from "../../loaders/feature-flags/tax-inclusive-pricing" import TaxInclusivePricingFeatureFlag from "../../loaders/feature-flags/tax-inclusive-pricing"
import { FlagRouter } from "../../utils/flag-router" import { FlagRouter } from "@medusajs/utils"
import ShippingOptionService from "../shipping-option" import ShippingOptionService from "../shipping-option"
describe("ShippingOptionService", () => { describe("ShippingOptionService", () => {
@@ -1,6 +1,6 @@
import { IdMap } from "medusa-test-utils" import { IdMap } from "medusa-test-utils"
import TotalsService from "../totals" import TotalsService from "../totals"
import { FlagRouter } from "../../utils/flag-router" import { FlagRouter } from "@medusajs/utils"
import TaxInclusivePricingFeatureFlag from "../../loaders/feature-flags/tax-inclusive-pricing" import TaxInclusivePricingFeatureFlag from "../../loaders/feature-flags/tax-inclusive-pricing"
import { calculatePriceTaxAmount } from "../../utils" import { calculatePriceTaxAmount } from "../../utils"
+42 -42
View File
@@ -1,41 +1,42 @@
import { FlagRouter } from "@medusajs/utils"
import { isEmpty, isEqual } from "lodash" import { isEmpty, isEqual } from "lodash"
import { isDefined, MedusaError } from "medusa-core-utils" import { MedusaError, isDefined } from "medusa-core-utils"
import { DeepPartial, EntityManager, In, IsNull, Not } from "typeorm" import { DeepPartial, EntityManager, In, IsNull, Not } from "typeorm"
import { import {
CustomerService, CustomShippingOptionService,
CustomShippingOptionService, CustomerService,
DiscountService, DiscountService,
EventBusService, EventBusService,
GiftCardService, GiftCardService,
LineItemAdjustmentService, LineItemAdjustmentService,
LineItemService, LineItemService,
NewTotalsService, NewTotalsService,
PaymentProviderService, PaymentProviderService,
ProductService, ProductService,
ProductVariantInventoryService, ProductVariantInventoryService,
ProductVariantService, ProductVariantService,
RegionService, RegionService,
SalesChannelService, SalesChannelService,
ShippingOptionService, ShippingOptionService,
StoreService, StoreService,
TaxProviderService, TaxProviderService,
TotalsService, TotalsService,
} from "." } from "."
import { IPriceSelectionStrategy, TransactionBaseService } from "../interfaces" import { IPriceSelectionStrategy, TransactionBaseService } from "../interfaces"
import SalesChannelFeatureFlag from "../loaders/feature-flags/sales-channels" import SalesChannelFeatureFlag from "../loaders/feature-flags/sales-channels"
import { import {
Address, Address,
Cart, Cart,
Customer, CustomShippingOption,
CustomShippingOption, Customer,
Discount, Discount,
DiscountRule, DiscountRule,
DiscountRuleType, DiscountRuleType,
LineItem, LineItem,
PaymentSession, PaymentSession,
PaymentSessionStatus, PaymentSessionStatus,
SalesChannel, SalesChannel,
ShippingMethod, ShippingMethod,
} from "../models" } from "../models"
import { AddressRepository } from "../repositories/address" import { AddressRepository } from "../repositories/address"
import { CartRepository } from "../repositories/cart" import { CartRepository } from "../repositories/cart"
@@ -43,22 +44,21 @@ import { LineItemRepository } from "../repositories/line-item"
import { PaymentSessionRepository } from "../repositories/payment-session" import { PaymentSessionRepository } from "../repositories/payment-session"
import { ShippingMethodRepository } from "../repositories/shipping-method" import { ShippingMethodRepository } from "../repositories/shipping-method"
import { import {
CartCreateProps, CartCreateProps,
CartUpdateProps, CartUpdateProps,
FilterableCartProps, FilterableCartProps,
isCart, LineItemUpdate,
LineItemUpdate, LineItemValidateData,
LineItemValidateData, isCart,
} from "../types/cart" } from "../types/cart"
import { import {
AddressPayload, AddressPayload,
FindConfig, FindConfig,
TotalField, TotalField,
WithRequiredProperty, WithRequiredProperty,
} from "../types/common" } from "../types/common"
import { PaymentSessionInput } from "../types/payment" import { PaymentSessionInput } from "../types/payment"
import { buildQuery, isString, setMetadata } from "../utils" import { buildQuery, isString, setMetadata } from "../utils"
import { FlagRouter } from "../utils/flag-router"
import { validateEmail } from "../utils/is-email" import { validateEmail } from "../utils/is-email"
type InjectedDependencies = { type InjectedDependencies = {
+1 -1
View File
@@ -1,3 +1,4 @@
import { FlagRouter } from "@medusajs/utils"
import { MedusaError } from "medusa-core-utils" import { MedusaError } from "medusa-core-utils"
import { EntityManager } from "typeorm" import { EntityManager } from "typeorm"
import { TransactionBaseService } from "../interfaces" import { TransactionBaseService } from "../interfaces"
@@ -7,7 +8,6 @@ import { CurrencyRepository } from "../repositories/currency"
import { FindConfig, Selector } from "../types/common" import { FindConfig, Selector } from "../types/common"
import { UpdateCurrencyInput } from "../types/currency" import { UpdateCurrencyInput } from "../types/currency"
import { buildQuery } from "../utils" import { buildQuery } from "../utils"
import { FlagRouter } from "../utils/flag-router"
import EventBusService from "./event-bus" import EventBusService from "./event-bus"
type InjectedDependencies = { type InjectedDependencies = {
+24 -24
View File
@@ -1,32 +1,33 @@
import { FlagRouter } from "@medusajs/utils"
import { parse, toSeconds } from "iso8601-duration" import { parse, toSeconds } from "iso8601-duration"
import { isEmpty, omit } from "lodash" import { isEmpty, omit } from "lodash"
import { MedusaError, isDefined } from "medusa-core-utils" import { MedusaError, isDefined } from "medusa-core-utils"
import { import {
DeepPartial, DeepPartial,
EntityManager, EntityManager,
FindOptionsWhere, FindOptionsWhere,
ILike, ILike,
In, In,
} from "typeorm" } from "typeorm"
import { import {
NewTotalsService, NewTotalsService,
ProductService, ProductService,
RegionService, RegionService,
TotalsService, TotalsService,
} from "." } from "."
import { TransactionBaseService } from "../interfaces" import { TransactionBaseService } from "../interfaces"
import TaxInclusivePricingFeatureFlag from "../loaders/feature-flags/tax-inclusive-pricing" import TaxInclusivePricingFeatureFlag from "../loaders/feature-flags/tax-inclusive-pricing"
import { import {
Cart, Cart,
Discount, Discount,
DiscountConditionType, DiscountConditionType,
LineItem, LineItem,
Region, Region,
} from "../models" } from "../models"
import { import {
AllocationType as DiscountAllocation, AllocationType as DiscountAllocation,
DiscountRule, DiscountRule,
DiscountRuleType, DiscountRuleType,
} from "../models/discount-rule" } from "../models/discount-rule"
import { DiscountRepository } from "../repositories/discount" import { DiscountRepository } from "../repositories/discount"
import { DiscountConditionRepository } from "../repositories/discount-condition" import { DiscountConditionRepository } from "../repositories/discount-condition"
@@ -34,17 +35,16 @@ import { DiscountRuleRepository } from "../repositories/discount-rule"
import { GiftCardRepository } from "../repositories/gift-card" import { GiftCardRepository } from "../repositories/gift-card"
import { FindConfig, Selector } from "../types/common" import { FindConfig, Selector } from "../types/common"
import { import {
CreateDiscountInput, CreateDiscountInput,
CreateDiscountRuleInput, CreateDiscountRuleInput,
CreateDynamicDiscountInput, CreateDynamicDiscountInput,
FilterableDiscountProps, FilterableDiscountProps,
UpdateDiscountInput, UpdateDiscountInput,
UpdateDiscountRuleInput, UpdateDiscountRuleInput,
} from "../types/discount" } from "../types/discount"
import { CalculationContextData } from "../types/totals" import { CalculationContextData } from "../types/totals"
import { buildQuery, setMetadata } from "../utils" import { buildQuery, setMetadata } from "../utils"
import { isFuture, isPast } from "../utils/date-helpers" import { isFuture, isPast } from "../utils/date-helpers"
import { FlagRouter } from "../utils/flag-router"
import CustomerService from "./customer" import CustomerService from "./customer"
import DiscountConditionService from "./discount-condition" import DiscountConditionService from "./discount-condition"
import EventBusService from "./event-bus" import EventBusService from "./event-bus"
+10 -10
View File
@@ -2,13 +2,14 @@ import { MedusaError } from "medusa-core-utils"
import { EntityManager, In } from "typeorm" import { EntityManager, In } from "typeorm"
import { DeepPartial } from "typeorm/common/DeepPartial" import { DeepPartial } from "typeorm/common/DeepPartial"
import { FlagRouter } from "@medusajs/utils"
import { TransactionBaseService } from "../interfaces" import { TransactionBaseService } from "../interfaces"
import TaxInclusivePricingFeatureFlag from "../loaders/feature-flags/tax-inclusive-pricing" import TaxInclusivePricingFeatureFlag from "../loaders/feature-flags/tax-inclusive-pricing"
import { import {
LineItem, LineItem,
LineItemAdjustment, LineItemAdjustment,
LineItemTaxLine, LineItemTaxLine,
ProductVariant, ProductVariant,
} from "../models" } from "../models"
import { CartRepository } from "../repositories/cart" import { CartRepository } from "../repositories/cart"
import { LineItemRepository } from "../repositories/line-item" import { LineItemRepository } from "../repositories/line-item"
@@ -17,13 +18,12 @@ import { FindConfig, Selector } from "../types/common"
import { GenerateInputData, GenerateLineItemContext } from "../types/line-item" import { GenerateInputData, GenerateLineItemContext } from "../types/line-item"
import { ProductVariantPricing } from "../types/pricing" import { ProductVariantPricing } from "../types/pricing"
import { buildQuery, isString, setMetadata } from "../utils" import { buildQuery, isString, setMetadata } from "../utils"
import { FlagRouter } from "../utils/flag-router"
import { import {
PricingService, PricingService,
ProductService, ProductService,
ProductVariantService, ProductVariantService,
RegionService, RegionService,
TaxProviderService, TaxProviderService,
} from "./index" } from "./index"
import LineItemAdjustmentService from "./line-item-adjustment" import LineItemAdjustmentService from "./line-item-adjustment"
+18 -18
View File
@@ -1,25 +1,25 @@
import { import { FlagRouter } from "@medusajs/utils"
ITaxCalculationStrategy, import { MedusaError, isDefined } from "medusa-core-utils"
TaxCalculationContext,
TransactionBaseService,
} from "../interfaces"
import { EntityManager } from "typeorm" import { EntityManager } from "typeorm"
import { import {
Discount, ITaxCalculationStrategy,
DiscountRuleType, TaxCalculationContext,
GiftCard, TransactionBaseService,
LineItem, } from "../interfaces"
LineItemTaxLine,
Region,
ShippingMethod,
ShippingMethodTaxLine,
} from "../models"
import { TaxProviderService } from "./index"
import { LineAllocationsMap } from "../types/totals"
import TaxInclusivePricingFeatureFlag from "../loaders/feature-flags/tax-inclusive-pricing" import TaxInclusivePricingFeatureFlag from "../loaders/feature-flags/tax-inclusive-pricing"
import { FlagRouter } from "../utils/flag-router" import {
Discount,
DiscountRuleType,
GiftCard,
LineItem,
LineItemTaxLine,
Region,
ShippingMethod,
ShippingMethodTaxLine,
} from "../models"
import { LineAllocationsMap } from "../types/totals"
import { calculatePriceTaxAmount } from "../utils" import { calculatePriceTaxAmount } from "../utils"
import { isDefined, MedusaError } from "medusa-core-utils" import { TaxProviderService } from "./index"
type LineItemTotals = { type LineItemTotals = {
unit_price: number unit_price: number
+46 -46
View File
@@ -1,67 +1,67 @@
import { IInventoryService } from "@medusajs/types" import { IInventoryService } from "@medusajs/types"
import { import {
buildRelations, buildRelations,
buildSelects, buildSelects,
isDefined, FlagRouter,
MedusaError, isDefined,
MedusaError,
} from "@medusajs/utils" } from "@medusajs/utils"
import { import {
EntityManager, EntityManager,
FindManyOptions, FindManyOptions,
FindOptionsWhere, FindOptionsWhere,
ILike, ILike,
IsNull, IsNull,
Not, Not,
Raw, Raw,
} from "typeorm" } from "typeorm"
import { import {
CartService, CartService,
CustomerService, CustomerService,
DiscountService, DiscountService,
DraftOrderService, DraftOrderService,
FulfillmentProviderService, FulfillmentProviderService,
FulfillmentService, FulfillmentService,
GiftCardService, GiftCardService,
LineItemService, LineItemService,
NewTotalsService, NewTotalsService,
PaymentProviderService, PaymentProviderService,
ProductVariantInventoryService, ProductVariantInventoryService,
RegionService, RegionService,
ShippingOptionService, ShippingOptionService,
ShippingProfileService, ShippingProfileService,
TaxProviderService, TaxProviderService,
TotalsService, TotalsService,
} from "." } from "."
import { TransactionBaseService } from "../interfaces"
import SalesChannelFeatureFlag from "../loaders/feature-flags/sales-channels" import SalesChannelFeatureFlag from "../loaders/feature-flags/sales-channels"
import { import {
Address, Address,
Cart, Cart,
ClaimOrder, ClaimOrder,
Fulfillment, Fulfillment,
FulfillmentItem, FulfillmentItem,
FulfillmentStatus, FulfillmentStatus,
GiftCard, GiftCard,
LineItem, LineItem,
Order, Order,
OrderStatus, OrderStatus,
Payment, Payment,
PaymentStatus, PaymentStatus,
Return, Return,
Swap, Swap,
TrackingLink, TrackingLink,
} from "../models" } from "../models"
import { TransactionBaseService } from "../interfaces"
import { AddressRepository } from "../repositories/address" import { AddressRepository } from "../repositories/address"
import { OrderRepository } from "../repositories/order" import { OrderRepository } from "../repositories/order"
import { FindConfig, QuerySelector, Selector } from "../types/common" import { FindConfig, QuerySelector, Selector } from "../types/common"
import { import {
CreateFulfillmentOrder, CreateFulfillmentOrder,
FulFillmentItemType, FulFillmentItemType,
} from "../types/fulfillment" } from "../types/fulfillment"
import { TotalsContext, UpdateOrderInput } from "../types/orders" import { TotalsContext, UpdateOrderInput } from "../types/orders"
import { CreateShippingMethodDto } from "../types/shipping-options" import { CreateShippingMethodDto } from "../types/shipping-options"
import { buildQuery, isString, setMetadata } from "../utils" import { buildQuery, isString, setMetadata } from "../utils"
import { FlagRouter } from "../utils/flag-router"
import EventBusService from "./event-bus" import EventBusService from "./event-bus"
export const ORDER_CART_ALREADY_EXISTS_ERROR = "Order from cart already exists" export const ORDER_CART_ALREADY_EXISTS_ERROR = "Order from cart already exists"
@@ -1,22 +1,24 @@
import { FlagRouter } from "@medusajs/utils"
import { isDefined, MedusaError } from "medusa-core-utils" import { isDefined, MedusaError } from "medusa-core-utils"
import { BasePaymentService } from "medusa-interfaces" import { BasePaymentService } from "medusa-interfaces"
import { EOL } from "os"
import { EntityManager } from "typeorm" import { EntityManager } from "typeorm"
import { import {
AbstractPaymentProcessor, AbstractPaymentProcessor,
AbstractPaymentService, AbstractPaymentService,
isPaymentProcessorError, isPaymentProcessorError,
PaymentContext, PaymentContext,
PaymentProcessorError, PaymentProcessorError,
PaymentSessionResponse, PaymentSessionResponse,
TransactionBaseService, TransactionBaseService,
} from "../interfaces" } from "../interfaces"
import { import {
Cart, Cart,
Payment, Payment,
PaymentProvider, PaymentProvider,
PaymentSession, PaymentSession,
PaymentSessionStatus, PaymentSessionStatus,
Refund, Refund,
} from "../models" } from "../models"
import { PaymentRepository } from "../repositories/payment" import { PaymentRepository } from "../repositories/payment"
import { PaymentProviderRepository } from "../repositories/payment-provider" import { PaymentProviderRepository } from "../repositories/payment-provider"
@@ -26,10 +28,8 @@ import { FindConfig, Selector } from "../types/common"
import { Logger } from "../types/global" import { Logger } from "../types/global"
import { CreatePaymentInput, PaymentSessionInput } from "../types/payment" import { CreatePaymentInput, PaymentSessionInput } from "../types/payment"
import { buildQuery, isString } from "../utils" import { buildQuery, isString } from "../utils"
import { FlagRouter } from "../utils/flag-router"
import { CustomerService } from "./index" import { CustomerService } from "./index"
import PaymentService from "./payment" import PaymentService from "./payment"
import { EOL } from "os"
type PaymentProviderKey = `pp_${string}` | "systemPaymentProviderService" type PaymentProviderKey = `pp_${string}` | "systemPaymentProviderService"
type InjectedDependencies = { type InjectedDependencies = {
+13 -13
View File
@@ -1,27 +1,27 @@
import { FlagRouter } from "@medusajs/utils"
import { isDefined, MedusaError } from "medusa-core-utils" import { isDefined, MedusaError } from "medusa-core-utils"
import { DeepPartial, EntityManager } from "typeorm" import { DeepPartial, EntityManager } from "typeorm"
import { CustomerGroupService } from "." import { CustomerGroupService } from "."
import { TransactionBaseService } from "../interfaces"
import TaxInclusivePricingFeatureFlag from "../loaders/feature-flags/tax-inclusive-pricing"
import { CustomerGroup, PriceList, Product, ProductVariant } from "../models" import { CustomerGroup, PriceList, Product, ProductVariant } from "../models"
import { MoneyAmountRepository } from "../repositories/money-amount" import { MoneyAmountRepository } from "../repositories/money-amount"
import { PriceListRepository } from "../repositories/price-list" import { PriceListRepository } from "../repositories/price-list"
import { ProductVariantRepository } from "../repositories/product-variant"
import { FindConfig, Selector } from "../types/common" import { FindConfig, Selector } from "../types/common"
import { import {
CreatePriceListInput, CreatePriceListInput,
FilterablePriceListProps, FilterablePriceListProps,
PriceListPriceCreateInput, PriceListPriceCreateInput,
PriceListPriceUpdateInput, PriceListPriceUpdateInput,
UpdatePriceListInput, UpdatePriceListInput,
} from "../types/price-list" } from "../types/price-list"
import ProductService from "./product"
import RegionService from "./region"
import { TransactionBaseService } from "../interfaces"
import { buildQuery } from "../utils"
import { FilterableProductProps } from "../types/product" import { FilterableProductProps } from "../types/product"
import ProductVariantService from "./product-variant"
import { FilterableProductVariantProps } from "../types/product-variant" import { FilterableProductVariantProps } from "../types/product-variant"
import { ProductVariantRepository } from "../repositories/product-variant" import { buildQuery } from "../utils"
import { FlagRouter } from "../utils/flag-router" import ProductService from "./product"
import TaxInclusivePricingFeatureFlag from "../loaders/feature-flags/tax-inclusive-pricing" import ProductVariantService from "./product-variant"
import RegionService from "./region"
type PriceListConstructorProps = { type PriceListConstructorProps = {
manager: EntityManager manager: EntityManager
+9 -9
View File
@@ -1,24 +1,24 @@
import { FlagRouter } from "@medusajs/utils"
import { MedusaError } from "medusa-core-utils" import { MedusaError } from "medusa-core-utils"
import { EntityManager } from "typeorm" import { EntityManager } from "typeorm"
import { ProductVariantService, RegionService, TaxProviderService } from "." import { ProductVariantService, RegionService, TaxProviderService } from "."
import { TransactionBaseService } from "../interfaces" import { TransactionBaseService } from "../interfaces"
import { import {
IPriceSelectionStrategy, IPriceSelectionStrategy,
PriceSelectionContext, PriceSelectionContext,
} from "../interfaces/price-selection-strategy" } from "../interfaces/price-selection-strategy"
import TaxInclusivePricingFeatureFlag from "../loaders/feature-flags/tax-inclusive-pricing" import TaxInclusivePricingFeatureFlag from "../loaders/feature-flags/tax-inclusive-pricing"
import { Product, ProductVariant, Region, ShippingOption } from "../models" import { Product, ProductVariant, Region, ShippingOption } from "../models"
import { import {
PricedProduct, PricedProduct,
PricedShippingOption, PricedShippingOption,
PricedVariant, PricedVariant,
PricingContext, PricingContext,
ProductVariantPricing, ProductVariantPricing,
TaxedPricing, TaxedPricing,
} from "../types/pricing" } from "../types/pricing"
import { TaxServiceRate } from "../types/tax-service" import { TaxServiceRate } from "../types/tax-service"
import { calculatePriceTaxAmount } from "../utils" import { calculatePriceTaxAmount } from "../utils"
import { FlagRouter } from "../utils/flag-router"
type InjectedDependencies = { type InjectedDependencies = {
manager: EntityManager manager: EntityManager
+20 -22
View File
@@ -1,22 +1,26 @@
import {
buildRelations,
buildSelects, FlagRouter, objectToStringPath
} from "@medusajs/utils"
import { isDefined, MedusaError } from "medusa-core-utils" import { isDefined, MedusaError } from "medusa-core-utils"
import { EntityManager, In } from "typeorm" import { EntityManager, In } from "typeorm"
import { ProductVariantService, SearchService } from "." import { ProductVariantService, SearchService } from "."
import { TransactionBaseService } from "../interfaces" import { TransactionBaseService } from "../interfaces"
import SalesChannelFeatureFlag from "../loaders/feature-flags/sales-channels" import SalesChannelFeatureFlag from "../loaders/feature-flags/sales-channels"
import { import {
Product, Product,
ProductCategory, ProductCategory,
ProductOption, ProductOption,
ProductTag, ProductTag,
ProductType, ProductType,
ProductVariant, ProductVariant,
SalesChannel, SalesChannel,
ShippingProfile, ShippingProfile,
} from "../models" } from "../models"
import { ImageRepository } from "../repositories/image" import { ImageRepository } from "../repositories/image"
import { import {
FindWithoutRelationsOptions, FindWithoutRelationsOptions,
ProductRepository, ProductRepository,
} from "../repositories/product" } from "../repositories/product"
import { ProductCategoryRepository } from "../repositories/product-category" import { ProductCategoryRepository } from "../repositories/product-category"
import { ProductOptionRepository } from "../repositories/product-option" import { ProductOptionRepository } from "../repositories/product-option"
@@ -25,21 +29,15 @@ import { ProductTypeRepository } from "../repositories/product-type"
import { ProductVariantRepository } from "../repositories/product-variant" import { ProductVariantRepository } from "../repositories/product-variant"
import { Selector } from "../types/common" import { Selector } from "../types/common"
import { import {
CreateProductInput, CreateProductInput,
FilterableProductProps, FilterableProductProps,
FindProductConfig, FindProductConfig,
ProductOptionInput, ProductOptionInput,
ProductSelector, ProductSelector,
UpdateProductInput, UpdateProductInput,
} from "../types/product" } from "../types/product"
import { buildQuery, isString, setMetadata } from "../utils" import { buildQuery, isString, setMetadata } from "../utils"
import { FlagRouter } from "../utils/flag-router"
import EventBusService from "./event-bus" import EventBusService from "./event-bus"
import {
buildRelations,
buildSelects,
objectToStringPath,
} from "@medusajs/utils"
type InjectedDependencies = { type InjectedDependencies = {
manager: EntityManager manager: EntityManager
+11 -11
View File
@@ -1,24 +1,24 @@
import { Country, Currency, Region } from "../models"
import { CreateRegionInput, UpdateRegionInput } from "../types/region"
import { DeepPartial, EntityManager } from "typeorm"
import { FindConfig, Selector } from "../types/common"
import { MedusaError, isDefined } from "medusa-core-utils" import { MedusaError, isDefined } from "medusa-core-utils"
import { DeepPartial, EntityManager } from "typeorm"
import { Country, Currency, Region } from "../models"
import { FindConfig, Selector } from "../types/common"
import { CreateRegionInput, UpdateRegionInput } from "../types/region"
import { buildQuery, setMetadata } from "../utils" import { buildQuery, setMetadata } from "../utils"
import { FlagRouter } from "@medusajs/utils"
import { TransactionBaseService } from "../interfaces"
import TaxInclusivePricingFeatureFlag from "../loaders/feature-flags/tax-inclusive-pricing"
import { CountryRepository } from "../repositories/country" import { CountryRepository } from "../repositories/country"
import { CurrencyRepository } from "../repositories/currency" import { CurrencyRepository } from "../repositories/currency"
import EventBusService from "./event-bus"
import { FlagRouter } from "../utils/flag-router"
import { FulfillmentProviderRepository } from "../repositories/fulfillment-provider" import { FulfillmentProviderRepository } from "../repositories/fulfillment-provider"
import FulfillmentProviderService from "./fulfillment-provider"
import { PaymentProviderRepository } from "../repositories/payment-provider" import { PaymentProviderRepository } from "../repositories/payment-provider"
import { PaymentProviderService } from "./index"
import { RegionRepository } from "../repositories/region" import { RegionRepository } from "../repositories/region"
import StoreService from "./store"
import TaxInclusivePricingFeatureFlag from "../loaders/feature-flags/tax-inclusive-pricing"
import { TaxProviderRepository } from "../repositories/tax-provider" import { TaxProviderRepository } from "../repositories/tax-provider"
import { TransactionBaseService } from "../interfaces"
import { countries } from "../utils/countries" import { countries } from "../utils/countries"
import EventBusService from "./event-bus"
import FulfillmentProviderService from "./fulfillment-provider"
import { PaymentProviderService } from "./index"
import StoreService from "./store"
type InjectedDependencies = { type InjectedDependencies = {
manager: EntityManager manager: EntityManager
+12 -12
View File
@@ -1,28 +1,28 @@
import { FlagRouter } from "@medusajs/utils"
import { isDefined, MedusaError } from "medusa-core-utils" import { isDefined, MedusaError } from "medusa-core-utils"
import { EntityManager } from "typeorm" import { EntityManager } from "typeorm"
import { TransactionBaseService } from "../interfaces" import { TransactionBaseService } from "../interfaces"
import TaxInclusivePricingFeatureFlag from "../loaders/feature-flags/tax-inclusive-pricing" import TaxInclusivePricingFeatureFlag from "../loaders/feature-flags/tax-inclusive-pricing"
import { import {
Cart, Cart,
Order, Order,
ShippingMethod, ShippingMethod,
ShippingOption, ShippingOption,
ShippingOptionPriceType, ShippingOptionPriceType,
ShippingOptionRequirement, ShippingOptionRequirement,
} from "../models" } from "../models"
import { ShippingMethodRepository } from "../repositories/shipping-method" import { ShippingMethodRepository } from "../repositories/shipping-method"
import { ShippingOptionRepository } from "../repositories/shipping-option" import { ShippingOptionRepository } from "../repositories/shipping-option"
import { ShippingOptionRequirementRepository } from "../repositories/shipping-option-requirement" import { ShippingOptionRequirementRepository } from "../repositories/shipping-option-requirement"
import { FindConfig, Selector } from "../types/common" import { FindConfig, Selector } from "../types/common"
import { import {
CreateShippingMethodDto, CreateShippingMethodDto,
CreateShippingOptionInput, CreateShippingOptionInput,
ShippingMethodUpdate, ShippingMethodUpdate,
UpdateShippingOptionInput, UpdateShippingOptionInput,
ValidatePriceTypeAndAmountInput, ValidatePriceTypeAndAmountInput,
} from "../types/shipping-options" } from "../types/shipping-options"
import { buildQuery, isString, setMetadata } from "../utils" import { buildQuery, isString, setMetadata } from "../utils"
import { FlagRouter } from "../utils/flag-router"
import FulfillmentProviderService from "./fulfillment-provider" import FulfillmentProviderService from "./fulfillment-provider"
import RegionService from "./region" import RegionService from "./region"
+19 -19
View File
@@ -1,36 +1,36 @@
import { isDefined, MedusaError } from "@medusajs/utils" import { isDefined, MedusaError } from "@medusajs/utils"
import { EntityManager } from "typeorm" import { EntityManager } from "typeorm"
import { import {
ITaxCalculationStrategy, ITaxCalculationStrategy,
TaxCalculationContext, TaxCalculationContext,
TransactionBaseService, TransactionBaseService,
} from "../interfaces" } from "../interfaces"
import { import {
Cart, Cart,
ClaimOrder, ClaimOrder,
Discount, Discount,
DiscountRuleType, DiscountRuleType,
LineItem, LineItem,
LineItemTaxLine, LineItemTaxLine,
Order, Order,
ShippingMethod, ShippingMethod,
ShippingMethodTaxLine, ShippingMethodTaxLine,
Swap, Swap,
} from "../models" } from "../models"
import { isCart } from "../types/cart" import { isCart } from "../types/cart"
import { isOrder } from "../types/orders" import { isOrder } from "../types/orders"
import { import {
CalculationContextData, CalculationContextData,
LineAllocationsMap, LineAllocationsMap,
LineDiscount, LineDiscount,
LineDiscountAmount, LineDiscountAmount,
SubtotalOptions, SubtotalOptions,
} from "../types/totals" } from "../types/totals"
import { NewTotalsService, TaxProviderService } from "./index" import { NewTotalsService, TaxProviderService } from "./index"
import { FlagRouter } from "@medusajs/utils"
import TaxInclusivePricingFeatureFlag from "../loaders/feature-flags/tax-inclusive-pricing" import TaxInclusivePricingFeatureFlag from "../loaders/feature-flags/tax-inclusive-pricing"
import { calculatePriceTaxAmount } from "../utils" import { calculatePriceTaxAmount } from "../utils"
import { FlagRouter } from "../utils/flag-router"
type ShippingMethodTotals = { type ShippingMethodTotals = {
price: number price: number
+4 -4
View File
@@ -1,3 +1,4 @@
import { FlagRouter } from "@medusajs/utils"
import jwt from "jsonwebtoken" import jwt from "jsonwebtoken"
import { isDefined, MedusaError } from "medusa-core-utils" import { isDefined, MedusaError } from "medusa-core-utils"
import Scrypt from "scrypt-kdf" import Scrypt from "scrypt-kdf"
@@ -8,12 +9,11 @@ import { User } from "../models"
import { UserRepository } from "../repositories/user" import { UserRepository } from "../repositories/user"
import { FindConfig } from "../types/common" import { FindConfig } from "../types/common"
import { import {
CreateUserInput, CreateUserInput,
FilterableUserProps, FilterableUserProps,
UpdateUserInput, UpdateUserInput,
} from "../types/user" } from "../types/user"
import { buildQuery, setMetadata } from "../utils" import { buildQuery, setMetadata } from "../utils"
import { FlagRouter } from "../utils/flag-router"
import { validateEmail } from "../utils/is-email" import { validateEmail } from "../utils/is-email"
import AnalyticsConfigService from "./analytics-config" import AnalyticsConfigService from "./analytics-config"
import EventBusService from "./event-bus" import EventBusService from "./event-bus"
@@ -1,10 +1,10 @@
import OrderExportStrategy from "../../../batch-jobs/order/export" import { FlagRouter } from "@medusajs/utils"
import { IdMap, MockManager } from "medusa-test-utils" import { IdMap, MockManager } from "medusa-test-utils"
import SalesChannelFeatureFlag from "../../../../loaders/feature-flags/sales-channels"
import { User } from "../../../../models" import { User } from "../../../../models"
import { BatchJobStatus } from "../../../../types/batch-job" import { BatchJobStatus } from "../../../../types/batch-job"
import { ordersToExport } from "../../../__fixtures__/order-export-data" import { ordersToExport } from "../../../__fixtures__/order-export-data"
import { FlagRouter } from "../../../../utils/flag-router"; import OrderExportStrategy from "../../../batch-jobs/order/export"
import SalesChannelFeatureFlag from "../../../../loaders/feature-flags/sales-channels";
const orderServiceMock = { const orderServiceMock = {
withTransaction: function (): any { withTransaction: function (): any {
@@ -1,13 +1,13 @@
import ProductExportStrategy from "../../../batch-jobs/product/export" import { FlagRouter } from "@medusajs/utils"
import { Request } from "express"
import { IdMap, MockManager } from "medusa-test-utils" import { IdMap, MockManager } from "medusa-test-utils"
import { AdminPostBatchesReq, defaultAdminProductRelations, } from "../../../../api"
import SalesChannelFeatureFlag from "../../../../loaders/feature-flags/sales-channels"
import { User } from "../../../../models" import { User } from "../../../../models"
import { BatchJobStatus } from "../../../../types/batch-job" import { BatchJobStatus } from "../../../../types/batch-job"
import { productsToExport } from "../../../__fixtures__/product-export-data" import { productsToExport } from "../../../__fixtures__/product-export-data"
import { AdminPostBatchesReq, defaultAdminProductRelations, } from "../../../../api" import ProductExportStrategy from "../../../batch-jobs/product/export"
import { ProductExportBatchJob } from "../../../batch-jobs/product/types" import { ProductExportBatchJob } from "../../../batch-jobs/product/types"
import { Request } from "express"
import { FlagRouter } from "../../../../utils/flag-router"
import SalesChannelFeatureFlag from "../../../../loaders/feature-flags/sales-channels"
const productServiceMock = { const productServiceMock = {
withTransaction: function () { withTransaction: function () {
@@ -4,16 +4,16 @@ import { EntityManager } from "typeorm"
import { FileService } from "medusa-interfaces" import { FileService } from "medusa-interfaces"
import { IdMap, MockManager } from "medusa-test-utils" import { IdMap, MockManager } from "medusa-test-utils"
import { FlagRouter } from "@medusajs/utils"
import { User } from "../../../../models" import { User } from "../../../../models"
import { import {
BatchJobService, BatchJobService,
ProductService, ProductService,
ProductVariantService, ProductVariantService,
RegionService, RegionService,
ShippingProfileService, ShippingProfileService,
} from "../../../../services" } from "../../../../services"
import { BatchJobStatus } from "../../../../types/batch-job" import { BatchJobStatus } from "../../../../types/batch-job"
import { FlagRouter } from "../../../../utils/flag-router"
import ProductImportStrategy from "../../../batch-jobs/product/import" import ProductImportStrategy from "../../../batch-jobs/product/import"
import { ProductImportInjectedProps } from "../../../batch-jobs/product/types" import { ProductImportInjectedProps } from "../../../batch-jobs/product/types"
@@ -1,4 +1,4 @@
import { FlagRouter } from "../../utils/flag-router" import { FlagRouter } from "@medusajs/utils"
import PriceSelectionStrategy from "../price-selection" import PriceSelectionStrategy from "../price-selection"
import { cacheServiceMock } from "../../services/__mocks__/cache" import { cacheServiceMock } from "../../services/__mocks__/cache"
import TaxInclusivePricingFeatureFlag from "../../loaders/feature-flags/tax-inclusive-pricing" import TaxInclusivePricingFeatureFlag from "../../loaders/feature-flags/tax-inclusive-pricing"
@@ -1,6 +1,6 @@
import TaxCalculationStrategy from "../tax-calculation" import TaxCalculationStrategy from "../tax-calculation"
import TaxInclusivePricingFeatureFlag from "../../loaders/feature-flags/tax-inclusive-pricing" import TaxInclusivePricingFeatureFlag from "../../loaders/feature-flags/tax-inclusive-pricing"
import { FlagRouter } from "../../utils/flag-router" import { FlagRouter } from "@medusajs/utils"
const toTest = [ const toTest = [
[ [
@@ -1,9 +1,10 @@
import { FlagRouter } from "@medusajs/utils"
import { EntityManager } from "typeorm" import { EntityManager } from "typeorm"
import { import {
OrderDescriptor, OrderDescriptor,
OrderExportBatchJob, OrderExportBatchJob,
OrderExportBatchJobContext, OrderExportBatchJobContext,
orderExportPropertiesDescriptors, orderExportPropertiesDescriptors,
} from "." } from "."
import { AdminPostBatchesReq } from "../../../api" import { AdminPostBatchesReq } from "../../../api"
import { AbstractBatchJobStrategy, IFileService } from "../../../interfaces" import { AbstractBatchJobStrategy, IFileService } from "../../../interfaces"
@@ -13,7 +14,6 @@ import { OrderService } from "../../../services"
import BatchJobService from "../../../services/batch-job" import BatchJobService from "../../../services/batch-job"
import { BatchJobStatus } from "../../../types/batch-job" import { BatchJobStatus } from "../../../types/batch-job"
import { FindConfig } from "../../../types/common" import { FindConfig } from "../../../types/common"
import { FlagRouter } from "../../../utils/flag-router"
import { prepareListQuery } from "../../../utils/get-query-config" import { prepareListQuery } from "../../../utils/get-query-config"
type InjectedDependencies = { type InjectedDependencies = {
@@ -2,29 +2,29 @@ import { EntityManager } from "typeorm"
import { humanizeAmount } from "medusa-core-utils" import { humanizeAmount } from "medusa-core-utils"
import { FlagRouter } from "@medusajs/utils"
import { defaultAdminProductRelations } from "../../../api"
import { AbstractBatchJobStrategy, IFileService } from "../../../interfaces" import { AbstractBatchJobStrategy, IFileService } from "../../../interfaces"
import ProductCategoryFeatureFlag from "../../../loaders/feature-flags/product-categories"
import SalesChannelFeatureFlag from "../../../loaders/feature-flags/sales-channels"
import { Product, ProductVariant } from "../../../models" import { Product, ProductVariant } from "../../../models"
import { BatchJobService, ProductService } from "../../../services" import { BatchJobService, ProductService } from "../../../services"
import { BatchJobStatus, CreateBatchJobInput } from "../../../types/batch-job" import { BatchJobStatus, CreateBatchJobInput } from "../../../types/batch-job"
import { defaultAdminProductRelations } from "../../../api" import { FindProductConfig } from "../../../types/product"
import { csvCellContentFormatter } from "../../../utils"
import { prepareListQuery } from "../../../utils/get-query-config" import { prepareListQuery } from "../../../utils/get-query-config"
import { import {
DynamicProductExportDescriptor, DynamicProductExportDescriptor,
ProductExportBatchJob, ProductExportBatchJob,
ProductExportBatchJobContext, ProductExportBatchJobContext,
ProductExportInjectedDependencies, ProductExportInjectedDependencies,
ProductExportPriceData, ProductExportPriceData,
} from "./types" } from "./types"
import { FindProductConfig } from "../../../types/product"
import { FlagRouter } from "../../../utils/flag-router"
import SalesChannelFeatureFlag from "../../../loaders/feature-flags/sales-channels"
import { csvCellContentFormatter } from "../../../utils"
import { import {
productCategoriesColumnsDefinition, productCategoriesColumnsDefinition,
productColumnsDefinition, productColumnsDefinition,
productSalesChannelColumnsDefinition, productSalesChannelColumnsDefinition,
} from "./types/columns-definition" } from "./types/columns-definition"
import ProductCategoryFeatureFlag from "../../../loaders/feature-flags/product-categories"
export default class ProductExportStrategy extends AbstractBatchJobStrategy { export default class ProductExportStrategy extends AbstractBatchJobStrategy {
public static identifier = "product-export-strategy" public static identifier = "product-export-strategy"
@@ -2,38 +2,38 @@
import { computerizeAmount, MedusaError } from "medusa-core-utils" import { computerizeAmount, MedusaError } from "medusa-core-utils"
import { EntityManager } from "typeorm" import { EntityManager } from "typeorm"
import { FlagRouter } from "@medusajs/utils"
import { AbstractBatchJobStrategy, IFileService } from "../../../interfaces" import { AbstractBatchJobStrategy, IFileService } from "../../../interfaces"
import ProductCategoryFeatureFlag from "../../../loaders/feature-flags/product-categories"
import SalesChannelFeatureFlag from "../../../loaders/feature-flags/sales-channels" import SalesChannelFeatureFlag from "../../../loaders/feature-flags/sales-channels"
import { BatchJob, SalesChannel } from "../../../models" import { BatchJob, SalesChannel } from "../../../models"
import { import {
BatchJobService, BatchJobService,
ProductCategoryService, ProductCategoryService,
ProductCollectionService, ProductCollectionService,
ProductService, ProductService,
ProductVariantService, ProductVariantService,
RegionService, RegionService,
SalesChannelService, SalesChannelService,
ShippingProfileService, ShippingProfileService,
} from "../../../services" } from "../../../services"
import CsvParser from "../../../services/csv-parser" import CsvParser from "../../../services/csv-parser"
import { CreateProductInput } from "../../../types/product" import { CreateProductInput } from "../../../types/product"
import { CreateProductVariantInput } from "../../../types/product-variant" import { CreateProductVariantInput } from "../../../types/product-variant"
import { FlagRouter } from "../../../utils/flag-router"
import { import {
OperationType, OperationType,
ProductImportBatchJob, ProductImportBatchJob,
ProductImportCsvSchema, ProductImportCsvSchema,
ProductImportInjectedProps, ProductImportInjectedProps,
ProductImportJobContext, ProductImportJobContext,
TParsedProductImportRowData, TParsedProductImportRowData,
} from "./types" } from "./types"
import { import {
productImportColumnsDefinition, productImportColumnsDefinition,
productImportSalesChannelsColumnsDefinition, productImportProductCategoriesColumnsDefinition,
productImportProductCategoriesColumnsDefinition, productImportSalesChannelsColumnsDefinition,
} from "./types/columns-definition" } from "./types/columns-definition"
import { transformProductData, transformVariantData } from "./utils" import { transformProductData, transformVariantData } from "./utils"
import ProductCategoryFeatureFlag from "../../../loaders/feature-flags/product-categories"
/** /**
* Process this many variant rows before reporting progress. * Process this many variant rows before reporting progress.
@@ -1,20 +1,20 @@
import { BatchJob, Product, ProductVariant } from "../../../../models" import { FlagRouter } from "@medusajs/utils"
import { Selector } from "../../../../types/common"
import { CsvSchema, CsvSchemaColumn } from "../../../../interfaces/csv-parser"
import {
BatchJobService,
ProductCategoryService,
ProductCollectionService,
ProductService,
ProductVariantService,
RegionService,
SalesChannelService,
ShippingProfileService,
} from "../../../../services"
import { FileService } from "medusa-interfaces" import { FileService } from "medusa-interfaces"
import { FlagRouter } from "../../../../utils/flag-router"
import { EntityManager } from "typeorm" import { EntityManager } from "typeorm"
import { IFileService } from "../../../../interfaces" import { IFileService } from "../../../../interfaces"
import { CsvSchema, CsvSchemaColumn } from "../../../../interfaces/csv-parser"
import { BatchJob, Product, ProductVariant } from "../../../../models"
import {
BatchJobService,
ProductCategoryService,
ProductCollectionService,
ProductService,
ProductVariantService,
RegionService,
SalesChannelService,
ShippingProfileService,
} from "../../../../services"
import { Selector } from "../../../../types/common"
export type ProductExportInjectedDependencies = { export type ProductExportInjectedDependencies = {
manager: EntityManager manager: EntityManager
@@ -1,17 +1,17 @@
import { import {
AbstractPriceSelectionStrategy, AbstractPriceSelectionStrategy,
PriceSelectionContext, PriceSelectionContext,
PriceSelectionResult, PriceSelectionResult,
PriceType, PriceType,
} from "../interfaces" } from "../interfaces"
import { EntityManager } from "typeorm"
import { FlagRouter } from "../utils/flag-router"
import { ICacheService } from "@medusajs/types" import { ICacheService } from "@medusajs/types"
import { MoneyAmountRepository } from "../repositories/money-amount" import { FlagRouter } from "@medusajs/utils"
import TaxInclusivePricingFeatureFlag from "../loaders/feature-flags/tax-inclusive-pricing"
import { TaxServiceRate } from "../types/tax-service"
import { isDefined } from "medusa-core-utils" import { isDefined } from "medusa-core-utils"
import { EntityManager } from "typeorm"
import TaxInclusivePricingFeatureFlag from "../loaders/feature-flags/tax-inclusive-pricing"
import { MoneyAmountRepository } from "../repositories/money-amount"
import { TaxServiceRate } from "../types/tax-service"
class PriceSelectionStrategy extends AbstractPriceSelectionStrategy { class PriceSelectionStrategy extends AbstractPriceSelectionStrategy {
protected manager_: EntityManager protected manager_: EntityManager
@@ -1,13 +1,13 @@
import { import { FlagRouter } from "@medusajs/utils"
LineItem,
LineItemTaxLine,
ShippingMethod,
ShippingMethodTaxLine,
} from "../models"
import { ITaxCalculationStrategy, TaxCalculationContext } from "../interfaces" import { ITaxCalculationStrategy, TaxCalculationContext } from "../interfaces"
import { calculatePriceTaxAmount } from "../utils"
import { FlagRouter } from "../utils/flag-router"
import TaxInclusivePricingFeatureFlag from "../loaders/feature-flags/tax-inclusive-pricing" import TaxInclusivePricingFeatureFlag from "../loaders/feature-flags/tax-inclusive-pricing"
import {
LineItem,
LineItemTaxLine,
ShippingMethod,
ShippingMethodTaxLine,
} from "../models"
import { calculatePriceTaxAmount } from "../utils"
class TaxCalculationStrategy implements ITaxCalculationStrategy { class TaxCalculationStrategy implements ITaxCalculationStrategy {
protected readonly featureFlagRouter_: FlagRouter protected readonly featureFlagRouter_: FlagRouter
@@ -1,11 +1,10 @@
import { IEventBusService, ISearchService } from "@medusajs/types" import { IEventBusService, ISearchService } from "@medusajs/types"
import { defaultSearchIndexingProductRelations } from "@medusajs/utils" import { FlagRouter, defaultSearchIndexingProductRelations } from "@medusajs/utils"
import { indexTypes } from "medusa-core-utils" import { indexTypes } from "medusa-core-utils"
import ProductCategoryFeatureFlag from "../loaders/feature-flags/product-categories" import ProductCategoryFeatureFlag from "../loaders/feature-flags/product-categories"
import { SEARCH_INDEX_EVENT } from "../loaders/search-index" import { SEARCH_INDEX_EVENT } from "../loaders/search-index"
import { Product } from "../models" import { Product } from "../models"
import ProductService from "../services/product" import ProductService from "../services/product"
import { FlagRouter } from "../utils/flag-router"
type InjectedDependencies = { type InjectedDependencies = {
eventBusService: IEventBusService eventBusService: IEventBusService
@@ -1,5 +1,5 @@
import { FlagRouter } from "@medusajs/utils"
import { calculatePriceTaxAmount } from "../calculate-price-tax-amount" import { calculatePriceTaxAmount } from "../calculate-price-tax-amount"
import { FlagRouter } from "../../utils/flag-router"
describe("calculatePriceTaxAmount", () => { describe("calculatePriceTaxAmount", () => {
describe("Calculate taxes from a given price", () => { describe("Calculate taxes from a given price", () => {
@@ -1,30 +0,0 @@
import { FlagRouter } from "../flag-router"
describe("Flag Router", () => {
describe("listFlags", () => {
it("should list all feature flags", () => {
const flagRouter = new FlagRouter({})
flagRouter.setFlag("test", false)
flagRouter.setFlag("test2", true)
flagRouter.setFlag("test3", false)
const listOfFlags = flagRouter.listFlags()
expect(listOfFlags).toEqual([
{
key: "test",
value: false,
},
{
key: "test2",
value: true,
},
{
key: "test3",
value: false,
},
])
})
})
})
-75
View File
@@ -1,75 +0,0 @@
import { FeatureFlagTypes } from "@medusajs/types"
import { isObject, isString } from "@medusajs/utils"
export class FlagRouter implements FeatureFlagTypes.IFlagRouter {
private readonly flags: Record<string, boolean | Record<string, boolean>> = {}
constructor(flags: Record<string, boolean | Record<string, boolean>>) {
this.flags = flags
}
/**
* Check if a feature flag is enabled.
* There are two ways of using this method:
* 1. `isFeatureEnabled("myFeatureFlag")`
* 2. `isFeatureEnabled({ myNestedFeatureFlag: "someNestedFlag" })`
* We use 1. for top-level feature flags and 2. for nested feature flags. Almost all flags are top-level.
* An example of a nested flag is workflows. To use it, you would do:
* `isFeatureEnabled({ workflows: Workflows.CreateCart })`
* @param flag - The flag to check
* @return {boolean} - Whether the flag is enabled or not
*/
public isFeatureEnabled(flag: string | Record<string, string>): boolean {
if (isString(flag)) {
return !!this.flags[flag]
}
if (isObject(flag)) {
const [nestedFlag, value] = Object.entries(flag)[0]
if (typeof this.flags[nestedFlag] === "boolean") {
return this.flags[nestedFlag] as boolean
}
return !!this.flags[nestedFlag]?.[value]
}
throw Error("Flag must be a string or an object")
}
/**
* Sets a feature flag.
* Flags take two shapes:
* setFlag("myFeatureFlag", true)
* setFlag("myFeatureFlag", { nestedFlag: true })
* These shapes are used for top-level and nested flags respectively, as explained in isFeatureEnabled.
* @param key - The key of the flag to set.
* @param value - The value of the flag to set.
* @return {void} - void
*/
public setFlag(
key: string,
value: boolean | { [key: string]: boolean }
): void {
if (isObject(value)) {
const existing = this.flags[key]
if (!existing) {
this.flags[key] = value
return
}
this.flags[key] = { ...(this.flags[key] as object), ...value }
return
}
this.flags[key] = value
}
public listFlags(): FeatureFlagTypes.FeatureFlagsResponse {
return Object.entries(this.flags || {}).map(([key, value]) => ({
key,
value,
}))
}
}