From 4e9d257d3bf76703ef5be8ca054cc9f0f7339def Mon Sep 17 00:00:00 2001 From: "Carlos R. L. Rodrigues" <37986729+carlos-r-l-rodrigues@users.noreply.github.com> Date: Thu, 23 Mar 2023 08:07:32 -0300 Subject: [PATCH] Chore(medusa,utils,types,inventory,stock-location): remove core dependency modules (#3531) --- .changeset/ten-actors-complain.md | 14 + .eslintignore | 5 +- .eslintrc.js | 4 + .github/workflows/test-cli-with-database.yml | 4 +- .../scripts/cli/wait-for-server-live.sh | 6 +- packages/admin-ui/package.json | 1 + .../components/address-form/index.tsx | 3 +- .../components/edit-sales-channels/index.tsx | 4 +- .../components/location-card/index.tsx | 4 +- .../sales-channels-section/index.tsx | 2 +- .../domain/inventory/locations/new/index.tsx | 31 +- packages/cache-inmemory/jest.config.js | 2 +- packages/cache-inmemory/package.json | 6 +- .../src/services/inmemory-cache.ts | 3 +- packages/cache-inmemory/tsconfig.spec.json | 5 + packages/cache-redis/jest.config.js | 2 +- packages/cache-redis/package.json | 8 +- packages/cache-redis/src/loaders/index.ts | 5 +- .../cache-redis/src/services/redis-cache.ts | 3 +- packages/cache-redis/tsconfig.spec.json | 5 + packages/event-bus-local/src/loaders/index.ts | 1 - .../src/services/event-bus-local.ts | 5 +- packages/event-bus-redis/package.json | 1 + .../src/services/event-bus-redis.ts | 3 + packages/generated/client-types/tsconfig.json | 15 +- packages/inventory/jest.config.js | 2 +- packages/inventory/package.json | 6 +- packages/inventory/src/index.ts | 1 - packages/inventory/src/initialize/index.ts | 7 +- packages/inventory/src/loaders/connection.ts | 2 +- packages/inventory/src/loaders/container.ts | 2 +- .../inventory/src/models/inventory-item.ts | 4 +- .../inventory/src/models/inventory-level.ts | 4 +- .../inventory/src/models/reservation-item.ts | 4 +- .../inventory/src/services/inventory-item.ts | 21 +- .../inventory/src/services/inventory-level.ts | 21 +- packages/inventory/src/services/inventory.ts | 27 +- .../src/services/reservation-item.ts | 22 +- packages/inventory/src/utils/query.ts | 7 +- packages/inventory/tsconfig.spec.json | 5 + packages/medusa-cli/package.json | 5 +- packages/medusa-cli/src/create-cli.js | 61 ++-- packages/medusa-plugin-algolia/package.json | 5 +- .../medusa-plugin-meilisearch/package.json | 7 +- packages/medusa/package.json | 21 +- .../inventory-items/create-inventory-item.ts | 12 +- .../inventory-items/create-location-level.ts | 8 +- .../inventory-items/delete-inventory-item.ts | 2 +- .../inventory-items/delete-location-level.ts | 2 +- .../inventory-items/get-inventory-item.ts | 2 +- .../api/routes/admin/inventory-items/index.ts | 45 ++- .../inventory-items/list-inventory-items.ts | 13 +- .../inventory-items/list-location-levels.ts | 3 +- .../transaction/create-inventory-item.ts | 19 +- .../inventory-items/update-inventory-item.ts | 7 +- .../inventory-items/update-location-level.ts | 7 +- .../inventory-items/utils/join-levels.ts | 4 +- .../inventory-items/utils/join-variants.ts | 4 +- .../routes/admin/orders/cancel-fulfillment.ts | 4 +- .../routes/admin/orders/get-reservations.ts | 2 +- .../api/routes/admin/orders/request-return.ts | 9 +- .../routes/admin/products/create-product.ts | 9 +- .../routes/admin/products/create-variant.ts | 11 +- .../transaction/create-product-variant.ts | 5 +- .../routes/admin/products/update-product.ts | 17 +- .../admin/reservations/create-reservation.ts | 4 +- .../admin/reservations/delete-reservation.ts | 2 +- .../admin/reservations/get-reservation.ts | 4 +- .../api/routes/admin/reservations/index.ts | 9 +- .../admin/reservations/list-reservations.ts | 2 +- .../admin/reservations/update-reservation.ts | 4 +- .../utils/validate-reservation-quantity.ts | 4 +- .../stock-locations/create-stock-location.ts | 5 +- .../stock-locations/delete-stock-location.ts | 5 +- .../stock-locations/get-stock-location.ts | 6 +- .../api/routes/admin/stock-locations/index.ts | 44 +-- .../stock-locations/list-stock-locations.ts | 7 +- .../stock-locations/update-stock-location.ts | 5 +- .../utils/join-sales-channels.ts | 5 +- .../src/api/routes/admin/store/get-store.ts | 4 +- .../routes/admin/variants/get-inventory.ts | 9 +- packages/medusa/src/commands/develop.js | 20 +- packages/medusa/src/commands/start.js | 67 ++-- packages/medusa/src/index.js | 2 - packages/medusa/src/interfaces/index.ts | 1 - .../medusa/src/interfaces/services/index.ts | 3 - packages/medusa/src/loaders/plugins.ts | 6 +- .../src/scripts/migrate-inventory-items.ts | 14 +- packages/medusa/src/services/order.ts | 77 ++-- .../src/services/product-variant-inventory.ts | 23 +- .../src/services/sales-channel-inventory.ts | 8 +- .../src/services/sales-channel-location.ts | 15 +- packages/medusa/src/services/tax-provider.ts | 11 +- .../medusa/src/strategies/price-selection.ts | 12 +- packages/medusa/src/subscribers/pricing.ts | 2 +- packages/medusa/src/types/common.ts | 8 +- packages/medusa/src/types/store.ts | 4 +- packages/medusa/src/utils/build-query.ts | 2 +- packages/modules-sdk/package.json | 3 +- packages/modules-sdk/src/definitions.ts | 6 +- packages/modules-sdk/src/index.ts | 2 +- .../src/loaders/__tests__/module-loader.ts | 9 +- .../src/loaders/__tests__/register-modules.ts | 4 +- .../modules-sdk/src/loaders/module-loader.ts | 10 +- .../src/loaders/register-modules.ts | 7 +- .../src/loaders/utils/load-internal.ts | 8 +- packages/modules-sdk/src/medusa-module.ts | 10 +- packages/modules-sdk/src/module-helper.ts | 2 +- .../src/__tests__/command-oas.test.ts | 18 +- .../oas/medusa-oas-cli/src/command-oas.ts | 18 +- packages/stock-location/jest.config.js | 2 +- packages/stock-location/package.json | 9 +- .../stock-location/src/initialize/index.ts | 7 +- .../stock-location/src/loaders/connection.ts | 4 +- .../src/models/stock-location-address.ts | 2 +- .../src/models/stock-location.ts | 5 +- .../src/services/stock-location.ts | 25 +- packages/stock-location/tsconfig.spec.json | 5 + packages/types/package.json | 7 +- packages/types/src/bundles.ts | 5 +- packages/types/src/cache/index.ts | 1 + .../cache.ts => types/src/cache/service.ts} | 2 - packages/types/src/common/common.ts | 186 ++++++++++ packages/types/src/common/config-module.ts | 8 +- packages/types/src/common/index.ts | 4 +- packages/types/src/common/medusa-container.ts | 6 + packages/types/src/event-bus/event-bus.ts | 4 +- packages/types/src/event-bus/index.ts | 1 - packages/types/src/index.ts | 5 +- .../src/inventory/common.ts} | 5 +- packages/types/src/inventory/index.ts | 2 + .../src/inventory}/inventory.ts | 14 +- .../types => types/src/modules-sdk}/index.ts | 5 +- packages/types/src/search/index-types.ts | 4 +- packages/types/src/search/index.ts | 1 - .../src/stock-location/common.ts} | 5 +- packages/types/src/stock-location/index.ts | 2 + .../src/stock-location}/stock-location.ts | 4 +- packages/utils/package.json | 12 +- packages/utils/src/common/build-query.ts | 345 ++++++++++++++++++ packages/utils/src/common/db-aware-column.ts | 66 ++++ packages/utils/src/common/errors.ts | 55 +++ .../utils/src/common/generate-entity-id.ts | 16 + packages/utils/src/common/get-config-file.ts | 32 ++ packages/utils/src/common/index.ts | 15 + packages/utils/src/common/is-date.ts | 4 + packages/utils/src/common/is-defined.ts | 5 + packages/utils/src/common/is-email.ts | 20 + packages/utils/src/common/is-object.ts | 3 + packages/utils/src/common/is-string.ts | 3 + packages/utils/src/common/medusa-container.ts | 57 +++ .../utils/src/common/models/base-entity.ts | 16 + packages/utils/src/common/models/index.ts | 2 + .../common/models/soft-deletable-entity.ts | 8 + packages/utils/src/common/set-metadata.ts | 45 +++ .../src/common/transaction-base-service.ts | 152 ++++++++ packages/utils/src/common/wrap-handler.ts | 36 ++ packages/utils/src/index.ts | 2 +- yarn.lock | 186 ++++------ 159 files changed, 1769 insertions(+), 693 deletions(-) create mode 100644 .changeset/ten-actors-complain.md create mode 100644 packages/cache-inmemory/tsconfig.spec.json create mode 100644 packages/cache-redis/tsconfig.spec.json create mode 100644 packages/inventory/tsconfig.spec.json delete mode 100644 packages/medusa/src/interfaces/services/index.ts create mode 100644 packages/stock-location/tsconfig.spec.json create mode 100644 packages/types/src/cache/index.ts rename packages/{medusa/src/interfaces/services/cache.ts => types/src/cache/service.ts} (98%) create mode 100644 packages/types/src/common/common.ts create mode 100644 packages/types/src/common/medusa-container.ts rename packages/{medusa/src/types/inventory.ts => types/src/inventory/common.ts} (98%) create mode 100644 packages/types/src/inventory/index.ts rename packages/{medusa/src/interfaces/services => types/src/inventory}/inventory.ts (97%) rename packages/{modules-sdk/src/types => types/src/modules-sdk}/index.ts (94%) rename packages/{medusa/src/types/stock-location.ts => types/src/stock-location/common.ts} (98%) create mode 100644 packages/types/src/stock-location/index.ts rename packages/{medusa/src/interfaces/services => types/src/stock-location}/stock-location.ts (89%) create mode 100644 packages/utils/src/common/build-query.ts create mode 100644 packages/utils/src/common/db-aware-column.ts create mode 100644 packages/utils/src/common/errors.ts create mode 100644 packages/utils/src/common/generate-entity-id.ts create mode 100644 packages/utils/src/common/get-config-file.ts create mode 100644 packages/utils/src/common/index.ts create mode 100644 packages/utils/src/common/is-date.ts create mode 100644 packages/utils/src/common/is-defined.ts create mode 100644 packages/utils/src/common/is-email.ts create mode 100644 packages/utils/src/common/is-object.ts create mode 100644 packages/utils/src/common/is-string.ts create mode 100644 packages/utils/src/common/medusa-container.ts create mode 100644 packages/utils/src/common/models/base-entity.ts create mode 100644 packages/utils/src/common/models/index.ts create mode 100644 packages/utils/src/common/models/soft-deletable-entity.ts create mode 100644 packages/utils/src/common/set-metadata.ts create mode 100644 packages/utils/src/common/transaction-base-service.ts create mode 100644 packages/utils/src/common/wrap-handler.ts diff --git a/.changeset/ten-actors-complain.md b/.changeset/ten-actors-complain.md new file mode 100644 index 0000000000..9a35a86c7a --- /dev/null +++ b/.changeset/ten-actors-complain.md @@ -0,0 +1,14 @@ +--- +"@medusajs/cache-inmemory": patch +"@medusajs/stock-location": patch +"@medusajs/cache-redis": patch +"@medusajs/modules-sdk": patch +"@medusajs/inventory": patch +"@medusajs/medusa": patch +"@medusajs/types": patch +"@medusajs/utils": patch +"@medusajs/admin-ui": patch +"@medusajs/medusa-plugin-meilisearch": patch +--- + +Remove dependency on @medusajs/medusa from Inventory and Stock-Location Modules diff --git a/.eslintignore b/.eslintignore index c0ec905756..138f43bfd4 100644 --- a/.eslintignore +++ b/.eslintignore @@ -14,7 +14,10 @@ packages/* !packages/event-bus-local !packages/medusa-plugin-meilisearch !packages/medusa-plugin-algolia - +!packages/inventory +!packages/stock-location +!packages/cache-redis +!packages/cache-inmemory **/models/* diff --git a/.eslintrc.js b/.eslintrc.js index f06a1438e1..df53d8c537 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -88,6 +88,10 @@ module.exports = { "./packages/medusa-plugin-meilisearch/tsconfig.spec.json", "./packages/medusa-plugin-algolia/tsconfig.spec.json", "./packages/admin-ui/tsconfig.json", + "./packages/inventory/tsconfig.spec.json", + "./packages/stock-location/tsconfig.spec.json", + "./packages/cache-redis/tsconfig.spec.json", + "./packages/cache-inmemory/tsconfig.spec.json", ], }, rules: { diff --git a/.github/workflows/test-cli-with-database.yml b/.github/workflows/test-cli-with-database.yml index 4dad8b75b6..5593dea2ec 100644 --- a/.github/workflows/test-cli-with-database.yml +++ b/.github/workflows/test-cli-with-database.yml @@ -90,7 +90,7 @@ jobs: ########################## Test medusa develop ############################### - name: Run development server - run: medusa develop > /dev/null 2>&1 & + run: medusa develop & working-directory: ../cli-test - name: Testing development server @@ -99,7 +99,7 @@ jobs: ########################### Test medusa start ################################ - name: Starting medusa - run: medusa start > /dev/null 2>&1 & + run: medusa start & working-directory: ../cli-test - name: Testing server diff --git a/integration-tests/scripts/cli/wait-for-server-live.sh b/integration-tests/scripts/cli/wait-for-server-live.sh index 639de3d9d7..443487867e 100755 --- a/integration-tests/scripts/cli/wait-for-server-live.sh +++ b/integration-tests/scripts/cli/wait-for-server-live.sh @@ -21,9 +21,9 @@ done echo $status_code -if [[ "$status_code" = 000 ]] ; then - echo "Site status changed to $status_code" +if [[ "$status_code" = 000 ]] ; then + echo "Site status changed to $status_code" exit 1 -else +else exit 0 fi diff --git a/packages/admin-ui/package.json b/packages/admin-ui/package.json index d972fd0c60..150ee9f4a0 100644 --- a/packages/admin-ui/package.json +++ b/packages/admin-ui/package.json @@ -79,6 +79,7 @@ }, "devDependencies": { "@medusajs/medusa": "*", + "@medusajs/types": "^0.0.1", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^14.4.3", diff --git a/packages/admin-ui/ui/src/domain/inventory/locations/components/address-form/index.tsx b/packages/admin-ui/ui/src/domain/inventory/locations/components/address-form/index.tsx index bfa2336456..258989c439 100644 --- a/packages/admin-ui/ui/src/domain/inventory/locations/components/address-form/index.tsx +++ b/packages/admin-ui/ui/src/domain/inventory/locations/components/address-form/index.tsx @@ -1,4 +1,5 @@ -import { Country, StockLocationAddressDTO } from "@medusajs/medusa" +import { Country } from "@medusajs/medusa" +import { StockLocationAddressDTO } from "@medusajs/types" import { useAdminRegions } from "medusa-react" import { useEffect, useMemo, useState } from "react" import { Controller, useWatch } from "react-hook-form" diff --git a/packages/admin-ui/ui/src/domain/inventory/locations/components/edit-sales-channels/index.tsx b/packages/admin-ui/ui/src/domain/inventory/locations/components/edit-sales-channels/index.tsx index cddd6f4a38..c98e38feb7 100644 --- a/packages/admin-ui/ui/src/domain/inventory/locations/components/edit-sales-channels/index.tsx +++ b/packages/admin-ui/ui/src/domain/inventory/locations/components/edit-sales-channels/index.tsx @@ -1,9 +1,9 @@ -import { SalesChannel, StockLocationExpandedDTO } from "@medusajs/medusa" +import { SalesChannel } from "@medusajs/medusa" +import { StockLocationExpandedDTO } from "@medusajs/types" import { useAdminAddLocationToSalesChannel, useAdminRemoveLocationFromSalesChannel } from "medusa-react" - import SalesChannelsModal from "../../../../../components/forms/product/sales-channels-modal" import Button from "../../../../../components/fundamentals/button" import useToggleState from "../../../../../hooks/use-toggle-state" diff --git a/packages/admin-ui/ui/src/domain/inventory/locations/components/location-card/index.tsx b/packages/admin-ui/ui/src/domain/inventory/locations/components/location-card/index.tsx index 609d3680e1..38e6ab880d 100644 --- a/packages/admin-ui/ui/src/domain/inventory/locations/components/location-card/index.tsx +++ b/packages/admin-ui/ui/src/domain/inventory/locations/components/location-card/index.tsx @@ -1,4 +1,4 @@ -import { StockLocationDTO } from "@medusajs/medusa" +import { StockLocationDTO } from "@medusajs/types" import { useAdminDeleteStockLocation } from "medusa-react" import React from "react" import IconBadge from "../../../../../components/fundamentals/icon-badge" @@ -6,7 +6,7 @@ import BuildingsIcon from "../../../../../components/fundamentals/icons/building import EditIcon from "../../../../../components/fundamentals/icons/edit-icon" import TrashIcon from "../../../../../components/fundamentals/icons/trash-icon" import Actionables, { - ActionType, + ActionType } from "../../../../../components/molecules/actionables" import useImperativeDialog from "../../../../../hooks/use-imperative-dialog" import useNotification from "../../../../../hooks/use-notification" diff --git a/packages/admin-ui/ui/src/domain/inventory/locations/components/sales-channels-section/index.tsx b/packages/admin-ui/ui/src/domain/inventory/locations/components/sales-channels-section/index.tsx index 1051f69e12..ae3d2fdae2 100644 --- a/packages/admin-ui/ui/src/domain/inventory/locations/components/sales-channels-section/index.tsx +++ b/packages/admin-ui/ui/src/domain/inventory/locations/components/sales-channels-section/index.tsx @@ -1,4 +1,4 @@ -import { StockLocationExpandedDTO } from "@medusajs/medusa" +import { StockLocationExpandedDTO } from "@medusajs/types" import SalesChannelsList from "../../../../../components/molecules/sales-channels-list" import EditSalesChannels from "../edit-sales-channels" diff --git a/packages/admin-ui/ui/src/domain/inventory/locations/new/index.tsx b/packages/admin-ui/ui/src/domain/inventory/locations/new/index.tsx index 50a7a481ab..2c89f9ae7a 100644 --- a/packages/admin-ui/ui/src/domain/inventory/locations/new/index.tsx +++ b/packages/admin-ui/ui/src/domain/inventory/locations/new/index.tsx @@ -1,28 +1,27 @@ -import { - AdminPostStockLocationsReq, - SalesChannel, - StockLocationAddressDTO, - StockLocationAddressInput, -} from "@medusajs/medusa" -import GeneralForm, { GeneralFormType } from "../components/general-form" +import { AdminPostStockLocationsReq, SalesChannel } from "@medusajs/medusa" import { useAdminAddLocationToSalesChannel, - useAdminCreateStockLocation, + useAdminCreateStockLocation } from "medusa-react" +import GeneralForm, { GeneralFormType } from "../components/general-form" -import Accordion from "../../../../components/organisms/accordion" -import AddressForm from "../components/address-form" +import { + StockLocationAddressDTO, + StockLocationAddressInput +} from "@medusajs/types" +import { useForm } from "react-hook-form" import Button from "../../../../components/fundamentals/button" import CrossIcon from "../../../../components/fundamentals/icons/cross-icon" -import DeletePrompt from "../../../../components/organisms/delete-prompt" import FocusModal from "../../../../components/molecules/modal/focus-modal" -import SalesChannelsForm from "../components/sales-channels-form" -import { getErrorMessage } from "../../../../utils/error-messages" -import { nestedForm } from "../../../../utils/nested-form" -import { useFeatureFlag } from "../../../../providers/feature-flag-provider" -import { useForm } from "react-hook-form" +import Accordion from "../../../../components/organisms/accordion" +import DeletePrompt from "../../../../components/organisms/delete-prompt" import useNotification from "../../../../hooks/use-notification" import useToggleState from "../../../../hooks/use-toggle-state" +import { useFeatureFlag } from "../../../../providers/feature-flag-provider" +import { getErrorMessage } from "../../../../utils/error-messages" +import { nestedForm } from "../../../../utils/nested-form" +import AddressForm from "../components/address-form" +import SalesChannelsForm from "../components/sales-channels-form" type NewLocationForm = { general: GeneralFormType diff --git a/packages/cache-inmemory/jest.config.js b/packages/cache-inmemory/jest.config.js index 7de5bf104a..1b626a0af1 100644 --- a/packages/cache-inmemory/jest.config.js +++ b/packages/cache-inmemory/jest.config.js @@ -1,7 +1,7 @@ module.exports = { globals: { "ts-jest": { - tsConfig: "tsconfig.json", + tsConfig: "tsconfig.spec.json", isolatedModules: false, }, }, diff --git a/packages/cache-inmemory/package.json b/packages/cache-inmemory/package.json index 78fd914900..749a1945bd 100644 --- a/packages/cache-inmemory/package.json +++ b/packages/cache-inmemory/package.json @@ -17,7 +17,7 @@ "author": "Medusa", "license": "MIT", "devDependencies": { - "@medusajs/medusa": "*", + "@medusajs/types": "^0.0.1", "cross-env": "^5.2.1", "jest": "^25.5.4", "ts-jest": "^25.5.1", @@ -30,7 +30,7 @@ "test": "jest --passWithNoTests", "test:unit": "jest --passWithNoTests" }, - "peerDependencies": { - "@medusajs/medusa": "^1.7.11" + "dependencies": { + "@medusajs/modules-sdk": "^0.0.1" } } diff --git a/packages/cache-inmemory/src/services/inmemory-cache.ts b/packages/cache-inmemory/src/services/inmemory-cache.ts index 9a55ecf39f..37020a96e9 100644 --- a/packages/cache-inmemory/src/services/inmemory-cache.ts +++ b/packages/cache-inmemory/src/services/inmemory-cache.ts @@ -1,5 +1,4 @@ -import { ICacheService } from "@medusajs/medusa" - +import { ICacheService } from "@medusajs/types" import { CacheRecord, InMemoryCacheModuleOptions } from "../types" const DEFAULT_TTL = 30 // seconds diff --git a/packages/cache-inmemory/tsconfig.spec.json b/packages/cache-inmemory/tsconfig.spec.json new file mode 100644 index 0000000000..9b62409191 --- /dev/null +++ b/packages/cache-inmemory/tsconfig.spec.json @@ -0,0 +1,5 @@ +{ + "extends": "./tsconfig.json", + "include": ["src"], + "exclude": ["node_modules"] +} diff --git a/packages/cache-redis/jest.config.js b/packages/cache-redis/jest.config.js index 7de5bf104a..1b626a0af1 100644 --- a/packages/cache-redis/jest.config.js +++ b/packages/cache-redis/jest.config.js @@ -1,7 +1,7 @@ module.exports = { globals: { "ts-jest": { - tsConfig: "tsconfig.json", + tsConfig: "tsconfig.spec.json", isolatedModules: false, }, }, diff --git a/packages/cache-redis/package.json b/packages/cache-redis/package.json index c9ec86d798..fac9b4c14c 100644 --- a/packages/cache-redis/package.json +++ b/packages/cache-redis/package.json @@ -17,7 +17,7 @@ "author": "Medusa", "license": "MIT", "devDependencies": { - "@medusajs/medusa": "*", + "@medusajs/types": "^0.0.1", "cross-env": "^5.2.1", "jest": "^25.5.4", "ts-jest": "^25.5.1", @@ -30,7 +30,9 @@ "test": "jest --passWithNoTests", "test:unit": "jest --passWithNoTests" }, - "peerDependencies": { - "@medusajs/medusa": "^1.7.11" + "dependencies": { + "@medusajs/modules-sdk": "^0.0.1", + "awilix": "^8.0.0", + "ioredis": "^5.3.1" } } diff --git a/packages/cache-redis/src/loaders/index.ts b/packages/cache-redis/src/loaders/index.ts index 865c427ab6..dab33714ab 100644 --- a/packages/cache-redis/src/loaders/index.ts +++ b/packages/cache-redis/src/loaders/index.ts @@ -1,7 +1,6 @@ -import Redis from "ioredis" -import { asValue } from "awilix" import { LoaderOptions } from "@medusajs/modules-sdk" - +import { asValue } from "awilix" +import Redis from "ioredis" import { RedisCacheModuleOptions } from "../types" export default async ({ diff --git a/packages/cache-redis/src/services/redis-cache.ts b/packages/cache-redis/src/services/redis-cache.ts index 665cc0b230..442bcc9a08 100644 --- a/packages/cache-redis/src/services/redis-cache.ts +++ b/packages/cache-redis/src/services/redis-cache.ts @@ -1,6 +1,5 @@ +import { ICacheService } from "@medusajs/types" import { Redis } from "ioredis" -import { ICacheService } from "@medusajs/medusa" - import { RedisCacheModuleOptions } from "../types" const DEFAULT_NAMESPACE = "medusa" diff --git a/packages/cache-redis/tsconfig.spec.json b/packages/cache-redis/tsconfig.spec.json new file mode 100644 index 0000000000..9b62409191 --- /dev/null +++ b/packages/cache-redis/tsconfig.spec.json @@ -0,0 +1,5 @@ +{ + "extends": "./tsconfig.json", + "include": ["src"], + "exclude": ["node_modules"] +} diff --git a/packages/event-bus-local/src/loaders/index.ts b/packages/event-bus-local/src/loaders/index.ts index 82751cc97b..ce7bbb9e7a 100644 --- a/packages/event-bus-local/src/loaders/index.ts +++ b/packages/event-bus-local/src/loaders/index.ts @@ -1,6 +1,5 @@ import { LoaderOptions } from "@medusajs/modules-sdk" - export default async ({ logger }: LoaderOptions): Promise => { logger?.warn( "Local Event Bus installed. This is not recommended for production." diff --git a/packages/event-bus-local/src/services/event-bus-local.ts b/packages/event-bus-local/src/services/event-bus-local.ts index e4a66b055a..53d3f5c7c2 100644 --- a/packages/event-bus-local/src/services/event-bus-local.ts +++ b/packages/event-bus-local/src/services/event-bus-local.ts @@ -9,12 +9,14 @@ type InjectedDependencies = { const eventEmitter = new EventEmitter() +// eslint-disable-next-line max-len export default class LocalEventBusService extends AbstractEventBusModuleService { protected readonly logger_: Logger protected readonly eventEmitter_: EventEmitter constructor({ logger }: MedusaContainer & InjectedDependencies) { // @ts-ignore + // eslint-disable-next-line prefer-rest-params super(...arguments) this.logger_ = logger @@ -52,12 +54,11 @@ export default class LocalEventBusService extends AbstractEventBusModuleService this.logger_.info( `Processing ${event.eventName} which has ${eventListenersCount} subscribers` ) - + if (eventListenersCount === 0) { continue } - try { this.eventEmitter_.emit(event.eventName, event.data) } catch (error) { diff --git a/packages/event-bus-redis/package.json b/packages/event-bus-redis/package.json index c870db9208..d8c0a0c258 100644 --- a/packages/event-bus-redis/package.json +++ b/packages/event-bus-redis/package.json @@ -34,6 +34,7 @@ "dependencies": { "@medusajs/modules-sdk": "*", "@medusajs/utils": "^0.0.1", + "awilix": "^8.0.0", "bullmq": "^3.5.6", "ioredis": "^5.2.5" } diff --git a/packages/event-bus-redis/src/services/event-bus-redis.ts b/packages/event-bus-redis/src/services/event-bus-redis.ts index 340b4e5705..4212a8e206 100644 --- a/packages/event-bus-redis/src/services/event-bus-redis.ts +++ b/packages/event-bus-redis/src/services/event-bus-redis.ts @@ -15,10 +15,12 @@ type InjectedDependencies = { * Can keep track of multiple subscribers to different events and run the * subscribers when events happen. Events will run asynchronously. */ +// eslint-disable-next-line max-len export default class RedisEventBusService extends AbstractEventBusModuleService { protected readonly config_: ConfigModule protected readonly logger_: Logger protected readonly moduleOptions_: EventBusRedisModuleOptions + // eslint-disable-next-line max-len protected readonly moduleDeclaration_: InternalModuleDeclaration protected queue_: Queue @@ -29,6 +31,7 @@ export default class RedisEventBusService extends AbstractEventBusModuleService moduleDeclaration: InternalModuleDeclaration ) { // @ts-ignore + // eslint-disable-next-line prefer-rest-params super(...arguments) this.moduleOptions_ = moduleOptions diff --git a/packages/generated/client-types/tsconfig.json b/packages/generated/client-types/tsconfig.json index 0aeb77eff6..c80a9a4470 100644 --- a/packages/generated/client-types/tsconfig.json +++ b/packages/generated/client-types/tsconfig.json @@ -1,9 +1,7 @@ { "compilerOptions": { - "lib": [ - "es2019" - ], - "target": "es5", + "lib": ["es2020"], + "target": "ES2020", "outDir": "./dist", "esModuleInterop": true, "declaration": true, @@ -21,13 +19,8 @@ "jsx": "react-jsx", "emitDeclarationOnly": true }, - "include": [ - "src" - ], - "exclude": [ - "node_modules", - "**/tests/*" - ], + "include": ["src"], + "exclude": ["node_modules", "**/tests/*"], "ts-node": { "transpileOnly": true } diff --git a/packages/inventory/jest.config.js b/packages/inventory/jest.config.js index 7de5bf104a..1b626a0af1 100644 --- a/packages/inventory/jest.config.js +++ b/packages/inventory/jest.config.js @@ -1,7 +1,7 @@ module.exports = { globals: { "ts-jest": { - tsConfig: "tsconfig.json", + tsConfig: "tsconfig.spec.json", isolatedModules: false, }, }, diff --git a/packages/inventory/package.json b/packages/inventory/package.json index 06c06aed7a..54b9171461 100644 --- a/packages/inventory/package.json +++ b/packages/inventory/package.json @@ -17,14 +17,13 @@ "author": "Medusa", "license": "MIT", "devDependencies": { - "@medusajs/types": "*", + "@medusajs/types": "^0.0.1", "cross-env": "^5.2.1", "jest": "^25.5.4", "ts-jest": "^25.5.1", "typescript": "^4.4.4" }, "dependencies": { - "@medusajs/medusa": "^1.7.7", "@medusajs/modules-sdk": "*", "@medusajs/utils": "^0.0.1", "awilix": "^8.0.0", @@ -36,8 +35,5 @@ "build": "tsc --build", "test": "jest --passWithNoTests", "test:unit": "jest --passWithNoTests" - }, - "peerDependencies": { - "@medusajs/types": "^0.0.1" } } diff --git a/packages/inventory/src/index.ts b/packages/inventory/src/index.ts index b2088f7b11..4102dee4d8 100644 --- a/packages/inventory/src/index.ts +++ b/packages/inventory/src/index.ts @@ -25,4 +25,3 @@ export default moduleDefinition export * from "./initialize" export * from "./types" - diff --git a/packages/inventory/src/initialize/index.ts b/packages/inventory/src/initialize/index.ts index 6c2140bbcc..a87e1a56ae 100644 --- a/packages/inventory/src/initialize/index.ts +++ b/packages/inventory/src/initialize/index.ts @@ -1,16 +1,15 @@ -import { IInventoryService } from "@medusajs/medusa" import { ExternalModuleDeclaration, InternalModuleDeclaration, - MedusaModule + MedusaModule, } from "@medusajs/modules-sdk" -import { EventBusTypes } from "@medusajs/types" +import { IEventBusService, IInventoryService } from "@medusajs/types" import { InventoryServiceInitializeOptions } from "../types" export const initialize = async ( options?: InventoryServiceInitializeOptions | ExternalModuleDeclaration, injectedDependencies?: { - eventBusService: EventBusTypes.IEventBusService + eventBusService: IEventBusService } ): Promise => { const serviceKey = "inventoryService" diff --git a/packages/inventory/src/loaders/connection.ts b/packages/inventory/src/loaders/connection.ts index d45e4889a9..f53fa84817 100644 --- a/packages/inventory/src/loaders/connection.ts +++ b/packages/inventory/src/loaders/connection.ts @@ -6,8 +6,8 @@ import { } from "@medusajs/modules-sdk" import { DataSource, DataSourceOptions } from "typeorm" +import { MedusaError } from "@medusajs/utils" import { asValue } from "awilix" -import { MedusaError } from "medusa-core-utils" import * as InventoryModels from "../models" import { InventoryServiceInitializeOptions } from "../types" diff --git a/packages/inventory/src/loaders/container.ts b/packages/inventory/src/loaders/container.ts index b57a630e03..4b4bef1cb3 100644 --- a/packages/inventory/src/loaders/container.ts +++ b/packages/inventory/src/loaders/container.ts @@ -3,7 +3,7 @@ import { InternalModuleDeclaration, LoaderOptions } from "@medusajs/modules-sdk" import { InventoryItemService, InventoryLevelService, - ReservationItemService + ReservationItemService, } from "../services" import { asClass } from "awilix" diff --git a/packages/inventory/src/models/inventory-item.ts b/packages/inventory/src/models/inventory-item.ts index ebb5401c33..a055345d35 100644 --- a/packages/inventory/src/models/inventory-item.ts +++ b/packages/inventory/src/models/inventory-item.ts @@ -1,5 +1,5 @@ -import { Index, BeforeInsert, Column, Entity } from "typeorm" -import { SoftDeletableEntity, generateEntityId } from "@medusajs/medusa" +import { generateEntityId, SoftDeletableEntity } from "@medusajs/utils" +import { BeforeInsert, Column, Entity, Index } from "typeorm" @Entity() export class InventoryItem extends SoftDeletableEntity { diff --git a/packages/inventory/src/models/inventory-level.ts b/packages/inventory/src/models/inventory-level.ts index 88c46bba36..3f0c7cdd45 100644 --- a/packages/inventory/src/models/inventory-level.ts +++ b/packages/inventory/src/models/inventory-level.ts @@ -1,5 +1,5 @@ -import { Index, Unique, BeforeInsert, Column, Entity } from "typeorm" -import { SoftDeletableEntity, generateEntityId } from "@medusajs/medusa" +import { generateEntityId, SoftDeletableEntity } from "@medusajs/utils" +import { BeforeInsert, Column, Entity, Index } from "typeorm" @Entity() @Index(["inventory_item_id", "location_id"], { unique: true }) diff --git a/packages/inventory/src/models/reservation-item.ts b/packages/inventory/src/models/reservation-item.ts index 84e17386a1..dab57adac9 100644 --- a/packages/inventory/src/models/reservation-item.ts +++ b/packages/inventory/src/models/reservation-item.ts @@ -1,5 +1,5 @@ -import { Index, BeforeInsert, Column, Entity } from "typeorm" -import { SoftDeletableEntity, generateEntityId } from "@medusajs/medusa" +import { generateEntityId, SoftDeletableEntity } from "@medusajs/utils" +import { BeforeInsert, Column, Entity, Index } from "typeorm" @Entity() export class ReservationItem extends SoftDeletableEntity { diff --git a/packages/inventory/src/services/inventory-item.ts b/packages/inventory/src/services/inventory-item.ts index ad7e2ad9b1..5cf9aba7d1 100644 --- a/packages/inventory/src/services/inventory-item.ts +++ b/packages/inventory/src/services/inventory-item.ts @@ -1,19 +1,24 @@ import { - buildQuery, CreateInventoryItemInput, FilterableInventoryItemProps, FindConfig, - InventoryItemDTO -} from "@medusajs/medusa" -import { EventBusTypes, SharedContext } from "@medusajs/types" -import { InjectEntityManager, MedusaContext } from "@medusajs/utils" -import { isDefined, MedusaError } from "medusa-core-utils" + IEventBusService, + InventoryItemDTO, + SharedContext, +} from "@medusajs/types" +import { + buildQuery, + InjectEntityManager, + isDefined, + MedusaContext, + MedusaError, +} from "@medusajs/utils" import { DeepPartial, EntityManager, FindManyOptions } from "typeorm" import { InventoryItem } from "../models" import { getListQuery } from "../utils/query" type InjectedDependencies = { - eventBusService: EventBusTypes.IEventBusService + eventBusService: IEventBusService manager: EntityManager } @@ -25,7 +30,7 @@ export default class InventoryItemService { } protected readonly manager_: EntityManager - protected readonly eventBusService_: EventBusTypes.IEventBusService | undefined + protected readonly eventBusService_: IEventBusService | undefined constructor({ eventBusService, manager }: InjectedDependencies) { this.manager_ = manager diff --git a/packages/inventory/src/services/inventory-level.ts b/packages/inventory/src/services/inventory-level.ts index c061f8c90a..ee27a6a663 100644 --- a/packages/inventory/src/services/inventory-level.ts +++ b/packages/inventory/src/services/inventory-level.ts @@ -1,17 +1,22 @@ import { - buildQuery, CreateInventoryLevelInput, FilterableInventoryLevelProps, - FindConfig -} from "@medusajs/medusa" -import { EventBusTypes, SharedContext } from "@medusajs/types" -import { InjectEntityManager, MedusaContext } from "@medusajs/utils" -import { isDefined, MedusaError } from "medusa-core-utils" + FindConfig, + IEventBusService, + SharedContext, +} from "@medusajs/types" +import { + buildQuery, + InjectEntityManager, + isDefined, + MedusaContext, + MedusaError, +} from "@medusajs/utils" import { DeepPartial, EntityManager, FindManyOptions, In } from "typeorm" import { InventoryLevel } from "../models" type InjectedDependencies = { - eventBusService: EventBusTypes.IEventBusService + eventBusService: IEventBusService manager: EntityManager } @@ -23,7 +28,7 @@ export default class InventoryLevelService { } protected readonly manager_: EntityManager - protected readonly eventBusService_: EventBusTypes.IEventBusService | undefined + protected readonly eventBusService_: IEventBusService | undefined constructor({ eventBusService, manager }: InjectedDependencies) { this.manager_ = manager diff --git a/packages/inventory/src/services/inventory.ts b/packages/inventory/src/services/inventory.ts index 2bd5549ed8..727ad8ffd1 100644 --- a/packages/inventory/src/services/inventory.ts +++ b/packages/inventory/src/services/inventory.ts @@ -1,5 +1,4 @@ import { InternalModuleDeclaration } from "@medusajs/modules-sdk" - import { CreateInventoryItemInput, CreateInventoryLevelInput, @@ -8,33 +7,35 @@ import { FilterableInventoryLevelProps, FilterableReservationItemProps, FindConfig, + IEventBusService, IInventoryService, InventoryItemDTO, InventoryLevelDTO, ReservationItemDTO, + SharedContext, UpdateInventoryLevelInput, - UpdateReservationItemInput -} from "@medusajs/medusa" -import { EventBusTypes, SharedContext } from "@medusajs/types" -import { InjectEntityManager, MedusaContext } from "@medusajs/utils" -import { MedusaError } from "medusa-core-utils" -import { EntityManager } from "typeorm" + UpdateReservationItemInput, +} from "@medusajs/types" import { - InventoryItemService, - InventoryLevelService, - ReservationItemService -} from "./" + InjectEntityManager, + MedusaContext, + MedusaError, +} from "@medusajs/utils" +import { EntityManager } from "typeorm" +import InventoryItemService from "./inventory-item" +import InventoryLevelService from "./inventory-level" +import ReservationItemService from "./reservation-item" type InjectedDependencies = { manager: EntityManager - eventBusService: EventBusTypes.IEventBusService + eventBusService: IEventBusService inventoryItemService: InventoryItemService inventoryLevelService: InventoryLevelService reservationItemService: ReservationItemService } export default class InventoryService implements IInventoryService { protected readonly manager_: EntityManager - protected readonly eventBusService_: EventBusTypes.IEventBusService | undefined + protected readonly eventBusService_: IEventBusService | undefined protected readonly inventoryItemService_: InventoryItemService protected readonly reservationItemService_: ReservationItemService protected readonly inventoryLevelService_: InventoryLevelService diff --git a/packages/inventory/src/services/reservation-item.ts b/packages/inventory/src/services/reservation-item.ts index a9a920248d..a2fb0b4a11 100644 --- a/packages/inventory/src/services/reservation-item.ts +++ b/packages/inventory/src/services/reservation-item.ts @@ -1,18 +1,24 @@ import { - buildQuery, CreateReservationItemInput, FilterableReservationItemProps, - FindConfig, UpdateReservationItemInput -} from "@medusajs/medusa" -import { EventBusTypes, SharedContext } from "@medusajs/types" -import { InjectEntityManager, MedusaContext } from "@medusajs/utils" -import { isDefined, MedusaError } from "medusa-core-utils" + FindConfig, + IEventBusService, + SharedContext, + UpdateReservationItemInput, +} from "@medusajs/types" +import { + buildQuery, + InjectEntityManager, + isDefined, + MedusaContext, + MedusaError, +} from "@medusajs/utils" import { EntityManager, FindManyOptions } from "typeorm" import { InventoryLevelService } from "." import { ReservationItem } from "../models" type InjectedDependencies = { - eventBusService: EventBusTypes.IEventBusService + eventBusService: IEventBusService manager: EntityManager inventoryLevelService: InventoryLevelService } @@ -25,7 +31,7 @@ export default class ReservationItemService { } protected readonly manager_: EntityManager - protected readonly eventBusService_: EventBusTypes.IEventBusService | undefined + protected readonly eventBusService_: IEventBusService | undefined protected readonly inventoryLevelService_: InventoryLevelService constructor({ diff --git a/packages/inventory/src/utils/query.ts b/packages/inventory/src/utils/query.ts index ff283ff542..b7eaa41c9b 100644 --- a/packages/inventory/src/utils/query.ts +++ b/packages/inventory/src/utils/query.ts @@ -1,11 +1,10 @@ -import { EntityManager, FindOptionsWhere, ILike } from "typeorm" import { - buildLegacyFieldsListFrom, - buildQuery, ExtendedFindConfig, FilterableInventoryItemProps, FindConfig, -} from "@medusajs/medusa" +} from "@medusajs/types" +import { buildLegacyFieldsListFrom, buildQuery } from "@medusajs/utils" +import { EntityManager, FindOptionsWhere, ILike } from "typeorm" import { InventoryItem } from "../models" export function getListQuery( diff --git a/packages/inventory/tsconfig.spec.json b/packages/inventory/tsconfig.spec.json new file mode 100644 index 0000000000..9b62409191 --- /dev/null +++ b/packages/inventory/tsconfig.spec.json @@ -0,0 +1,5 @@ +{ + "extends": "./tsconfig.json", + "include": ["src"], + "exclude": ["node_modules"] +} diff --git a/packages/medusa-cli/package.json b/packages/medusa-cli/package.json index 6f7c8e6fd1..f2dd2ce48a 100644 --- a/packages/medusa-cli/package.json +++ b/packages/medusa-cli/package.json @@ -30,15 +30,12 @@ "@babel/cli": "^7.7.5", "@babel/core": "^7.7.5", "@babel/plugin-proposal-class-properties": "^7.7.4", - "@babel/plugin-transform-classes": "^7.9.5", "@babel/plugin-transform-runtime": "^7.7.6", "@babel/preset-env": "^7.7.5", "cross-env": "^5.2.1", "jest": "^25.5.4" }, "dependencies": { - "@babel/polyfill": "^7.8.7", - "@babel/runtime": "^7.9.6", "axios": "^0.21.4", "chalk": "^4.0.0", "configstore": "5.0.1", @@ -53,13 +50,13 @@ "meant": "^1.0.3", "medusa-core-utils": "^1.1.39", "medusa-telemetry": "0.0.16", - "netrc-parser": "^3.1.6", "open": "^8.0.6", "ora": "^5.4.1", "pg-god": "^1.0.12", "prompts": "^2.4.2", "regenerator-runtime": "^0.13.11", "resolve-cwd": "^3.0.0", + "sqlite3": "^5.0.2", "stack-trace": "^0.0.10", "ulid": "^2.3.0", "url": "^0.11.0", diff --git a/packages/medusa-cli/src/create-cli.js b/packages/medusa-cli/src/create-cli.js index c2297f324c..8479dcf95c 100644 --- a/packages/medusa-cli/src/create-cli.js +++ b/packages/medusa-cli/src/create-cli.js @@ -13,12 +13,14 @@ const { whoami } = require("./commands/whoami") const { login } = require("./commands/login") const { link } = require("./commands/link") -const handlerP = fn => (...args) => { - Promise.resolve(fn(...args)).then( - () => process.exit(0), - err => console.log(err) - ) -} +const handlerP = + (fn) => + (...args) => { + Promise.resolve(fn(...args)).then( + () => process.exit(0), + (err) => console.log(err) + ) + } function buildLocalCommands(cli, isLocalProject) { const defaultHost = `localhost` @@ -54,12 +56,17 @@ function buildLocalCommands(cli, isLocalProject) { ) return require(cmdPath).default } catch (err) { + if (process.env.NODE_ENV !== "production") { + console.log("--------------- ERROR ---------------------") + console.log(err) + console.log("-------------------------------------------") + } cli.showHelp() } } function getCommandHandler(command, handler) { - return argv => { + return (argv) => { const localCmd = resolveLocalCommand(command) const args = { ...argv, ...projectInfo, useYarn } @@ -70,7 +77,7 @@ function buildLocalCommands(cli, isLocalProject) { cli .command({ command: `new [root] [starter]`, - builder: _ => + builder: (_) => _.option(`seed`, { type: `boolean`, describe: `If flag is set the command will attempt to seed the database after setup.`, @@ -123,7 +130,7 @@ function buildLocalCommands(cli, isLocalProject) { .command({ command: `telemetry`, describe: `Enable or disable collection of anonymous usage data.`, - builder: yargs => + builder: (yargs) => yargs .option(`enable`, { type: `boolean`, @@ -145,7 +152,7 @@ function buildLocalCommands(cli, isLocalProject) { .command({ command: `seed`, desc: `Migrates and populates the database with the provided file.`, - builder: _ => + builder: (_) => _.option(`f`, { alias: `seed-file`, type: `string`, @@ -188,7 +195,7 @@ function buildLocalCommands(cli, isLocalProject) { .command({ command: `link`, desc: `Creates your Medusa Cloud user in your local database for local testing.`, - builder: _ => + builder: (_) => _.option(`su`, { alias: `skip-local-user`, type: `boolean`, @@ -199,7 +206,7 @@ function buildLocalCommands(cli, isLocalProject) { default: false, describe: `If set medusa develop will be run after successful linking.`, }), - handler: handlerP(argv => { + handler: handlerP((argv) => { if (!isLocalProject) { console.log("must be a local project") cli.showHelp() @@ -218,7 +225,7 @@ function buildLocalCommands(cli, isLocalProject) { .command({ command: `develop`, desc: `Start development server. Watches file and rebuilds when something changes`, - builder: _ => + builder: (_) => _.option(`H`, { alias: `host`, type: `string`, @@ -239,14 +246,14 @@ function buildLocalCommands(cli, isLocalProject) { // Return an empty promise to prevent handlerP from exiting early. // The development server shouldn't ever exit until the user directly // kills it so this is fine. - return new Promise(resolve => {}) + return new Promise((resolve) => {}) }) ), }) .command({ command: `start`, desc: `Start development server.`, - builder: _ => + builder: (_) => _.option(`H`, { alias: `host`, type: `string`, @@ -267,14 +274,14 @@ function buildLocalCommands(cli, isLocalProject) { // Return an empty promise to prevent handlerP from exiting early. // The development server shouldn't ever exit until the user directly // kills it so this is fine. - return new Promise(resolve => {}) + return new Promise((resolve) => {}) }) ), }) .command({ command: `user`, desc: `Create a user`, - builder: _ => + builder: (_) => _.option(`e`, { alias: `email`, type: `string`, @@ -296,7 +303,7 @@ function buildLocalCommands(cli, isLocalProject) { // Return an empty promise to prevent handlerP from exiting early. // The development server shouldn't ever exit until the user directly // kills it so this is fine. - return new Promise(resolve => {}) + return new Promise((resolve) => {}) }) ), }) @@ -335,7 +342,7 @@ Medusa version: ${medusaVersion} } } -module.exports = argv => { +module.exports = (argv) => { const cli = yargs() const isLocalProject = isLocalMedusaProject() @@ -381,13 +388,21 @@ module.exports = argv => { .demandCommand(1, `Pass --help to see all available commands and options.`) .strict() .fail((msg, err, yargs) => { - const availableCommands = yargs.getCommands().map(commandDescription => { - const [command] = commandDescription - return command.split(` `)[0] - }) + const availableCommands = yargs + .getCommands() + .map((commandDescription) => { + const [command] = commandDescription + return command.split(` `)[0] + }) const arg = argv.slice(2)[0] const suggestion = arg ? didYouMean(arg, availableCommands) : `` + if (process.env.NODE_ENV !== "production") { + console.log("--------------- ERROR ---------------------") + console.log(err) + console.log("-------------------------------------------") + } + cli.showHelp() reporter.info(suggestion) reporter.info(msg) diff --git a/packages/medusa-plugin-algolia/package.json b/packages/medusa-plugin-algolia/package.json index dfa7693506..718df0f5b1 100644 --- a/packages/medusa-plugin-algolia/package.json +++ b/packages/medusa-plugin-algolia/package.json @@ -19,11 +19,12 @@ "watch": "tsc --watch" }, "dependencies": { - "@medusajs/utils": "*", + "@medusajs/modules-sdk": "^0.0.1", + "@medusajs/utils": "^0.0.1", "algoliasearch": "^4.15.0" }, "devDependencies": { - "@medusajs/types": "*", + "@medusajs/types": "^0.0.1", "client-sessions": "^0.8.0", "cross-env": "^5.2.1", "jest": "^25.5.4", diff --git a/packages/medusa-plugin-meilisearch/package.json b/packages/medusa-plugin-meilisearch/package.json index 640f36448e..a18066ae2c 100644 --- a/packages/medusa-plugin-meilisearch/package.json +++ b/packages/medusa-plugin-meilisearch/package.json @@ -19,11 +19,14 @@ "watch": "tsc --watch" }, "dependencies": { - "@medusajs/utils": "*", + "@medusajs/utils": "^0.0.1", + "body-parser": "^1.19.0", + "lodash": "^4.17.21", "meilisearch": "^0.31.1" }, "devDependencies": { - "@medusajs/types": "*", + "@medusajs/medusa": "^1.7.12", + "@medusajs/types": "^0.0.1", "cross-env": "^5.2.1", "jest": "^25.5.4", "typescript": "^4.9.5" diff --git a/packages/medusa/package.json b/packages/medusa/package.json index 8f8dc1a53f..6bbb22fd81 100644 --- a/packages/medusa/package.json +++ b/packages/medusa/package.json @@ -19,20 +19,13 @@ "author": "Sebastian Rindom", "license": "MIT", "devDependencies": { - "@babel/cli": "^7.14.3", - "@babel/core": "^7.14.3", - "@babel/preset-typescript": "^7.13.0", - "@medusajs/types": "*", + "@medusajs/types": "^0.0.1", "@types/express": "^4.17.17", - "@types/jest": "^27.5.2", "@types/jsonwebtoken": "^8.5.9", "@types/multer": "^1.4.7", - "babel-preset-medusa-package": "^1.1.19", "cross-env": "^5.2.1", "jest": "^25.5.4", "medusa-interfaces": "^1.3.6", - "nodemon": "^2.0.20", - "sqlite3": "^5.0.2", "supertest": "^4.0.2", "ts-jest": "^25.5.1", "typescript": "^4.4.4" @@ -46,17 +39,19 @@ "test:unit": "jest" }, "peerDependencies": { + "@medusajs/types": "^0.0.1", "medusa-interfaces": "1.3.6", "typeorm": "^0.3.11" }, "dependencies": { "@medusajs/medusa-cli": "^1.3.8", - "@medusajs/modules-sdk": "*", - "@medusajs/utils": "*", + "@medusajs/modules-sdk": "^0.0.1", + "@medusajs/utils": "^0.0.1", "@types/ioredis": "^4.28.10", "@types/lodash": "^4.14.191", "awilix": "^8.0.0", "body-parser": "^1.19.0", + "boxen": "^5.0.1", "bullmq": "^3.5.6", "chokidar": "^3.4.2", "class-transformer": "^0.5.1", @@ -66,6 +61,7 @@ "core-js": "^3.6.5", "cors": "^2.8.5", "cross-spawn": "^7.0.3", + "dotenv": "^16.0.3", "express": "^4.17.1", "express-session": "^1.17.3", "fs-exists-cached": "^1.0.0", @@ -74,6 +70,7 @@ "ioredis-mock": "^5.6.0", "iso8601-duration": "^1.3.0", "jsonwebtoken": "^8.5.1", + "lodash": "^4.17.21", "medusa-core-utils": "^1.1.39", "medusa-telemetry": "^0.0.16", "medusa-test-utils": "^1.1.39", @@ -85,14 +82,12 @@ "passport-http-bearer": "^1.0.1", "passport-jwt": "^4.0.1", "passport-local": "^1.0.0", - "pg": "^8.5.1", "randomatic": "^3.1.1", "redis": "^3.0.2", "reflect-metadata": "^0.1.13", + "regenerator-runtime": "^0.13.11", "request-ip": "^2.1.3", - "resolve-cwd": "^3.0.0", "scrypt-kdf": "^2.0.1", - "sqlite3": "^5.0.2", "ulid": "^2.3.0", "uuid": "^8.3.2", "winston": "^3.8.2" diff --git a/packages/medusa/src/api/routes/admin/inventory-items/create-inventory-item.ts b/packages/medusa/src/api/routes/admin/inventory-items/create-inventory-item.ts index b96388812c..a11920692b 100644 --- a/packages/medusa/src/api/routes/admin/inventory-items/create-inventory-item.ts +++ b/packages/medusa/src/api/routes/admin/inventory-items/create-inventory-item.ts @@ -1,16 +1,14 @@ +import { IInventoryService } from "@medusajs/types" +import { MedusaError } from "@medusajs/utils" import { IsNumber, IsObject, IsOptional, IsString } from "class-validator" +import { EntityManager } from "typeorm" import { ProductVariantInventoryService, ProductVariantService, } from "../../../../services" -import { IInventoryService } from "../../../../interfaces" -import { validator } from "../../../../utils/validator" - -import { EntityManager } from "typeorm" - -import { createInventoryItemTransaction } from "./transaction/create-inventory-item" -import { MedusaError } from "medusa-core-utils" import { FindParams } from "../../../../types/common" +import { validator } from "../../../../utils/validator" +import { createInventoryItemTransaction } from "./transaction/create-inventory-item" /** * @oas [post] /admin/inventory-items diff --git a/packages/medusa/src/api/routes/admin/inventory-items/create-location-level.ts b/packages/medusa/src/api/routes/admin/inventory-items/create-location-level.ts index cd70fa823c..3bdbce204d 100644 --- a/packages/medusa/src/api/routes/admin/inventory-items/create-location-level.ts +++ b/packages/medusa/src/api/routes/admin/inventory-items/create-location-level.ts @@ -1,10 +1,6 @@ -import { Request, Response } from "express" +import { IInventoryService, IStockLocationService } from "@medusajs/types" import { IsNumber, IsOptional, IsString } from "class-validator" - -import { - IInventoryService, - IStockLocationService, -} from "../../../../interfaces" +import { Request, Response } from "express" import { FindParams } from "../../../../types/common" /** diff --git a/packages/medusa/src/api/routes/admin/inventory-items/delete-inventory-item.ts b/packages/medusa/src/api/routes/admin/inventory-items/delete-inventory-item.ts index e69149b384..b181616952 100644 --- a/packages/medusa/src/api/routes/admin/inventory-items/delete-inventory-item.ts +++ b/packages/medusa/src/api/routes/admin/inventory-items/delete-inventory-item.ts @@ -1,6 +1,6 @@ +import { IInventoryService } from "@medusajs/types" import { Request, Response } from "express" import { EntityManager } from "typeorm" -import { IInventoryService } from "../../../../interfaces" import { ProductVariantInventoryService } from "../../../../services" /** diff --git a/packages/medusa/src/api/routes/admin/inventory-items/delete-location-level.ts b/packages/medusa/src/api/routes/admin/inventory-items/delete-location-level.ts index 1be7b226aa..3efbf92817 100644 --- a/packages/medusa/src/api/routes/admin/inventory-items/delete-location-level.ts +++ b/packages/medusa/src/api/routes/admin/inventory-items/delete-location-level.ts @@ -1,7 +1,7 @@ +import { IInventoryService } from "@medusajs/types" import { Request, Response } from "express" import { MedusaError } from "medusa-core-utils" import { EntityManager } from "typeorm" -import { IInventoryService } from "../../../../interfaces" /** * @oas [delete] /admin/inventory-items/{id}/location-levels/{location_id} diff --git a/packages/medusa/src/api/routes/admin/inventory-items/get-inventory-item.ts b/packages/medusa/src/api/routes/admin/inventory-items/get-inventory-item.ts index 2d7de51a25..14845e8c03 100644 --- a/packages/medusa/src/api/routes/admin/inventory-items/get-inventory-item.ts +++ b/packages/medusa/src/api/routes/admin/inventory-items/get-inventory-item.ts @@ -1,4 +1,4 @@ -import { IInventoryService } from "../../../../interfaces" +import { IInventoryService } from "@medusajs/types" import { Request, Response } from "express" import { FindParams } from "../../../../types/common" import { joinLevels } from "./utils/join-levels" diff --git a/packages/medusa/src/api/routes/admin/inventory-items/index.ts b/packages/medusa/src/api/routes/admin/inventory-items/index.ts index bcb6797b5d..4f0007d863 100644 --- a/packages/medusa/src/api/routes/admin/inventory-items/index.ts +++ b/packages/medusa/src/api/routes/admin/inventory-items/index.ts @@ -1,35 +1,32 @@ +import { InventoryItemDTO, InventoryLevelDTO } from "@medusajs/types" import { Router } from "express" import "reflect-metadata" +import { ProductVariant } from "../../../../models" import { DeleteResponse, PaginatedResponse } from "../../../../types/common" -import { - InventoryItemDTO, - InventoryLevelDTO, -} from "../../../../types/inventory" import middlewares, { transformBody, transformQuery, } from "../../../middlewares" -import { AdminGetInventoryItemsParams } from "./list-inventory-items" -import { AdminGetInventoryItemsItemParams } from "./get-inventory-item" -import { - AdminPostInventoryItemsInventoryItemParams, - AdminPostInventoryItemsInventoryItemReq, -} from "./update-inventory-item" -import { AdminGetInventoryItemsItemLocationLevelsParams } from "./list-location-levels" -import { - AdminPostInventoryItemsItemLocationLevelsParams, - AdminPostInventoryItemsItemLocationLevelsReq, -} from "./create-location-level" -import { - AdminPostInventoryItemsItemLocationLevelsLevelParams, - AdminPostInventoryItemsItemLocationLevelsLevelReq, -} from "./update-location-level" import { checkRegisteredModules } from "../../../middlewares/check-registered-modules" -import { ProductVariant } from "../../../../models" import { AdminPostInventoryItemsParams, AdminPostInventoryItemsReq, } from "./create-inventory-item" +import { + AdminPostInventoryItemsItemLocationLevelsParams, + AdminPostInventoryItemsItemLocationLevelsReq, +} from "./create-location-level" +import { AdminGetInventoryItemsItemParams } from "./get-inventory-item" +import { AdminGetInventoryItemsParams } from "./list-inventory-items" +import { AdminGetInventoryItemsItemLocationLevelsParams } from "./list-location-levels" +import { + AdminPostInventoryItemsInventoryItemParams, + AdminPostInventoryItemsInventoryItemReq, +} from "./update-inventory-item" +import { + AdminPostInventoryItemsItemLocationLevelsLevelParams, + AdminPostInventoryItemsItemLocationLevelsLevelReq, +} from "./update-location-level" const route = Router() @@ -281,10 +278,10 @@ export type AdminInventoryItemsLocationLevelsRes = { } } -export * from "./list-inventory-items" export * from "./create-inventory-item" -export * from "./get-inventory-item" -export * from "./update-inventory-item" -export * from "./list-location-levels" export * from "./create-location-level" +export * from "./get-inventory-item" +export * from "./list-inventory-items" +export * from "./list-location-levels" +export * from "./update-inventory-item" export * from "./update-location-level" diff --git a/packages/medusa/src/api/routes/admin/inventory-items/list-inventory-items.ts b/packages/medusa/src/api/routes/admin/inventory-items/list-inventory-items.ts index 5febc94ae6..1cc0000fd0 100644 --- a/packages/medusa/src/api/routes/admin/inventory-items/list-inventory-items.ts +++ b/packages/medusa/src/api/routes/admin/inventory-items/list-inventory-items.ts @@ -1,20 +1,19 @@ -import { Request, Response } from "express" -import { IsBoolean, IsOptional, IsString } from "class-validator" +import { IInventoryService } from "@medusajs/types" import { Transform } from "class-transformer" -import { IsType } from "../../../../utils/validators/is-type" -import { getLevelsByInventoryItemId } from "./utils/join-levels" -import { getVariantsByInventoryItemId } from "./utils/join-variants" +import { IsBoolean, IsOptional, IsString } from "class-validator" +import { Request, Response } from "express" import { ProductVariantInventoryService, ProductVariantService, } from "../../../../services" -import { IInventoryService } from "../../../../interfaces" import { extendedFindParamsMixin, NumericalComparisonOperator, StringComparisonOperator, } from "../../../../types/common" -import { AdminInventoryItemsListWithVariantsAndLocationLevelsRes } from "." +import { IsType } from "../../../../utils/validators/is-type" +import { getLevelsByInventoryItemId } from "./utils/join-levels" +import { getVariantsByInventoryItemId } from "./utils/join-variants" /** * @oas [get] /admin/inventory-items diff --git a/packages/medusa/src/api/routes/admin/inventory-items/list-location-levels.ts b/packages/medusa/src/api/routes/admin/inventory-items/list-location-levels.ts index bf76c4e2ef..6c3c557b13 100644 --- a/packages/medusa/src/api/routes/admin/inventory-items/list-location-levels.ts +++ b/packages/medusa/src/api/routes/admin/inventory-items/list-location-levels.ts @@ -1,6 +1,5 @@ +import { IInventoryService } from "@medusajs/types" import { Request, Response } from "express" - -import { IInventoryService } from "../../../../interfaces" import { FindParams } from "../../../../types/common" /** diff --git a/packages/medusa/src/api/routes/admin/inventory-items/transaction/create-inventory-item.ts b/packages/medusa/src/api/routes/admin/inventory-items/transaction/create-inventory-item.ts index 3b1d117d9b..00a84bec97 100644 --- a/packages/medusa/src/api/routes/admin/inventory-items/transaction/create-inventory-item.ts +++ b/packages/medusa/src/api/routes/admin/inventory-items/transaction/create-inventory-item.ts @@ -1,3 +1,12 @@ +import { IInventoryService, InventoryItemDTO } from "@medusajs/types" +import { MedusaError } from "@medusajs/utils" +import { EntityManager } from "typeorm" +import { ulid } from "ulid" +import { ProductVariant } from "../../../../../models" +import { + ProductVariantInventoryService, + ProductVariantService, +} from "../../../../../services" import { DistributedTransaction, TransactionHandlerType, @@ -6,16 +15,6 @@ import { TransactionState, TransactionStepsDefinition, } from "../../../../../utils/transaction" -import { ulid } from "ulid" -import { EntityManager } from "typeorm" -import { IInventoryService } from "../../../../../interfaces" -import { - ProductVariantInventoryService, - ProductVariantService, -} from "../../../../../services" -import { InventoryItemDTO } from "../../../../../types/inventory" -import { ProductVariant } from "../../../../../models" -import { MedusaError } from "medusa-core-utils" enum actions { createInventoryItem = "createInventoryItem", diff --git a/packages/medusa/src/api/routes/admin/inventory-items/update-inventory-item.ts b/packages/medusa/src/api/routes/admin/inventory-items/update-inventory-item.ts index 5f2028972d..95a431bd92 100644 --- a/packages/medusa/src/api/routes/admin/inventory-items/update-inventory-item.ts +++ b/packages/medusa/src/api/routes/admin/inventory-items/update-inventory-item.ts @@ -1,9 +1,8 @@ -import { Request, Response } from "express" +import { IInventoryService } from "@medusajs/types" import { IsBoolean, IsNumber, IsOptional, IsString } from "class-validator" - -import { IInventoryService } from "../../../../interfaces" -import { FindParams } from "../../../../types/common" +import { Request, Response } from "express" import { EntityManager } from "typeorm" +import { FindParams } from "../../../../types/common" /** * @oas [post] /admin/inventory-items/{id} diff --git a/packages/medusa/src/api/routes/admin/inventory-items/update-location-level.ts b/packages/medusa/src/api/routes/admin/inventory-items/update-location-level.ts index 120da3039d..00e44f68b0 100644 --- a/packages/medusa/src/api/routes/admin/inventory-items/update-location-level.ts +++ b/packages/medusa/src/api/routes/admin/inventory-items/update-location-level.ts @@ -1,9 +1,8 @@ -import { Request, Response } from "express" +import { IInventoryService } from "@medusajs/types" import { IsNumber, IsOptional, Min } from "class-validator" - -import { IInventoryService } from "../../../../interfaces" -import { FindParams } from "../../../../types/common" +import { Request, Response } from "express" import { EntityManager } from "typeorm" +import { FindParams } from "../../../../types/common" /** * @oas [post] /admin/inventory-items/{id}/location-levels/{location_id} diff --git a/packages/medusa/src/api/routes/admin/inventory-items/utils/join-levels.ts b/packages/medusa/src/api/routes/admin/inventory-items/utils/join-levels.ts index 08eba90157..1c28a9a5ef 100644 --- a/packages/medusa/src/api/routes/admin/inventory-items/utils/join-levels.ts +++ b/packages/medusa/src/api/routes/admin/inventory-items/utils/join-levels.ts @@ -1,8 +1,8 @@ -import { IInventoryService } from "../../../../../interfaces" import { + IInventoryService, InventoryItemDTO, InventoryLevelDTO, -} from "../../../../../types/inventory" +} from "@medusajs/types" import { LevelWithAvailability, ResponseInventoryItem } from "../../variants" export const buildLevelsByInventoryItemId = ( diff --git a/packages/medusa/src/api/routes/admin/inventory-items/utils/join-variants.ts b/packages/medusa/src/api/routes/admin/inventory-items/utils/join-variants.ts index c2a1fe2775..4d73d3d33f 100644 --- a/packages/medusa/src/api/routes/admin/inventory-items/utils/join-variants.ts +++ b/packages/medusa/src/api/routes/admin/inventory-items/utils/join-variants.ts @@ -1,9 +1,9 @@ +import { InventoryItemDTO } from "@medusajs/types" +import { ProductVariant } from "../../../../../models" import { ProductVariantInventoryService, ProductVariantService, } from "../../../../../services" -import { InventoryItemDTO } from "../../../../../types/inventory" -import { ProductVariant } from "../../../../../models" export type InventoryItemsWithVariants = Partial & { variants?: ProductVariant[] diff --git a/packages/medusa/src/api/routes/admin/orders/cancel-fulfillment.ts b/packages/medusa/src/api/routes/admin/orders/cancel-fulfillment.ts index 83319e81a7..7b0642cc61 100644 --- a/packages/medusa/src/api/routes/admin/orders/cancel-fulfillment.ts +++ b/packages/medusa/src/api/routes/admin/orders/cancel-fulfillment.ts @@ -4,10 +4,10 @@ import { ProductVariantInventoryService, } from "../../../../services" -import { EntityManager } from "typeorm" +import { IInventoryService } from "@medusajs/types" import { MedusaError } from "medusa-core-utils" +import { EntityManager } from "typeorm" import { Fulfillment } from "../../../../models" -import { IInventoryService } from "../../../../interfaces" import { FindParams } from "../../../../types/common" /** diff --git a/packages/medusa/src/api/routes/admin/orders/get-reservations.ts b/packages/medusa/src/api/routes/admin/orders/get-reservations.ts index 18a0c72dd7..b3f4bef6f0 100644 --- a/packages/medusa/src/api/routes/admin/orders/get-reservations.ts +++ b/packages/medusa/src/api/routes/admin/orders/get-reservations.ts @@ -1,5 +1,5 @@ +import { IInventoryService } from "@medusajs/types" import { Request, Response } from "express" -import { IInventoryService } from "../../../../interfaces" import { OrderService } from "../../../../services" import { extendedFindParamsMixin } from "../../../../types/common" diff --git a/packages/medusa/src/api/routes/admin/orders/request-return.ts b/packages/medusa/src/api/routes/admin/orders/request-return.ts index ef69a37b13..f38d4f356c 100644 --- a/packages/medusa/src/api/routes/admin/orders/request-return.ts +++ b/packages/medusa/src/api/routes/admin/orders/request-return.ts @@ -1,3 +1,5 @@ +import { isDefined, MedusaError } from "@medusajs/utils" +import { Type } from "class-transformer" import { IsArray, IsBoolean, @@ -6,16 +8,13 @@ import { IsString, ValidateNested } from "class-validator" +import { EntityManager } from "typeorm" +import { Order, Return } from "../../../../models" import { EventBusService, OrderService, ReturnService } from "../../../../services" - -import { Type } from "class-transformer" -import { isDefined, MedusaError } from "medusa-core-utils" -import { EntityManager } from "typeorm" -import { Order, Return } from "../../../../models" import { FindParams } from "../../../../types/common" import { OrdersReturnItem } from "../../../../types/orders" diff --git a/packages/medusa/src/api/routes/admin/products/create-product.ts b/packages/medusa/src/api/routes/admin/products/create-product.ts index ea1e306aad..3bbfae695a 100644 --- a/packages/medusa/src/api/routes/admin/products/create-product.ts +++ b/packages/medusa/src/api/routes/admin/products/create-product.ts @@ -28,21 +28,20 @@ import { ProductVariantPricesCreateReq, } from "../../../../types/product-variant" +import { IInventoryService } from "@medusajs/types" import { Type } from "class-transformer" import { EntityManager } from "typeorm" import SalesChannelFeatureFlag from "../../../../loaders/feature-flags/sales-channels" import { ProductStatus } from "../../../../models" +import { Logger } from "../../../../types/global" import { FeatureFlagDecorators } from "../../../../utils/feature-flag-decorators" +import { FlagRouter } from "../../../../utils/flag-router" +import { DistributedTransaction } from "../../../../utils/transaction" import { validator } from "../../../../utils/validator" -import { IInventoryService } from "../../../../interfaces" - import { createVariantTransaction, revertVariantTransaction, } from "./transaction/create-product-variant" -import { DistributedTransaction } from "../../../../utils/transaction" -import { Logger } from "../../../../types/global" -import { FlagRouter } from "../../../../utils/flag-router" /** * @oas [post] /admin/products diff --git a/packages/medusa/src/api/routes/admin/products/create-variant.ts b/packages/medusa/src/api/routes/admin/products/create-variant.ts index aa1f3d9145..61a48133f0 100644 --- a/packages/medusa/src/api/routes/admin/products/create-variant.ts +++ b/packages/medusa/src/api/routes/admin/products/create-variant.ts @@ -1,3 +1,5 @@ +import { IInventoryService } from "@medusajs/types" +import { Type } from "class-transformer" import { IsArray, IsBoolean, @@ -7,24 +9,19 @@ import { IsString, ValidateNested, } from "class-validator" -import { Type } from "class-transformer" +import { EntityManager } from "typeorm" +import { defaultAdminProductFields, defaultAdminProductRelations } from "." import { PricingService, ProductService, ProductVariantInventoryService, ProductVariantService, } from "../../../../services" -import { defaultAdminProductFields, defaultAdminProductRelations } from "." - -import { IInventoryService } from "../../../../interfaces" import { CreateProductVariantInput, ProductVariantPricesCreateReq, } from "../../../../types/product-variant" import { validator } from "../../../../utils/validator" - -import { EntityManager } from "typeorm" - import { createVariantTransaction } from "./transaction/create-product-variant" /** diff --git a/packages/medusa/src/api/routes/admin/products/transaction/create-product-variant.ts b/packages/medusa/src/api/routes/admin/products/transaction/create-product-variant.ts index 786507c6b5..214f92d5f2 100644 --- a/packages/medusa/src/api/routes/admin/products/transaction/create-product-variant.ts +++ b/packages/medusa/src/api/routes/admin/products/transaction/create-product-variant.ts @@ -1,13 +1,12 @@ -import { MedusaError } from "medusa-core-utils" +import { IInventoryService, InventoryItemDTO } from "@medusajs/types" +import { MedusaError } from "@medusajs/utils" import { EntityManager } from "typeorm" import { ulid } from "ulid" -import { IInventoryService } from "../../../../../interfaces" import { ProductVariant } from "../../../../../models" import { ProductVariantInventoryService, ProductVariantService, } from "../../../../../services" -import { InventoryItemDTO } from "../../../../../types/inventory" import { CreateProductVariantInput } from "../../../../../types/product-variant" import { DistributedTransaction, diff --git a/packages/medusa/src/api/routes/admin/products/update-product.ts b/packages/medusa/src/api/routes/admin/products/update-product.ts index 68d8006477..a5e610ba53 100644 --- a/packages/medusa/src/api/routes/admin/products/update-product.ts +++ b/packages/medusa/src/api/routes/admin/products/update-product.ts @@ -1,3 +1,6 @@ +import { IInventoryService } from "@medusajs/types" +import { MedusaError } from "@medusajs/utils" +import { Type } from "class-transformer" import { IsArray, IsBoolean, @@ -11,38 +14,34 @@ import { ValidateIf, ValidateNested, } from "class-validator" +import { EntityManager } from "typeorm" import { defaultAdminProductFields, defaultAdminProductRelations } from "." +import SalesChannelFeatureFlag from "../../../../loaders/feature-flags/sales-channels" +import { ProductStatus } from "../../../../models" import { PricingService, ProductService, ProductVariantInventoryService, ProductVariantService, } from "../../../../services" +import { Logger } from "../../../../types/global" import { ProductProductCategoryReq, ProductSalesChannelReq, ProductTagReq, ProductTypeReq, } from "../../../../types/product" - -import { Type } from "class-transformer" -import { EntityManager } from "typeorm" -import SalesChannelFeatureFlag from "../../../../loaders/feature-flags/sales-channels" -import { ProductStatus } from "../../../../models" import { CreateProductVariantInput, ProductVariantPricesUpdateReq, } from "../../../../types/product-variant" import { FeatureFlagDecorators } from "../../../../utils/feature-flag-decorators" -import { validator } from "../../../../utils/validator" -import { MedusaError } from "medusa-core-utils" import { DistributedTransaction } from "../../../../utils/transaction" +import { validator } from "../../../../utils/validator" import { createVariantTransaction, revertVariantTransaction, } from "./transaction/create-product-variant" -import { IInventoryService } from "../../../../interfaces" -import { Logger } from "../../../../types/global" /** * @oas [post] /admin/products/{id} diff --git a/packages/medusa/src/api/routes/admin/reservations/create-reservation.ts b/packages/medusa/src/api/routes/admin/reservations/create-reservation.ts index 0a0f486ee1..96273c5331 100644 --- a/packages/medusa/src/api/routes/admin/reservations/create-reservation.ts +++ b/packages/medusa/src/api/routes/admin/reservations/create-reservation.ts @@ -1,6 +1,6 @@ +import { IInventoryService } from "@medusajs/types" +import { isDefined } from "@medusajs/utils" import { IsNumber, IsObject, IsOptional, IsString } from "class-validator" -import { isDefined } from "medusa-core-utils" -import { IInventoryService } from "../../../../interfaces" import { validateUpdateReservationQuantity } from "./utils/validate-reservation-quantity" /** diff --git a/packages/medusa/src/api/routes/admin/reservations/delete-reservation.ts b/packages/medusa/src/api/routes/admin/reservations/delete-reservation.ts index 46226280c0..d9c2f6062e 100644 --- a/packages/medusa/src/api/routes/admin/reservations/delete-reservation.ts +++ b/packages/medusa/src/api/routes/admin/reservations/delete-reservation.ts @@ -1,5 +1,5 @@ +import { IInventoryService } from "@medusajs/types" import { EntityManager } from "typeorm" -import { IInventoryService } from "../../../../interfaces" /** * @oas [delete] /admin/reservations/{id} diff --git a/packages/medusa/src/api/routes/admin/reservations/get-reservation.ts b/packages/medusa/src/api/routes/admin/reservations/get-reservation.ts index 89e2805742..d291ac91e7 100644 --- a/packages/medusa/src/api/routes/admin/reservations/get-reservation.ts +++ b/packages/medusa/src/api/routes/admin/reservations/get-reservation.ts @@ -1,5 +1,5 @@ -import { MedusaError } from "medusa-core-utils" -import { IInventoryService } from "../../../../interfaces" +import { IInventoryService } from "@medusajs/types" +import { MedusaError } from "@medusajs/utils" /** * @oas [get] /admin/reservations/{id} diff --git a/packages/medusa/src/api/routes/admin/reservations/index.ts b/packages/medusa/src/api/routes/admin/reservations/index.ts index 894810b6a7..ae04218fc0 100644 --- a/packages/medusa/src/api/routes/admin/reservations/index.ts +++ b/packages/medusa/src/api/routes/admin/reservations/index.ts @@ -1,15 +1,14 @@ +import { ReservationItemDTO } from "@medusajs/types" import { Router } from "express" -import { ReservationItemDTO } from "../../../.." import { DeleteResponse, PaginatedResponse } from "../../../../types/common" import middlewares, { transformBody, transformQuery, } from "../../../middlewares" -import "reflect-metadata" -import { AdminPostReservationsReq } from "./create-reservation" -import { AdminPostReservationsReservationReq } from "./update-reservation" import { checkRegisteredModules } from "../../../middlewares/check-registered-modules" +import { AdminPostReservationsReq } from "./create-reservation" import { AdminGetReservationsParams } from "./list-reservations" +import { AdminPostReservationsReservationReq } from "./update-reservation" const route = Router() @@ -133,5 +132,5 @@ export type AdminReservationsDeleteRes = DeleteResponse export * from "./create-reservation" export * from "./delete-reservation" export * from "./get-reservation" -export * from "./update-reservation" export * from "./list-reservations" +export * from "./update-reservation" diff --git a/packages/medusa/src/api/routes/admin/reservations/list-reservations.ts b/packages/medusa/src/api/routes/admin/reservations/list-reservations.ts index 1ec52f0854..4cd0e5e5b3 100644 --- a/packages/medusa/src/api/routes/admin/reservations/list-reservations.ts +++ b/packages/medusa/src/api/routes/admin/reservations/list-reservations.ts @@ -1,7 +1,7 @@ +import { IInventoryService } from "@medusajs/types" import { Type } from "class-transformer" import { IsArray, IsOptional, IsString, ValidateNested } from "class-validator" import { Request, Response } from "express" -import { IInventoryService } from "../../../../interfaces" import { extendedFindParamsMixin, NumericalComparisonOperator, diff --git a/packages/medusa/src/api/routes/admin/reservations/update-reservation.ts b/packages/medusa/src/api/routes/admin/reservations/update-reservation.ts index 1312b69e17..b010e15f28 100644 --- a/packages/medusa/src/api/routes/admin/reservations/update-reservation.ts +++ b/packages/medusa/src/api/routes/admin/reservations/update-reservation.ts @@ -1,7 +1,7 @@ +import { IInventoryService } from "@medusajs/types" +import { isDefined } from "@medusajs/utils" import { IsNumber, IsObject, IsOptional, IsString } from "class-validator" -import { isDefined, MedusaError } from "medusa-core-utils" import { EntityManager } from "typeorm" -import { IInventoryService } from "../../../../interfaces" import { LineItemService } from "../../../../services" import { validateUpdateReservationQuantity } from "./utils/validate-reservation-quantity" diff --git a/packages/medusa/src/api/routes/admin/reservations/utils/validate-reservation-quantity.ts b/packages/medusa/src/api/routes/admin/reservations/utils/validate-reservation-quantity.ts index 09c5b499d5..875349e551 100644 --- a/packages/medusa/src/api/routes/admin/reservations/utils/validate-reservation-quantity.ts +++ b/packages/medusa/src/api/routes/admin/reservations/utils/validate-reservation-quantity.ts @@ -1,5 +1,5 @@ -import { MedusaError } from "medusa-core-utils" -import { IInventoryService } from "../../../../../interfaces" +import { IInventoryService } from "@medusajs/types" +import { MedusaError } from "@medusajs/utils" import { LineItemService } from "../../../../../services" export const validateUpdateReservationQuantity = async ( diff --git a/packages/medusa/src/api/routes/admin/stock-locations/create-stock-location.ts b/packages/medusa/src/api/routes/admin/stock-locations/create-stock-location.ts index 045666f0d5..3e7fa764e5 100644 --- a/packages/medusa/src/api/routes/admin/stock-locations/create-stock-location.ts +++ b/packages/medusa/src/api/routes/admin/stock-locations/create-stock-location.ts @@ -1,8 +1,7 @@ -import { Request, Response } from "express" +import { IStockLocationService } from "@medusajs/types" import { Type } from "class-transformer" import { IsObject, IsOptional, IsString, ValidateNested } from "class-validator" - -import { IStockLocationService } from "../../../../interfaces" +import { Request, Response } from "express" import { FindParams } from "../../../../types/common" /** diff --git a/packages/medusa/src/api/routes/admin/stock-locations/delete-stock-location.ts b/packages/medusa/src/api/routes/admin/stock-locations/delete-stock-location.ts index a2682cf38d..0d0bdf4066 100644 --- a/packages/medusa/src/api/routes/admin/stock-locations/delete-stock-location.ts +++ b/packages/medusa/src/api/routes/admin/stock-locations/delete-stock-location.ts @@ -1,8 +1,5 @@ +import { IInventoryService, IStockLocationService } from "@medusajs/types" import { EntityManager } from "typeorm" -import { - IInventoryService, - IStockLocationService, -} from "../../../../interfaces" import { SalesChannelLocationService } from "../../../../services" /** diff --git a/packages/medusa/src/api/routes/admin/stock-locations/get-stock-location.ts b/packages/medusa/src/api/routes/admin/stock-locations/get-stock-location.ts index e2fa6ab4d3..995af3e274 100644 --- a/packages/medusa/src/api/routes/admin/stock-locations/get-stock-location.ts +++ b/packages/medusa/src/api/routes/admin/stock-locations/get-stock-location.ts @@ -1,11 +1,11 @@ -import { IStockLocationService } from "../../../../interfaces" +import { IStockLocationService } from "@medusajs/types" import { Request, Response } from "express" -import { FindParams } from "../../../../types/common" -import { joinSalesChannels } from "./utils/join-sales-channels" import { SalesChannelLocationService, SalesChannelService, } from "../../../../services" +import { FindParams } from "../../../../types/common" +import { joinSalesChannels } from "./utils/join-sales-channels" /** * @oas [get] /admin/stock-locations/{id} diff --git a/packages/medusa/src/api/routes/admin/stock-locations/index.ts b/packages/medusa/src/api/routes/admin/stock-locations/index.ts index ae36c7161c..0d9879678f 100644 --- a/packages/medusa/src/api/routes/admin/stock-locations/index.ts +++ b/packages/medusa/src/api/routes/admin/stock-locations/index.ts @@ -1,25 +1,24 @@ -import { Router } from "express" -import "reflect-metadata" -import { DeleteResponse, PaginatedResponse } from "../../../../types/common" import { - StockLocationDTO, - StockLocationExpandedDTO, -} from "../../../../types/stock-location" + DeleteResponse, + PaginatedResponse, + StockLocationTypes, +} from "@medusajs/types" +import { Router } from "express" import middlewares, { transformBody, transformQuery, } from "../../../middlewares" -import { AdminGetStockLocationsParams } from "./list-stock-locations" -import { AdminGetStockLocationsLocationParams } from "./get-stock-location" -import { - AdminPostStockLocationsLocationParams, - AdminPostStockLocationsLocationReq, -} from "./update-stock-location" +import { checkRegisteredModules } from "../../../middlewares/check-registered-modules" import { AdminPostStockLocationsParams, AdminPostStockLocationsReq, } from "./create-stock-location" -import { checkRegisteredModules } from "../../../middlewares/check-registered-modules" +import { AdminGetStockLocationsLocationParams } from "./get-stock-location" +import { AdminGetStockLocationsParams } from "./list-stock-locations" +import { + AdminPostStockLocationsLocationParams, + AdminPostStockLocationsLocationReq, +} from "./update-stock-location" const route = Router() @@ -82,14 +81,9 @@ export default (app) => { return app } -export const defaultAdminStockLocationFields: (keyof StockLocationDTO)[] = [ - "id", - "name", - "address_id", - "metadata", - "created_at", - "updated_at", -] +// eslint-disable-next-line max-len +export const defaultAdminStockLocationFields: (keyof StockLocationTypes.StockLocationDTO)[] = + ["id", "name", "address_id", "metadata", "created_at", "updated_at"] export const defaultAdminStockLocationRelations = [] @@ -125,7 +119,7 @@ export type AdminStockLocationsDeleteRes = DeleteResponse * $ref: "#/components/schemas/StockLocationExpandedDTO" */ export type AdminStockLocationsRes = { - stock_location: StockLocationExpandedDTO + stock_location: StockLocationTypes.StockLocationExpandedDTO } /** @@ -152,10 +146,10 @@ export type AdminStockLocationsRes = { * description: The number of items per page */ export type AdminStockLocationsListRes = PaginatedResponse & { - stock_locations: StockLocationExpandedDTO[] + stock_locations: StockLocationTypes.StockLocationExpandedDTO[] } -export * from "./list-stock-locations" -export * from "./get-stock-location" export * from "./create-stock-location" +export * from "./get-stock-location" +export * from "./list-stock-locations" export * from "./update-stock-location" diff --git a/packages/medusa/src/api/routes/admin/stock-locations/list-stock-locations.ts b/packages/medusa/src/api/routes/admin/stock-locations/list-stock-locations.ts index 5016dce32e..a0abf615ba 100644 --- a/packages/medusa/src/api/routes/admin/stock-locations/list-stock-locations.ts +++ b/packages/medusa/src/api/routes/admin/stock-locations/list-stock-locations.ts @@ -1,13 +1,12 @@ +import { IStockLocationService } from "@medusajs/types" import { IsOptional } from "class-validator" -import { IsType } from "../../../../utils/validators/is-type" - -import { IStockLocationService } from "../../../../interfaces" -import { extendedFindParamsMixin } from "../../../../types/common" import { Request, Response } from "express" import { SalesChannelLocationService, SalesChannelService, } from "../../../../services" +import { extendedFindParamsMixin } from "../../../../types/common" +import { IsType } from "../../../../utils/validators/is-type" import { joinSalesChannels } from "./utils/join-sales-channels" /** diff --git a/packages/medusa/src/api/routes/admin/stock-locations/update-stock-location.ts b/packages/medusa/src/api/routes/admin/stock-locations/update-stock-location.ts index 31a7cca0bb..bc8716c356 100644 --- a/packages/medusa/src/api/routes/admin/stock-locations/update-stock-location.ts +++ b/packages/medusa/src/api/routes/admin/stock-locations/update-stock-location.ts @@ -1,8 +1,7 @@ -import { Request, Response } from "express" +import { IStockLocationService } from "@medusajs/types" import { Type } from "class-transformer" import { IsObject, IsOptional, IsString, ValidateNested } from "class-validator" - -import { IStockLocationService } from "../../../../interfaces" +import { Request, Response } from "express" import { FindParams } from "../../../../types/common" /** diff --git a/packages/medusa/src/api/routes/admin/stock-locations/utils/join-sales-channels.ts b/packages/medusa/src/api/routes/admin/stock-locations/utils/join-sales-channels.ts index 0c59072469..a475cc9da9 100644 --- a/packages/medusa/src/api/routes/admin/stock-locations/utils/join-sales-channels.ts +++ b/packages/medusa/src/api/routes/admin/stock-locations/utils/join-sales-channels.ts @@ -1,11 +1,8 @@ +import { StockLocationDTO, StockLocationExpandedDTO } from "@medusajs/types" import { SalesChannelLocationService, SalesChannelService, } from "../../../../../services" -import { - StockLocationDTO, - StockLocationExpandedDTO, -} from "../../../../../types/stock-location" const joinSalesChannels = async ( locations: StockLocationDTO[], diff --git a/packages/medusa/src/api/routes/admin/store/get-store.ts b/packages/medusa/src/api/routes/admin/store/get-store.ts index 4dd0547e25..e8f483979e 100644 --- a/packages/medusa/src/api/routes/admin/store/get-store.ts +++ b/packages/medusa/src/api/routes/admin/store/get-store.ts @@ -1,3 +1,5 @@ +import { ModulesHelper } from "@medusajs/modules-sdk" +import { defaultRelationsExtended } from "." import { FulfillmentProviderService, PaymentProviderService, @@ -5,8 +7,6 @@ import { } from "../../../../services" import { ExtendedStoreDTO } from "../../../../types/store" import { FlagRouter } from "../../../../utils/flag-router" -import { ModulesHelper } from "@medusajs/modules-sdk" -import { defaultRelationsExtended } from "." /** * @oas [get] /admin/store diff --git a/packages/medusa/src/api/routes/admin/variants/get-inventory.ts b/packages/medusa/src/api/routes/admin/variants/get-inventory.ts index 8a3aa580a3..1effc12b25 100644 --- a/packages/medusa/src/api/routes/admin/variants/get-inventory.ts +++ b/packages/medusa/src/api/routes/admin/variants/get-inventory.ts @@ -1,15 +1,15 @@ import { + IInventoryService, InventoryItemDTO, InventoryLevelDTO, -} from "../../../../types/inventory" -import ProductVariantInventoryService from "../../../../services/product-variant-inventory" +} from "@medusajs/types" +import { SalesChannel } from "../../../../models" import { SalesChannelLocationService, SalesChannelService, } from "../../../../services" -import { SalesChannel } from "../../../../models" -import { IInventoryService } from "../../../../interfaces" import ProductVariantService from "../../../../services/product-variant" +import ProductVariantInventoryService from "../../../../services/product-variant-inventory" import { joinLevels } from "../inventory-items/utils/join-levels" /** @@ -126,6 +126,7 @@ export default async (req, res) => { } const quantity = + // eslint-disable-next-line max-len await productVariantInventoryService.getVariantQuantityFromVariantInventoryItems( variantInventoryItems, channel.id diff --git a/packages/medusa/src/commands/develop.js b/packages/medusa/src/commands/develop.js index 6b173a0003..6994192714 100644 --- a/packages/medusa/src/commands/develop.js +++ b/packages/medusa/src/commands/develop.js @@ -1,10 +1,10 @@ -import { EOL } from "os" import boxen from "boxen" -import path from "path" import { execSync } from "child_process" -import spawn from "cross-spawn" import chokidar from "chokidar" +import spawn from "cross-spawn" import Store from "medusa-telemetry/dist/store" +import { EOL } from "os" +import path from "path" import Logger from "../loaders/logger" @@ -50,7 +50,11 @@ export default async function ({ port, directory }) { let child = spawn(cliPath, [`start`, ...args], { cwd: directory, env: process.env, - stdio: ["pipe", process.stdout, process.stderr], + stdio: ["inherit", "inherit", "inherit", "ipc"], + }) + child.on("error", function (err) { + console.log("Error ", err) + process.exit(1) }) chokidar.watch(`${directory}/src`).on("change", (file) => { @@ -65,7 +69,7 @@ export default async function ({ port, directory }) { execSync(`${babelPath} src -d dist --extensions ".ts,.js"`, { cwd: directory, - stdio: ["pipe", process.stdout, process.stderr], + stdio: ["inherit", "inherit", "inherit", "ipc"], }) Logger.info("Rebuilt") @@ -73,7 +77,11 @@ export default async function ({ port, directory }) { child = spawn(cliPath, [`start`, ...args], { cwd: directory, env: process.env, - stdio: ["pipe", process.stdout, process.stderr], + stdio: ["inherit", "inherit", "inherit", "ipc"], + }) + child.on("error", function (err) { + console.log("Error ", err) + process.exit(1) }) }) } diff --git a/packages/medusa/src/commands/start.js b/packages/medusa/src/commands/start.js index 1918be59d0..3f2161e803 100644 --- a/packages/medusa/src/commands/start.js +++ b/packages/medusa/src/commands/start.js @@ -18,40 +18,45 @@ export default async function ({ port, directory }) { const app = express() - const { dbConnection } = await loaders({ directory, expressApp: app }) - const serverActivity = Logger.activity(`Creating server`) - const server = GracefulShutdownServer.create( - app.listen(port, (err) => { - if (err) { - return - } - Logger.success(serverActivity, `Server is ready on port: ${port}`) - track("CLI_START_COMPLETED") + try { + const { dbConnection } = await loaders({ directory, expressApp: app }) + const serverActivity = Logger.activity(`Creating server`) + const server = GracefulShutdownServer.create( + app.listen(port, (err) => { + if (err) { + return + } + Logger.success(serverActivity, `Server is ready on port: ${port}`) + track("CLI_START_COMPLETED") + }) + ) + + // Handle graceful shutdown + const gracefulShutDown = () => { + server + .shutdown() + .then(() => { + Logger.info("Gracefully stopping the server.") + process.exit(0) + }) + .catch((e) => { + Logger.error("Error received when shutting down the server.", e) + process.exit(1) + }) + } + process.on("SIGTERM", gracefulShutDown) + process.on("SIGINT", gracefulShutDown) + + scheduleJob(CRON_SCHEDULE, () => { + track("PING") }) - ) - // Handle graceful shutdown - const gracefulShutDown = () => { - server - .shutdown() - .then(() => { - Logger.info("Gracefully stopping the server.") - process.exit(0) - }) - .catch((e) => { - Logger.error("Error received when shutting down the server.", e) - process.exit(1) - }) + return { dbConnection, server } + } catch (err) { + Logger.error("Error starting server", err) + process.exit(1) } - process.on("SIGTERM", gracefulShutDown) - process.on("SIGINT", gracefulShutDown) - - scheduleJob(CRON_SCHEDULE, () => { - track("PING") - }) - - return { dbConnection, server } } - const { dbConnection, server } = await start() + await start() } diff --git a/packages/medusa/src/index.js b/packages/medusa/src/index.js index a1e454f5b7..280e52f785 100644 --- a/packages/medusa/src/index.js +++ b/packages/medusa/src/index.js @@ -6,7 +6,5 @@ export * from "./services" export * from "./types/batch-job" export * from "./types/common" export * from "./types/global" -export * from "./types/inventory" export * from "./types/price-list" -export * from "./types/stock-location" export * from "./utils" diff --git a/packages/medusa/src/interfaces/index.ts b/packages/medusa/src/interfaces/index.ts index c64b0cc4f8..0c60405bd9 100644 --- a/packages/medusa/src/interfaces/index.ts +++ b/packages/medusa/src/interfaces/index.ts @@ -7,7 +7,6 @@ export * from "./notification-service" export * from "./payment-processor" export * from "./payment-service" export * from "./price-selection-strategy" -export * from "./services" export * from "./tax-calculation-strategy" export * from "./tax-service" export * from "./transaction-base-service" diff --git a/packages/medusa/src/interfaces/services/index.ts b/packages/medusa/src/interfaces/services/index.ts deleted file mode 100644 index 56f14db3b1..0000000000 --- a/packages/medusa/src/interfaces/services/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from "./cache" -export * from "./inventory" -export * from "./stock-location" diff --git a/packages/medusa/src/loaders/plugins.ts b/packages/medusa/src/loaders/plugins.ts index 8c9a4fe709..c367e36da0 100644 --- a/packages/medusa/src/loaders/plugins.ts +++ b/packages/medusa/src/loaders/plugins.ts @@ -589,9 +589,9 @@ async function runSetupFunctions(pluginDetails: PluginDetails): Promise { try { await loaded() } catch (err) { - throw new Error(`A setup function from ${pluginDetails.name} failed`, { - cause: err, - }) + throw new Error( + `A setup function from ${pluginDetails.name} failed. ${err}` + ) } }) ) diff --git a/packages/medusa/src/scripts/migrate-inventory-items.ts b/packages/medusa/src/scripts/migrate-inventory-items.ts index 2fec5b8e84..b1c11cc8c6 100644 --- a/packages/medusa/src/scripts/migrate-inventory-items.ts +++ b/packages/medusa/src/scripts/migrate-inventory-items.ts @@ -1,14 +1,14 @@ -import dotenv from "dotenv" import { AwilixContainer } from "awilix" +import dotenv from "dotenv" import express from "express" -import { - ProductVariantService, - ProductVariantInventoryService, -} from "../services" -import { ProductVariant } from "../models" -import { IInventoryService, IStockLocationService } from "../interfaces" +import { IInventoryService, IStockLocationService } from "@medusajs/types" import loaders from "../loaders" +import { ProductVariant } from "../models" +import { + ProductVariantInventoryService, + ProductVariantService, +} from "../services" dotenv.config() diff --git a/packages/medusa/src/services/order.ts b/packages/medusa/src/services/order.ts index 90c7f50416..bf330c3d80 100644 --- a/packages/medusa/src/services/order.ts +++ b/packages/medusa/src/services/order.ts @@ -1,4 +1,5 @@ -import { isDefined, MedusaError } from "medusa-core-utils" +import { IInventoryService } from "@medusajs/types" +import { isDefined, MedusaError, TransactionBaseService } from "@medusajs/utils" import { EntityManager, FindManyOptions, @@ -8,43 +9,6 @@ import { Not, Raw, } from "typeorm" -import { IInventoryService, TransactionBaseService } from "../interfaces" -import SalesChannelFeatureFlag from "../loaders/feature-flags/sales-channels" -import { - Address, - Cart, - ClaimOrder, - Fulfillment, - FulfillmentItem, - FulfillmentStatus, - GiftCard, - LineItem, - Order, - OrderStatus, - Payment, - PaymentStatus, - Return, - Swap, - TrackingLink -} from "../models" -import { AddressRepository } from "../repositories/address" -import { OrderRepository } from "../repositories/order" -import { FindConfig, QuerySelector, Selector } from "../types/common" -import { - CreateFulfillmentOrder, - FulFillmentItemType -} from "../types/fulfillment" -import { TotalsContext, UpdateOrderInput } from "../types/orders" -import { CreateShippingMethodDto } from "../types/shipping-options" -import { - buildQuery, - buildRelations, - buildSelects, - isString, - setMetadata, -} from "../utils" -import { FlagRouter } from "../utils/flag-router" - import { CartService, CustomerService, @@ -61,8 +25,43 @@ import { ShippingOptionService, ShippingProfileService, TaxProviderService, - TotalsService + TotalsService, } from "." +import SalesChannelFeatureFlag from "../loaders/feature-flags/sales-channels" +import { + Address, + Cart, + ClaimOrder, + Fulfillment, + FulfillmentItem, + FulfillmentStatus, + GiftCard, + LineItem, + Order, + OrderStatus, + Payment, + PaymentStatus, + Return, + Swap, + TrackingLink, +} from "../models" +import { AddressRepository } from "../repositories/address" +import { OrderRepository } from "../repositories/order" +import { FindConfig, QuerySelector, Selector } from "../types/common" +import { + CreateFulfillmentOrder, + FulFillmentItemType, +} from "../types/fulfillment" +import { TotalsContext, UpdateOrderInput } from "../types/orders" +import { CreateShippingMethodDto } from "../types/shipping-options" +import { + buildQuery, + buildRelations, + buildSelects, + isString, + setMetadata, +} from "../utils" +import { FlagRouter } from "../utils/flag-router" import EventBusService from "./event-bus" export const ORDER_CART_ALREADY_EXISTS_ERROR = "Order from cart already exists" diff --git a/packages/medusa/src/services/product-variant-inventory.ts b/packages/medusa/src/services/product-variant-inventory.ts index 28aa2d31da..06f565e51f 100644 --- a/packages/medusa/src/services/product-variant-inventory.ts +++ b/packages/medusa/src/services/product-variant-inventory.ts @@ -1,24 +1,19 @@ -import { isDefined, MedusaError } from "medusa-core-utils" -import { EntityManager, In } from "typeorm" import { ICacheService, IInventoryService, - IStockLocationService, - TransactionBaseService, -} from "../interfaces" -import { LineItem, Product, ProductVariant } from "../models" -import { ProductVariantInventoryItem } from "../models/product-variant-inventory-item" -import { InventoryItemDTO, + IStockLocationService, ReservationItemDTO, ReserveQuantityContext, -} from "../types/inventory" +} from "@medusajs/types" +import { isDefined, MedusaError, TransactionBaseService } from "@medusajs/utils" +import { EntityManager, In } from "typeorm" +import { LineItem, Product, ProductVariant } from "../models" +import { ProductVariantInventoryItem } from "../models/product-variant-inventory-item" import { PricedProduct, PricedVariant } from "../types/pricing" -import { - ProductVariantService, - SalesChannelInventoryService, - SalesChannelLocationService, -} from "./" +import ProductVariantService from "./product-variant" +import SalesChannelInventoryService from "./sales-channel-inventory" +import SalesChannelLocationService from "./sales-channel-location" type InjectedDependencies = { manager: EntityManager diff --git a/packages/medusa/src/services/sales-channel-inventory.ts b/packages/medusa/src/services/sales-channel-inventory.ts index 1f833bcfec..e49481aa35 100644 --- a/packages/medusa/src/services/sales-channel-inventory.ts +++ b/packages/medusa/src/services/sales-channel-inventory.ts @@ -1,9 +1,7 @@ +import { EventBusTypes, IInventoryService } from "@medusajs/types" +import { TransactionBaseService } from "@medusajs/utils" import { EntityManager } from "typeorm" - -import { IInventoryService, TransactionBaseService } from "../interfaces" - -import { EventBusTypes } from "@medusajs/types" -import { SalesChannelLocationService } from "./" +import SalesChannelLocationService from "./sales-channel-location" type InjectedDependencies = { inventoryService: IInventoryService diff --git a/packages/medusa/src/services/sales-channel-location.ts b/packages/medusa/src/services/sales-channel-location.ts index 2302d72dcb..300b56d83b 100644 --- a/packages/medusa/src/services/sales-channel-location.ts +++ b/packages/medusa/src/services/sales-channel-location.ts @@ -1,16 +1,15 @@ -import { EntityManager, In } from "typeorm" -import { IStockLocationService, TransactionBaseService } from "../interfaces" -import { SalesChannelService } from "./" - -import { EventBusTypes } from "@medusajs/types" - +import { IEventBusService, IStockLocationService } from "@medusajs/types" import { MedusaError } from "medusa-core-utils" +import { EntityManager, In } from "typeorm" +import { TransactionBaseService } from "../interfaces" import { SalesChannelLocation } from "../models/sales-channel-location" +import SalesChannelService from "./sales-channel" + type InjectedDependencies = { stockLocationService: IStockLocationService salesChannelService: SalesChannelService - eventBusService: EventBusTypes.IEventBusService + eventBusService: IEventBusService manager: EntityManager } @@ -20,7 +19,7 @@ type InjectedDependencies = { class SalesChannelLocationService extends TransactionBaseService { protected readonly salesChannelService_: SalesChannelService - protected readonly eventBusService_: EventBusTypes.IEventBusService + protected readonly eventBusService_: IEventBusService protected readonly stockLocationService_: IStockLocationService constructor({ diff --git a/packages/medusa/src/services/tax-provider.ts b/packages/medusa/src/services/tax-provider.ts index 00ec5d48f1..19f880c4c8 100644 --- a/packages/medusa/src/services/tax-provider.ts +++ b/packages/medusa/src/services/tax-provider.ts @@ -2,12 +2,12 @@ import { AwilixContainer } from "awilix" import { MedusaError } from "medusa-core-utils" import { In } from "typeorm" +import { ICacheService, IEventBusService } from "@medusajs/types" import { - ICacheService, ITaxService, ItemTaxCalculationLine, TaxCalculationContext, - TransactionBaseService, + TransactionBaseService } from "../interfaces" import { Cart, @@ -16,16 +16,13 @@ import { Region, ShippingMethod, ShippingMethodTaxLine, - TaxProvider, + TaxProvider } from "../models" import { LineItemTaxLineRepository } from "../repositories/line-item-tax-line" import { ShippingMethodTaxLineRepository } from "../repositories/shipping-method-tax-line" import { TaxProviderRepository } from "../repositories/tax-provider" import { isCart } from "../types/cart" - import { TaxLinesMaps, TaxServiceRate } from "../types/tax-service" -import EventBusService from "./event-bus" - import TaxRateService from "./tax-rate" type RegionDetails = { @@ -43,7 +40,7 @@ class TaxProviderService extends TransactionBaseService { protected readonly taxLineRepo_: typeof LineItemTaxLineRepository protected readonly smTaxLineRepo_: typeof ShippingMethodTaxLineRepository protected readonly taxProviderRepo_: typeof TaxProviderRepository - protected readonly eventBus_: EventBusService + protected readonly eventBus_: IEventBusService constructor(container: AwilixContainer) { super(container) diff --git a/packages/medusa/src/strategies/price-selection.ts b/packages/medusa/src/strategies/price-selection.ts index b17c6831fd..26d01deedc 100644 --- a/packages/medusa/src/strategies/price-selection.ts +++ b/packages/medusa/src/strategies/price-selection.ts @@ -1,13 +1,13 @@ +import { ICacheService } from "@medusajs/types" +import { isDefined } from "medusa-core-utils" import { EntityManager } from "typeorm" import { AbstractPriceSelectionStrategy, - ICacheService, IPriceSelectionStrategy, PriceSelectionContext, PriceSelectionResult, PriceType, } from "../interfaces" -import { isDefined } from "medusa-core-utils" import TaxInclusivePricingFeatureFlag from "../loaders/feature-flags/tax-inclusive-pricing" import { MoneyAmountRepository } from "../repositories/money-amount" import { TaxServiceRate } from "../types/tax-service" @@ -79,9 +79,7 @@ class PriceSelectionStrategy extends AbstractPriceSelectionStrategy { variant_id: string, context: PriceSelectionContext ): Promise { - const moneyRepo = this.manager_.withRepository( - this.moneyAmountRepository_ - ) + const moneyRepo = this.manager_.withRepository(this.moneyAmountRepository_) const [prices, count] = await moneyRepo.findManyForVariantInRegion( variant_id, @@ -168,9 +166,7 @@ class PriceSelectionStrategy extends AbstractPriceSelectionStrategy { variant_id: string, context: PriceSelectionContext ): Promise { - const moneyRepo = this.manager_.withRepository( - this.moneyAmountRepository_ - ) + const moneyRepo = this.manager_.withRepository(this.moneyAmountRepository_) const [prices, count] = await moneyRepo.findManyForVariantInRegion( variant_id, diff --git a/packages/medusa/src/subscribers/pricing.ts b/packages/medusa/src/subscribers/pricing.ts index 7079c52d13..27daa4f5f1 100644 --- a/packages/medusa/src/subscribers/pricing.ts +++ b/packages/medusa/src/subscribers/pricing.ts @@ -1,5 +1,5 @@ +import { ICacheService } from "@medusajs/types" import { EventBusService, ProductVariantService } from "../services" -import { ICacheService } from "../interfaces" type ProductVariantUpdatedEventData = { id: string diff --git a/packages/medusa/src/types/common.ts b/packages/medusa/src/types/common.ts index 275ad0a7eb..e7e2c4a7db 100644 --- a/packages/medusa/src/types/common.ts +++ b/packages/medusa/src/types/common.ts @@ -15,11 +15,11 @@ import { FindOptionsWhere, OrderByCondition, } from "typeorm" -import { transformDate } from "../utils/validators/date-transform" -import { BaseEntity } from "../interfaces" -import { ClassConstructor } from "./global" -import { FindOptionsRelations } from "typeorm/find-options/FindOptionsRelations" import { FindOptionsOrder } from "typeorm/find-options/FindOptionsOrder" +import { FindOptionsRelations } from "typeorm/find-options/FindOptionsRelations" +import { BaseEntity } from "../interfaces" +import { transformDate } from "../utils/validators/date-transform" +import { ClassConstructor } from "./global" /** * Utility type used to remove some optional attributes (coming from K) from a type T diff --git a/packages/medusa/src/types/store.ts b/packages/medusa/src/types/store.ts index 9390a9a49a..3c60805f0e 100644 --- a/packages/medusa/src/types/store.ts +++ b/packages/medusa/src/types/store.ts @@ -1,6 +1,6 @@ -import { Store, PaymentProvider, FulfillmentProvider } from "../models" -import { FeatureFlagsResponse } from "./feature-flags" import { ModulesResponse as sdkModulesResponse } from "@medusajs/modules-sdk" +import { FulfillmentProvider, PaymentProvider, Store } from "../models" +import { FeatureFlagsResponse } from "./feature-flags" export type UpdateStoreInput = { name?: string diff --git a/packages/medusa/src/utils/build-query.ts b/packages/medusa/src/utils/build-query.ts index 8cb374fe80..9411e46372 100644 --- a/packages/medusa/src/utils/build-query.ts +++ b/packages/medusa/src/utils/build-query.ts @@ -1,4 +1,3 @@ -import { ExtendedFindConfig, FindConfig } from "../types/common" import { FindManyOptions, FindOperator, @@ -13,6 +12,7 @@ import { MoreThanOrEqual, } from "typeorm" import { FindOptionsOrder } from "typeorm/find-options/FindOptionsOrder" +import { ExtendedFindConfig, FindConfig } from "../types/common" import { isObject } from "./is-object" /** diff --git a/packages/modules-sdk/package.json b/packages/modules-sdk/package.json index 8a3d6e27cd..62cf9252f9 100644 --- a/packages/modules-sdk/package.json +++ b/packages/modules-sdk/package.json @@ -23,9 +23,10 @@ "typescript": "^4.4.4" }, "dependencies": { + "@medusajs/types": "^0.0.1", + "@medusajs/utils": "^0.0.1", "awilix": "^8.0.0", "glob": "7.1.6", - "medusa-core-utils": "^1.1.39", "medusa-telemetry": "^0.0.16", "resolve-cwd": "^3.0.0" }, diff --git a/packages/modules-sdk/src/definitions.ts b/packages/modules-sdk/src/definitions.ts index 5e0c41afa0..46136a213f 100644 --- a/packages/modules-sdk/src/definitions.ts +++ b/packages/modules-sdk/src/definitions.ts @@ -1,4 +1,8 @@ -import { ModuleDefinition, MODULE_RESOURCE_TYPE, MODULE_SCOPE } from "./types" +import { + ModuleDefinition, + MODULE_RESOURCE_TYPE, + MODULE_SCOPE, +} from "@medusajs/types" export const MODULE_DEFINITIONS: ModuleDefinition[] = [ { diff --git a/packages/modules-sdk/src/index.ts b/packages/modules-sdk/src/index.ts index fdf583e7b0..c890af6931 100644 --- a/packages/modules-sdk/src/index.ts +++ b/packages/modules-sdk/src/index.ts @@ -1,5 +1,5 @@ +export * from "@medusajs/types/dist/modules-sdk" export * from "./definitions" export * from "./loaders" export * from "./medusa-module" export * from "./module-helper" -export * from "./types" diff --git a/packages/modules-sdk/src/loaders/__tests__/module-loader.ts b/packages/modules-sdk/src/loaders/__tests__/module-loader.ts index 1c1d1f3ed7..51069aaa1c 100644 --- a/packages/modules-sdk/src/loaders/__tests__/module-loader.ts +++ b/packages/modules-sdk/src/loaders/__tests__/module-loader.ts @@ -1,12 +1,11 @@ -import { AwilixContainer, ClassOrFunctionReturning, Resolver } from "awilix" -import { createMedusaContainer } from "medusa-core-utils" -import { EOL } from "os" import { ModuleResolution, MODULE_RESOURCE_TYPE, MODULE_SCOPE, -} from "../../types" - +} from "@medusajs/types" +import { AwilixContainer, ClassOrFunctionReturning, Resolver } from "awilix" +import { createMedusaContainer } from "medusa-core-utils" +import { EOL } from "os" import { moduleLoader } from "../module-loader" import { trackInstallation } from "../__mocks__/medusa-telemetry" diff --git a/packages/modules-sdk/src/loaders/__tests__/register-modules.ts b/packages/modules-sdk/src/loaders/__tests__/register-modules.ts index adfed43564..4f25ff0ee7 100644 --- a/packages/modules-sdk/src/loaders/__tests__/register-modules.ts +++ b/packages/modules-sdk/src/loaders/__tests__/register-modules.ts @@ -1,10 +1,10 @@ -import MODULE_DEFINITIONS from "../../definitions" import { InternalModuleDeclaration, ModuleDefinition, MODULE_RESOURCE_TYPE, MODULE_SCOPE, -} from "../../types" +} from "@medusajs/types" +import MODULE_DEFINITIONS from "../../definitions" import { registerModules } from "../register-modules" const RESOLVED_PACKAGE = "@medusajs/test-service-resolved" diff --git a/packages/modules-sdk/src/loaders/module-loader.ts b/packages/modules-sdk/src/loaders/module-loader.ts index 9ff18b9d50..09fe95ccf6 100644 --- a/packages/modules-sdk/src/loaders/module-loader.ts +++ b/packages/modules-sdk/src/loaders/module-loader.ts @@ -1,15 +1,13 @@ -import { asValue } from "awilix" -import { EOL } from "os" -import { loadInternalModule } from "./utils" - import { Logger, MedusaContainer, ModuleResolution, MODULE_SCOPE, -} from "../types" - +} from "@medusajs/types" +import { asValue } from "awilix" +import { EOL } from "os" import { ModulesHelper } from "../module-helper" +import { loadInternalModule } from "./utils" export const moduleHelper = new ModulesHelper() diff --git a/packages/modules-sdk/src/loaders/register-modules.ts b/packages/modules-sdk/src/loaders/register-modules.ts index 1e21b2f9ca..fd197c6519 100644 --- a/packages/modules-sdk/src/loaders/register-modules.ts +++ b/packages/modules-sdk/src/loaders/register-modules.ts @@ -1,13 +1,12 @@ -import resolveCwd from "resolve-cwd" - -import MODULE_DEFINITIONS from "../definitions" import { ExternalModuleDeclaration, InternalModuleDeclaration, ModuleDefinition, ModuleResolution, MODULE_SCOPE, -} from "../types" +} from "@medusajs/types" +import resolveCwd from "resolve-cwd" +import MODULE_DEFINITIONS from "../definitions" export const registerModules = ( modules?: Record< diff --git a/packages/modules-sdk/src/loaders/utils/load-internal.ts b/packages/modules-sdk/src/loaders/utils/load-internal.ts index 91b7641e17..f631408dfb 100644 --- a/packages/modules-sdk/src/loaders/utils/load-internal.ts +++ b/packages/modules-sdk/src/loaders/utils/load-internal.ts @@ -1,6 +1,3 @@ -import { asFunction, asValue } from "awilix" -import { createMedusaContainer } from "medusa-core-utils" -import { trackInstallation } from "medusa-telemetry" import { Constructor, InternalModuleDeclaration, @@ -10,7 +7,10 @@ import { ModuleResolution, MODULE_RESOURCE_TYPE, MODULE_SCOPE, -} from "../../types" +} from "@medusajs/types" +import { createMedusaContainer } from "@medusajs/utils" +import { asFunction, asValue } from "awilix" +import { trackInstallation } from "medusa-telemetry" export async function loadInternalModule( container: MedusaContainer, diff --git a/packages/modules-sdk/src/medusa-module.ts b/packages/modules-sdk/src/medusa-module.ts index 29d1c31cbd..528c5c6fdc 100644 --- a/packages/modules-sdk/src/medusa-module.ts +++ b/packages/modules-sdk/src/medusa-module.ts @@ -1,13 +1,13 @@ -import { asValue } from "awilix" -import { createMedusaContainer } from "medusa-core-utils" -import { moduleLoader, registerMedusaModule } from "./loaders" -import { loadModuleMigrations } from "./loaders/utils" import { ExternalModuleDeclaration, InternalModuleDeclaration, MODULE_RESOURCE_TYPE, MODULE_SCOPE, -} from "./types" +} from "@medusajs/types" +import { createMedusaContainer } from "@medusajs/utils" +import { asValue } from "awilix" +import { moduleLoader, registerMedusaModule } from "./loaders" +import { loadModuleMigrations } from "./loaders/utils" const logger: any = { log: (a) => console.log(a), diff --git a/packages/modules-sdk/src/module-helper.ts b/packages/modules-sdk/src/module-helper.ts index 60f0fa423d..a20c0410d2 100644 --- a/packages/modules-sdk/src/module-helper.ts +++ b/packages/modules-sdk/src/module-helper.ts @@ -1,4 +1,4 @@ -import { ModuleResolution, ModulesResponse } from "./types" +import { ModuleResolution, ModulesResponse } from "@medusajs/types" export class ModulesHelper { private modules_: Record = {} diff --git a/packages/oas/medusa-oas-cli/src/__tests__/command-oas.test.ts b/packages/oas/medusa-oas-cli/src/__tests__/command-oas.test.ts index f7ff01e7d8..434f79cfba 100644 --- a/packages/oas/medusa-oas-cli/src/__tests__/command-oas.test.ts +++ b/packages/oas/medusa-oas-cli/src/__tests__/command-oas.test.ts @@ -1,11 +1,11 @@ -import os from "os" -import fs from "fs/promises" import execa from "execa" +import fs from "fs/promises" +import * as yaml from "js-yaml" +import { OpenAPIObject, SchemaObject } from "openapi3-ts" +import { OperationObject } from "openapi3-ts/src/model/OpenApi" +import os from "os" import path from "path" import { v4 as uid } from "uuid" -import { OpenAPIObject, SchemaObject } from "openapi3-ts" -import * as yaml from "js-yaml" -import { OperationObject } from "openapi3-ts/src/model/OpenApi" const medusaPackagePath = path.dirname( require.resolve("@medusajs/medusa/package.json") @@ -209,14 +209,14 @@ describe("command oas", () => { /** @oas [get] /store/regions * operationId: OverwrittenOperation */ -/** +/** * @schema FoobarTestSchema * type: object * properties: * foo: * type: string */ -/** +/** * @schema StoreRegionsListRes * type: object * properties: @@ -301,7 +301,7 @@ paths: "/foobar/tests": get: operationId: GetFoobarTests - responses: + responses: "200": description: OK "/store/regions": @@ -357,7 +357,7 @@ components: description: foo security type: apiKey name: foo-api-key - in: header + in: header ` const targetDir = path.resolve(tmpDir, uid()) const filePath = path.resolve(targetDir, "custom.oas.base.yaml") diff --git a/packages/oas/medusa-oas-cli/src/command-oas.ts b/packages/oas/medusa-oas-cli/src/command-oas.ts index 218345a152..c8ecb8d47c 100644 --- a/packages/oas/medusa-oas-cli/src/command-oas.ts +++ b/packages/oas/medusa-oas-cli/src/command-oas.ts @@ -1,9 +1,9 @@ -import * as path from "path" -import { lstat, mkdir, writeFile } from "fs/promises" -import swaggerInline from "swagger-inline" import OpenAPIParser from "@readme/openapi-parser" -import { OpenAPIObject } from "openapi3-ts" import { Command, Option, OptionValues } from "commander" +import { lstat, mkdir, writeFile } from "fs/promises" +import { OpenAPIObject } from "openapi3-ts" +import * as path from "path" +import swaggerInline from "swagger-inline" import { combineOAS } from "./utils/combine-oas" import { mergeBaseIntoOAS, @@ -17,6 +17,14 @@ import { const medusaPackagePath = path.dirname( require.resolve("@medusajs/medusa/package.json") ) +// Types package directory +const medusaTypesPath = path.dirname( + require.resolve("@medusajs/types/package.json") +) +// Utils package directory +const medusaUtilsPath = path.dirname( + require.resolve("@medusajs/utils/package.json") +) const basePath = path.resolve(__dirname, "../") /** @@ -129,6 +137,8 @@ async function getOASFromCodebase( ): Promise { const gen = await swaggerInline( [ + path.resolve(medusaTypesPath, "dist"), + path.resolve(medusaUtilsPath, "dist"), path.resolve(medusaPackagePath, "dist", "models"), path.resolve(medusaPackagePath, "dist", "types"), path.resolve(medusaPackagePath, "dist", "api/middlewares"), diff --git a/packages/stock-location/jest.config.js b/packages/stock-location/jest.config.js index 7de5bf104a..1b626a0af1 100644 --- a/packages/stock-location/jest.config.js +++ b/packages/stock-location/jest.config.js @@ -1,7 +1,7 @@ module.exports = { globals: { "ts-jest": { - tsConfig: "tsconfig.json", + tsConfig: "tsconfig.spec.json", isolatedModules: false, }, }, diff --git a/packages/stock-location/package.json b/packages/stock-location/package.json index 06cc4917fa..80161325c7 100644 --- a/packages/stock-location/package.json +++ b/packages/stock-location/package.json @@ -17,15 +17,14 @@ "author": "Medusa", "license": "MIT", "devDependencies": { - "@medusajs/medusa": "^1.7.7", - "@medusajs/types": "*", + "@medusajs/types": "^0.0.1", "cross-env": "^5.2.1", "jest": "^25.5.4", "ts-jest": "^25.5.1", "typescript": "^4.4.4" }, "dependencies": { - "@medusajs/modules-sdk": "*", + "@medusajs/modules-sdk": "^0.0.1", "@medusajs/utils": "^0.0.1", "awilix": "^8.0.0", "typeorm": "^0.3.11" @@ -36,9 +35,5 @@ "build": "tsc --build", "test": "jest --passWithNoTests", "test:unit": "jest --passWithNoTests" - }, - "peerDependencies": { - "@medusajs/medusa": "^1.7.7", - "@medusajs/types": "^0.0.1" } } diff --git a/packages/stock-location/src/initialize/index.ts b/packages/stock-location/src/initialize/index.ts index 74a55ff955..48d039ab0c 100644 --- a/packages/stock-location/src/initialize/index.ts +++ b/packages/stock-location/src/initialize/index.ts @@ -1,16 +1,15 @@ -import { IStockLocationService } from "@medusajs/medusa" import { ExternalModuleDeclaration, InternalModuleDeclaration, - MedusaModule + MedusaModule, } from "@medusajs/modules-sdk" -import { EventBusTypes } from "@medusajs/types" +import { IEventBusService, IStockLocationService } from "@medusajs/types" import { StockLocationServiceInitializeOptions } from "../types" export const initialize = async ( options?: StockLocationServiceInitializeOptions | ExternalModuleDeclaration, injectedDependencies?: { - eventBusService: EventBusTypes.IEventBusService + eventBusService: IEventBusService } ): Promise => { const serviceKey = "stockLocationService" diff --git a/packages/stock-location/src/loaders/connection.ts b/packages/stock-location/src/loaders/connection.ts index 2d5c6f7c23..b43f7b14c5 100644 --- a/packages/stock-location/src/loaders/connection.ts +++ b/packages/stock-location/src/loaders/connection.ts @@ -2,10 +2,10 @@ import { InternalModuleDeclaration, LoaderOptions, MODULE_RESOURCE_TYPE, - MODULE_SCOPE + MODULE_SCOPE, } from "@medusajs/modules-sdk" +import { MedusaError } from "@medusajs/utils" import { asValue } from "awilix" -import { MedusaError } from "medusa-core-utils" import { DataSource, DataSourceOptions } from "typeorm" import * as StockLocationModels from "../models" import { StockLocationServiceInitializeOptions } from "../types" diff --git a/packages/stock-location/src/models/stock-location-address.ts b/packages/stock-location/src/models/stock-location-address.ts index 1e8563d6c5..391f76ca3b 100644 --- a/packages/stock-location/src/models/stock-location-address.ts +++ b/packages/stock-location/src/models/stock-location-address.ts @@ -1,5 +1,5 @@ +import { generateEntityId, SoftDeletableEntity } from "@medusajs/utils" import { BeforeInsert, Column, Entity, Index } from "typeorm" -import { SoftDeletableEntity, generateEntityId } from "@medusajs/medusa" @Entity() export class StockLocationAddress extends SoftDeletableEntity { diff --git a/packages/stock-location/src/models/stock-location.ts b/packages/stock-location/src/models/stock-location.ts index 74a1d716f9..20b7b40d6a 100644 --- a/packages/stock-location/src/models/stock-location.ts +++ b/packages/stock-location/src/models/stock-location.ts @@ -1,3 +1,4 @@ +import { generateEntityId, SoftDeletableEntity } from "@medusajs/utils" import { BeforeInsert, Column, @@ -6,9 +7,7 @@ import { JoinColumn, ManyToOne, } from "typeorm" -import { SoftDeletableEntity, generateEntityId } from "@medusajs/medusa" - -import { StockLocationAddress } from "." +import { StockLocationAddress } from "./stock-location-address" @Entity() export class StockLocation extends SoftDeletableEntity { diff --git a/packages/stock-location/src/services/stock-location.ts b/packages/stock-location/src/services/stock-location.ts index 8f28e2da66..178dde8b61 100644 --- a/packages/stock-location/src/services/stock-location.ts +++ b/packages/stock-location/src/services/stock-location.ts @@ -1,22 +1,27 @@ +import { InternalModuleDeclaration } from "@medusajs/modules-sdk" import { - buildQuery, CreateStockLocationInput, FilterableStockLocationProps, FindConfig, - setMetadata, + IEventBusService, + SharedContext, StockLocationAddressInput, - UpdateStockLocationInput -} from "@medusajs/medusa" -import { InternalModuleDeclaration } from "@medusajs/modules-sdk" -import { EventBusTypes, SharedContext } from "@medusajs/types" -import { InjectEntityManager, MedusaContext } from "@medusajs/utils" -import { isDefined, MedusaError } from "medusa-core-utils" + UpdateStockLocationInput, +} from "@medusajs/types" +import { + buildQuery, + InjectEntityManager, + isDefined, + MedusaContext, + MedusaError, + setMetadata, +} from "@medusajs/utils" import { EntityManager } from "typeorm" import { StockLocation, StockLocationAddress } from "../models" type InjectedDependencies = { manager: EntityManager - eventBusService: EventBusTypes.IEventBusService + eventBusService: IEventBusService } /** @@ -31,7 +36,7 @@ export default class StockLocationService { } protected readonly manager_: EntityManager - protected readonly eventBusService_: EventBusTypes.IEventBusService + protected readonly eventBusService_: IEventBusService constructor( { eventBusService, manager }: InjectedDependencies, diff --git a/packages/stock-location/tsconfig.spec.json b/packages/stock-location/tsconfig.spec.json new file mode 100644 index 0000000000..9b62409191 --- /dev/null +++ b/packages/stock-location/tsconfig.spec.json @@ -0,0 +1,5 @@ +{ + "extends": "./tsconfig.json", + "include": ["src"], + "exclude": ["node_modules"] +} diff --git a/packages/types/package.json b/packages/types/package.json index de6a034185..1dfacb6a54 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -16,13 +16,12 @@ ], "author": "Medusa", "license": "MIT", - "dependencies": { - "@medusajs/modules-sdk": "^0.0.1" - }, "devDependencies": { + "awilix": "^8.0.0", "cross-env": "^5.2.1", "typeorm": "^0.3.11", - "typescript": "^4.4.4" + "typescript": "^4.4.4", + "winston": "^3.8.2" }, "scripts": { "prepare": "cross-env NODE_ENV=production yarn run build", diff --git a/packages/types/src/bundles.ts b/packages/types/src/bundles.ts index 373f1bf84e..47c58e68fa 100644 --- a/packages/types/src/bundles.ts +++ b/packages/types/src/bundles.ts @@ -1,5 +1,8 @@ +export * as CacheTypes from "./cache" export * as CommonTypes from "./common" export * as EventBusTypes from "./event-bus" +export * as InventoryTypes from "./inventory" +export * as ModulesSdkTypes from "./modules-sdk" export * as SearchTypes from "./search" +export * as StockLocationTypes from "./stock-location" export * as TransactionBaseTypes from "./transaction-base" - diff --git a/packages/types/src/cache/index.ts b/packages/types/src/cache/index.ts new file mode 100644 index 0000000000..9376fea807 --- /dev/null +++ b/packages/types/src/cache/index.ts @@ -0,0 +1 @@ +export * from "./service" diff --git a/packages/medusa/src/interfaces/services/cache.ts b/packages/types/src/cache/service.ts similarity index 98% rename from packages/medusa/src/interfaces/services/cache.ts rename to packages/types/src/cache/service.ts index c96cd6a306..b96b41e57b 100644 --- a/packages/medusa/src/interfaces/services/cache.ts +++ b/packages/types/src/cache/service.ts @@ -1,7 +1,5 @@ export interface ICacheService { get(key: string): Promise - set(key: string, data: unknown, ttl?: number): Promise - invalidate(key: string): Promise } diff --git a/packages/types/src/common/common.ts b/packages/types/src/common/common.ts new file mode 100644 index 0000000000..532d70f139 --- /dev/null +++ b/packages/types/src/common/common.ts @@ -0,0 +1,186 @@ +import { + FindManyOptions, + FindOneOptions, + FindOperator, + FindOptionsSelect, + FindOptionsWhere, + OrderByCondition, +} from "typeorm" +import { FindOptionsOrder } from "typeorm/find-options/FindOptionsOrder" +import { FindOptionsRelations } from "typeorm/find-options/FindOptionsRelations" + +/** + * Utility type used to remove some optional attributes (coming from K) from a type T + */ +export type WithRequiredProperty = T & { + // -? removes 'optional' from a property + [Property in K]-?: T[Property] +} + +export type PartialPick = { + [P in K]?: T[P] +} + +export interface BaseEntity { + id: string + created_at: Date + updated_at: Date +} + +export interface SoftDeletableEntity extends BaseEntity { + deleted_at: Date | null +} + +export type Writable = { + -readonly [key in keyof T]: + | T[key] + | FindOperator + | FindOperator + | FindOperator +} + +export interface FindConfig { + select?: (keyof Entity)[] + skip?: number + take?: number + relations?: string[] + order?: { [K: string]: "ASC" | "DESC" } +} + +export type ExtendedFindConfig = ( + | Omit, "where" | "relations" | "select"> + | Omit, "where" | "relations" | "select"> +) & { + select?: FindOptionsSelect + relations?: FindOptionsRelations + where: FindOptionsWhere | FindOptionsWhere[] + order?: FindOptionsOrder + skip?: number + take?: number +} + +export type QuerySelector = Selector & { q?: string } +export type TreeQuerySelector = QuerySelector & { + include_descendants_tree?: boolean +} + +export type Selector = { + [key in keyof TEntity]?: + | TEntity[key] + | TEntity[key][] + | DateComparisonOperator + | StringComparisonOperator + | NumericalComparisonOperator + | FindOperator +} + +export type TotalField = + | "shipping_total" + | "discount_total" + | "tax_total" + | "refunded_total" + | "total" + | "subtotal" + | "refundable_amount" + | "gift_card_total" + | "gift_card_tax_total" + +export interface CustomFindOptions { + select?: FindManyOptions["select"] + where?: FindManyOptions["where"] & { + [P in InKeys]?: TModel[P][] + } + order?: OrderByCondition + skip?: number + take?: number +} + +export type QueryConfig = { + defaultFields?: (keyof TEntity | string)[] + defaultRelations?: string[] + allowedFields?: string[] + allowedRelations?: string[] + defaultLimit?: number + isList?: boolean +} + +export type RequestQueryFields = { + expand?: string + fields?: string + offset?: number + limit?: number + order?: string +} + +export type PaginatedResponse = { + limit: number + offset: number + count: number +} + +export type DeleteResponse = { + id: string + object: string + deleted: boolean +} + +export interface EmptyQueryParams {} + +export interface DateComparisonOperator { + lt?: Date + gt?: Date + gte?: Date + lte?: Date +} + +export interface StringComparisonOperator { + lt?: string + gt?: string + gte?: string + lte?: string +} + +export interface NumericalComparisonOperator { + lt?: number + gt?: number + gte?: number + lte?: number +} + +export interface AddressPayload { + first_name?: string + last_name?: string + phone?: string + metadata?: Record + company?: string + address_1?: string + address_2?: string + city?: string + country_code?: string + province?: string + postal_code?: string +} + +export interface AddressCreatePayload { + first_name: string + last_name: string + phone: string + metadata: object + company: string + address_1: string + address_2: string + city: string + country_code: string + province: string + postal_code: string +} + +export interface FindParams { + expand?: string + fields?: string +} + +export interface FindPaginationParams { + offset?: number + limit?: number +} diff --git a/packages/types/src/common/config-module.ts b/packages/types/src/common/config-module.ts index f4e9f6eb01..c155d83794 100644 --- a/packages/types/src/common/config-module.ts +++ b/packages/types/src/common/config-module.ts @@ -1,8 +1,8 @@ -import { - ExternalModuleDeclaration, - InternalModuleDeclaration -} from "@medusajs/modules-sdk" import { LoggerOptions } from "typeorm" +import { + ExternalModuleDeclaration, + InternalModuleDeclaration, +} from "../modules-sdk" type SessionOptions = { name?: string diff --git a/packages/types/src/common/index.ts b/packages/types/src/common/index.ts index c21e29bd25..a7d522e39a 100644 --- a/packages/types/src/common/index.ts +++ b/packages/types/src/common/index.ts @@ -1 +1,3 @@ -export * from "./config-module"; +export * from "./common" +export * from "./config-module" +export * from "./medusa-container" diff --git a/packages/types/src/common/medusa-container.ts b/packages/types/src/common/medusa-container.ts new file mode 100644 index 0000000000..cf18456010 --- /dev/null +++ b/packages/types/src/common/medusa-container.ts @@ -0,0 +1,6 @@ +import { AwilixContainer } from "awilix" + +export type MedusaContainer = AwilixContainer & { + registerAdd: (name: string, registration: T) => MedusaContainer + createScope: () => MedusaContainer +} diff --git a/packages/types/src/event-bus/event-bus.ts b/packages/types/src/event-bus/event-bus.ts index 3c1ac674fc..d047e23d76 100644 --- a/packages/types/src/event-bus/event-bus.ts +++ b/packages/types/src/event-bus/event-bus.ts @@ -1,7 +1,7 @@ import { Subscriber, SubscriberContext } from "." import { ITransactionBaseService } from "../transaction-base/transaction-base" -export interface IEventBusService extends ITransactionBaseService { +export interface IEventBusService extends ITransactionBaseService { subscribe( eventName: string | symbol, subscriber: Subscriber, @@ -14,4 +14,4 @@ export interface IEventBusService extends ITransactionBaseService { context?: SubscriberContext ): this emit(event: string, data: T, options?: unknown): Promise -} \ No newline at end of file +} diff --git a/packages/types/src/event-bus/index.ts b/packages/types/src/event-bus/index.ts index 1dc5f033d2..ea80602715 100644 --- a/packages/types/src/event-bus/index.ts +++ b/packages/types/src/event-bus/index.ts @@ -1,4 +1,3 @@ export * from "./common" export * from "./event-bus" export * from "./event-bus-module" - diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts index fca1f54e74..8ae9e7d579 100644 --- a/packages/types/src/index.ts +++ b/packages/types/src/index.ts @@ -1,7 +1,10 @@ export * from "./bundles" +export * from "./cache" export * from "./common" export * from "./event-bus" +export * from "./inventory" +export * from "./modules-sdk" export * from "./search" export * from "./shared-context" +export * from "./stock-location" export * from "./transaction-base" - diff --git a/packages/medusa/src/types/inventory.ts b/packages/types/src/inventory/common.ts similarity index 98% rename from packages/medusa/src/types/inventory.ts rename to packages/types/src/inventory/common.ts index 1e6d631257..1a1a2b8dc1 100644 --- a/packages/medusa/src/types/inventory.ts +++ b/packages/types/src/inventory/common.ts @@ -1,4 +1,7 @@ -import { NumericalComparisonOperator, StringComparisonOperator } from "./common" +import { + NumericalComparisonOperator, + StringComparisonOperator, +} from "../common" /** * @schema InventoryItemDTO diff --git a/packages/types/src/inventory/index.ts b/packages/types/src/inventory/index.ts new file mode 100644 index 0000000000..3f4dbbc489 --- /dev/null +++ b/packages/types/src/inventory/index.ts @@ -0,0 +1,2 @@ +export * from "./common" +export * from "./inventory" diff --git a/packages/medusa/src/interfaces/services/inventory.ts b/packages/types/src/inventory/inventory.ts similarity index 97% rename from packages/medusa/src/interfaces/services/inventory.ts rename to packages/types/src/inventory/inventory.ts index 03c602545c..aeda627801 100644 --- a/packages/medusa/src/interfaces/services/inventory.ts +++ b/packages/types/src/inventory/inventory.ts @@ -1,18 +1,18 @@ -import { FindConfig } from "../../types/common" +import { FindConfig } from "../common" import { - InventoryItemDTO, - ReservationItemDTO, - InventoryLevelDTO, - FilterableInventoryItemProps, CreateInventoryItemInput, + CreateInventoryLevelInput, CreateReservationItemInput, + FilterableInventoryItemProps, FilterableInventoryLevelProps, FilterableReservationItemProps, - CreateInventoryLevelInput, + InventoryItemDTO, + InventoryLevelDTO, + ReservationItemDTO, UpdateInventoryLevelInput, UpdateReservationItemInput, -} from "../../types/inventory" +} from "./common" export interface IInventoryService { listInventoryItems( diff --git a/packages/modules-sdk/src/types/index.ts b/packages/types/src/modules-sdk/index.ts similarity index 94% rename from packages/modules-sdk/src/types/index.ts rename to packages/types/src/modules-sdk/index.ts index 9d24396d82..0dc1f92fc2 100644 --- a/packages/modules-sdk/src/types/index.ts +++ b/packages/types/src/modules-sdk/index.ts @@ -1,8 +1,7 @@ -import { MedusaContainer as coreMedusaContainer } from "medusa-core-utils" import { Logger as _Logger } from "winston" - -export type MedusaContainer = coreMedusaContainer +import { MedusaContainer } from "../common/medusa-container" export type Constructor = new (...args: any[]) => T +export * from "../common/medusa-container" export type LogLevel = | "query" diff --git a/packages/types/src/search/index-types.ts b/packages/types/src/search/index-types.ts index e37be82f8a..c21cdc38d0 100644 --- a/packages/types/src/search/index-types.ts +++ b/packages/types/src/search/index-types.ts @@ -1,3 +1,3 @@ export const indexTypes = { - PRODUCTS: "products" -}; \ No newline at end of file + PRODUCTS: "products", +} diff --git a/packages/types/src/search/index.ts b/packages/types/src/search/index.ts index 4c4fe3a01b..db65a2b548 100644 --- a/packages/types/src/search/index.ts +++ b/packages/types/src/search/index.ts @@ -17,4 +17,3 @@ export type IndexSettings = { */ transformer?: (document: any) => any } - diff --git a/packages/medusa/src/types/stock-location.ts b/packages/types/src/stock-location/common.ts similarity index 98% rename from packages/medusa/src/types/stock-location.ts rename to packages/types/src/stock-location/common.ts index 9d17073630..b491dff151 100644 --- a/packages/medusa/src/types/stock-location.ts +++ b/packages/types/src/stock-location/common.ts @@ -1,5 +1,4 @@ -import { SalesChannel } from "../models" -import { StringComparisonOperator } from "./common" +import { StringComparisonOperator } from "../common/common" /** * @schema StockLocationAddressDTO @@ -148,7 +147,7 @@ export type StockLocationDTO = { * $ref: "#/components/schemas/SalesChannel" */ export type StockLocationExpandedDTO = StockLocationDTO & { - sales_channels?: SalesChannel[] + sales_channels?: any[] // TODO: SalesChannel type } export type FilterableStockLocationProps = { diff --git a/packages/types/src/stock-location/index.ts b/packages/types/src/stock-location/index.ts new file mode 100644 index 0000000000..a73fc94bd6 --- /dev/null +++ b/packages/types/src/stock-location/index.ts @@ -0,0 +1,2 @@ +export * from "./common" +export * from "./stock-location" diff --git a/packages/medusa/src/interfaces/services/stock-location.ts b/packages/types/src/stock-location/stock-location.ts similarity index 89% rename from packages/medusa/src/interfaces/services/stock-location.ts rename to packages/types/src/stock-location/stock-location.ts index 44d60620ab..625ae879c0 100644 --- a/packages/medusa/src/interfaces/services/stock-location.ts +++ b/packages/types/src/stock-location/stock-location.ts @@ -1,10 +1,10 @@ -import { FindConfig } from "../../types/common" +import { FindConfig } from "../common/common" import { CreateStockLocationInput, FilterableStockLocationProps, StockLocationDTO, UpdateStockLocationInput, -} from "../../types/stock-location" +} from "./common" export interface IStockLocationService { list( diff --git a/packages/utils/package.json b/packages/utils/package.json index 1497e65c0a..6e259cbefd 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -17,15 +17,19 @@ "author": "Medusa", "license": "MIT", "devDependencies": { - "@medusajs/types": "*", + "@medusajs/types": "^0.0.1", + "@types/express": "^4.17.17", "cross-env": "^5.2.1", "jest": "^25.5.4", "ts-jest": "^25.5.1", - "typeorm": "^0.3.11", "typescript": "^4.4.4" }, - "peerDependencies": { - "@medusajs/types": "^0.0.1" + "dependencies": { + "awilix": "^8.0.0", + "class-transformer": "^0.5.1", + "class-validator": "^0.13.2", + "typeorm": "^0.3.11", + "ulid": "^2.3.0" }, "scripts": { "prepare": "cross-env NODE_ENV=production yarn run build", diff --git a/packages/utils/src/common/build-query.ts b/packages/utils/src/common/build-query.ts new file mode 100644 index 0000000000..8f5b3b7aa5 --- /dev/null +++ b/packages/utils/src/common/build-query.ts @@ -0,0 +1,345 @@ +import { ExtendedFindConfig, FindConfig } from "@medusajs/types" +import { + FindManyOptions, + FindOperator, + FindOptionsRelations, + FindOptionsSelect, + FindOptionsWhere, + In, + IsNull, + LessThan, + LessThanOrEqual, + MoreThan, + MoreThanOrEqual, +} from "typeorm" +import { FindOptionsOrder } from "typeorm/find-options/FindOptionsOrder" +import { isObject } from "./is-object" + +/** + * Used to build TypeORM queries. + * @param selector The selector + * @param config The config + * @return The QueryBuilderConfig + */ +export function buildQuery( + selector: TWhereKeys, + config: FindConfig = {} +) { + const query: ExtendedFindConfig = { + where: buildWhere(selector), + } + + if ("deleted_at" in selector) { + query.withDeleted = true + } + + if ("skip" in config) { + ;(query as FindManyOptions).skip = config.skip + } + + if ("take" in config) { + ;(query as FindManyOptions).take = config.take + } + + if (config.relations) { + query.relations = buildRelations(config.relations) + } + + if (config.select) { + query.select = buildSelects(config.select as string[]) + } + + if (config.order) { + query.order = buildOrder(config.order) + } + + return query +} + +/** + * @param constraints + * + * @example + * const q = buildWhere( + * { + * id: "1234", + * test1: ["123", "12", "1"], + * test2: Not("this"), + * date: { gt: date }, + * amount: { gt: 10 }, + * }, + *) + * + * // Output + * { + * id: "1234", + * test1: In(["123", "12", "1"]), + * test2: Not("this"), + * date: MoreThan(date), + * amount: MoreThan(10) + * } + */ +function buildWhere( + constraints: TWhereKeys +): FindOptionsWhere { + const where: FindOptionsWhere = {} + for (const [key, value] of Object.entries(constraints)) { + if (value === undefined) { + continue + } + + if (value === null) { + where[key] = IsNull() + continue + } + + if (value instanceof FindOperator) { + where[key] = value + continue + } + + if (Array.isArray(value)) { + where[key] = In(value) + continue + } + + if (typeof value === "object") { + Object.entries(value).forEach(([objectKey, objectValue]) => { + switch (objectKey) { + case "lt": + where[key] = LessThan(objectValue) + break + case "gt": + where[key] = MoreThan(objectValue) + break + case "lte": + where[key] = LessThanOrEqual(objectValue) + break + case "gte": + where[key] = MoreThanOrEqual(objectValue) + break + default: + if (objectValue != undefined && typeof objectValue === "object") { + where[key] = buildWhere(objectValue) + return + } + where[key] = value + } + return + }) + + continue + } + + where[key] = value + } + + return where +} + +/** + * Revert new object structure of find options to the legacy structure of previous version + * @example + * input: { + * test: { + * test1: true, + * test2: true, + * test3: { + * test4: true + * }, + * }, + * test2: true + * } + * output: ['test.test1', 'test.test2', 'test.test3.test4', 'test2'] + * @param input + */ +export function buildLegacyFieldsListFrom( + input: + | FindOptionsWhere + | FindOptionsSelect + | FindOptionsOrder + | FindOptionsRelations = {} +): (keyof TEntity)[] { + if (!Object.keys(input).length) { + return [] + } + + const output: Set = new Set(Object.keys(input)) + + for (const key of Object.keys(input)) { + if (input[key] != undefined && typeof input[key] === "object") { + const deepRes = buildLegacyFieldsListFrom(input[key]) + + const items = deepRes.reduce((acc, val) => { + acc.push(`${key}.${val}`) + return acc + }, [] as string[]) + + items.forEach((item) => output.add(item)) + continue + } + + output.add(key) + } + + return Array.from(output) as (keyof TEntity)[] +} + +export function buildSelects( + selectCollection: string[] +): FindOptionsSelect { + return buildRelationsOrSelect(selectCollection) as FindOptionsSelect +} + +export function buildRelations( + relationCollection: string[] +): FindOptionsRelations { + return buildRelationsOrSelect( + relationCollection + ) as FindOptionsRelations +} + +export function addOrderToSelect( + order: FindOptionsOrder, + select: FindOptionsSelect +): void { + for (const orderBy of Object.keys(order)) { + if (isObject(order[orderBy])) { + select[orderBy] = + select[orderBy] && isObject(select[orderBy]) ? select[orderBy] : {} + addOrderToSelect(order[orderBy], select[orderBy]) + continue + } + + select[orderBy] = isObject(select[orderBy]) + ? { ...select[orderBy], id: true, [orderBy]: true } + : true + } +} + +/** + * Convert an collection of dot string into a nested object + * @example + * input: [ + * order, + * order.items, + * order.swaps, + * order.swaps.additional_items, + * order.discounts, + * order.discounts.rule, + * order.claims, + * order.claims.additional_items, + * additional_items, + * additional_items.variant, + * return_order, + * return_order.items, + * return_order.shipping_method, + * return_order.shipping_method.tax_lines + * ] + * output: { + * "order": { + * "items": true, + * "swaps": { + * "additional_items": true + * }, + * "discounts": { + * "rule": true + * }, + * "claims": { + * "additional_items": true + * } + * }, + * "additional_items": { + * "variant": true + * }, + * "return_order": { + * "items": true, + * "shipping_method": { + * "tax_lines": true + * } + * } + * } + * @param collection + */ +function buildRelationsOrSelect( + collection: string[] +): FindOptionsRelations | FindOptionsSelect { + const output: FindOptionsRelations | FindOptionsSelect = {} + + for (const relation of collection) { + if (relation.indexOf(".") > -1) { + const nestedRelations = relation.split(".") + + let parent = output + + while (nestedRelations.length > 1) { + const nestedRelation = nestedRelations.shift() as string + parent = parent[nestedRelation] = + parent[nestedRelation] !== true && + typeof parent[nestedRelation] === "object" + ? parent[nestedRelation] + : {} + } + + parent[nestedRelations[0]] = true + + continue + } + + output[relation] = output[relation] ?? true + } + + return output +} + +/** + * Convert an order of dot string into a nested object + * @example + * input: { id: "ASC", "items.title": "ASC", "items.variant.title": "ASC" } + * output: { + * "id": "ASC", + * "items": { + * "id": "ASC", + * "variant": { + * "title": "ASC" + * } + * }, + * } + * @param orderBy + */ +function buildOrder(orderBy: { + [k: string]: "ASC" | "DESC" +}): FindOptionsOrder { + const output: FindOptionsOrder = {} + + const orderKeys = Object.keys(orderBy) + + for (const order of orderKeys) { + if (order.indexOf(".") > -1) { + const nestedOrder = order.split(".") + + let parent = output + + while (nestedOrder.length > 1) { + const nestedRelation = nestedOrder.shift() as string + parent = parent[nestedRelation] = parent[nestedRelation] ?? {} + } + + parent[nestedOrder[0]] = orderBy[order] + + continue + } + + output[order] = orderBy[order] + } + + return output +} + +export function nullableValue(value: any): FindOperator { + if (value === null) { + return IsNull() + } else { + return value + } +} diff --git a/packages/utils/src/common/db-aware-column.ts b/packages/utils/src/common/db-aware-column.ts new file mode 100644 index 0000000000..76dd7c57ec --- /dev/null +++ b/packages/utils/src/common/db-aware-column.ts @@ -0,0 +1,66 @@ +import path from "path" +import { Column, ColumnOptions, ColumnType } from "typeorm" +import getConfigFile from "./get-config-file" + +const pgSqliteTypeMapping: { [key: string]: ColumnType } = { + increment: "rowid", + timestamptz: "datetime", + jsonb: "simple-json", + enum: "text", +} + +const pgSqliteGenerationMapping: { + [key: string]: "increment" | "uuid" | "rowid" +} = { + increment: "rowid", +} + +let dbType: string +export function resolveDbType(pgSqlType: ColumnType): ColumnType { + if (!dbType) { + const { configModule } = getConfigFile( + path.resolve("."), + `medusa-config` + ) as any + + dbType = configModule?.projectConfig?.database_type || "postgres" + } + + if (dbType === "sqlite" && (pgSqlType as string) in pgSqliteTypeMapping) { + return pgSqliteTypeMapping[pgSqlType.toString()] + } + return pgSqlType +} + +export function resolveDbGenerationStrategy( + pgSqlType: "increment" | "uuid" | "rowid" +): "increment" | "uuid" | "rowid" { + if (!dbType) { + const { configModule } = getConfigFile( + path.resolve("."), + `medusa-config` + ) as any + + dbType = configModule?.projectConfig?.database_type || "postgres" + } + + if (dbType === "sqlite" && pgSqlType in pgSqliteTypeMapping) { + return pgSqliteGenerationMapping[pgSqlType] + } + return pgSqlType +} + +export function DbAwareColumn(columnOptions: ColumnOptions): PropertyDecorator { + const pre = columnOptions.type + if (columnOptions.type) { + columnOptions.type = resolveDbType(columnOptions.type) + } + + if (pre === "jsonb" && pre !== columnOptions.type) { + if ("default" in columnOptions) { + columnOptions.default = JSON.stringify(columnOptions.default) + } + } + + return Column(columnOptions) +} diff --git a/packages/utils/src/common/errors.ts b/packages/utils/src/common/errors.ts new file mode 100644 index 0000000000..704667affa --- /dev/null +++ b/packages/utils/src/common/errors.ts @@ -0,0 +1,55 @@ +/** + * @typedef MedusaErrorType + * + */ +export const MedusaErrorTypes = { + /** Errors stemming from the database */ + DB_ERROR: "database_error", + DUPLICATE_ERROR: "duplicate_error", + INVALID_ARGUMENT: "invalid_argument", + INVALID_DATA: "invalid_data", + UNAUTHORIZED: "unauthorized", + NOT_FOUND: "not_found", + NOT_ALLOWED: "not_allowed", + UNEXPECTED_STATE: "unexpected_state", + CONFLICT: "conflict", + PAYMENT_AUTHORIZATION_ERROR: "payment_authorization_error", +} + +export const MedusaErrorCodes = { + INSUFFICIENT_INVENTORY: "insufficient_inventory", + CART_INCOMPATIBLE_STATE: "cart_incompatible_state", +} + +/** + * Standardized error to be used across Medusa project. + * @extends Error + */ +export class MedusaError extends Error { + public type: string + public message: string + public code?: string + public date: Date + public static Types = MedusaErrorTypes + public static Codes = MedusaErrorCodes + + /** + * Creates a standardized error to be used across Medusa project. + * @param {string} type - type of error + * @param {string} message - message to go along with error + * @param {string} code - code of error + * @param {Array} params - params + */ + constructor(type: string, message: string, code?: string, ...params: any) { + super(...params) + + if (Error.captureStackTrace) { + Error.captureStackTrace(this, MedusaError) + } + + this.type = type + this.code = code + this.message = message + this.date = new Date() + } +} diff --git a/packages/utils/src/common/generate-entity-id.ts b/packages/utils/src/common/generate-entity-id.ts new file mode 100644 index 0000000000..c85f891ba8 --- /dev/null +++ b/packages/utils/src/common/generate-entity-id.ts @@ -0,0 +1,16 @@ +import { ulid } from "ulid" + +/** + * Generate a composed id based on the input parameters and return either the is if it exists or the generated one. + * @param idProperty + * @param prefix + */ +export function generateEntityId(idProperty: string, prefix?: string): string { + if (idProperty) { + return idProperty + } + + const id = ulid() + prefix = prefix ? `${prefix}_` : "" + return `${prefix}${id}` +} diff --git a/packages/utils/src/common/get-config-file.ts b/packages/utils/src/common/get-config-file.ts new file mode 100644 index 0000000000..ec0a11ad78 --- /dev/null +++ b/packages/utils/src/common/get-config-file.ts @@ -0,0 +1,32 @@ +import { join } from "path" + +/** + * Attempts to resolve the config file in a given root directory. + * @param {string} rootDir - the directory to find the config file in. + * @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. + */ +function getConfigFile( + rootDir: string, + configName: string +): { configModule: TConfig; configFilePath: string; error?: any } { + const configPath = join(rootDir, configName) + let configFilePath = `` + let configModule + let err + + try { + configFilePath = require.resolve(configPath) + configModule = require(configFilePath) + } catch (e) { + err = e + } + + if (configModule && typeof configModule.default === "object") { + configModule = configModule.default + } + + return { configModule, configFilePath, error: err } +} + +export default getConfigFile diff --git a/packages/utils/src/common/index.ts b/packages/utils/src/common/index.ts new file mode 100644 index 0000000000..d65ad70421 --- /dev/null +++ b/packages/utils/src/common/index.ts @@ -0,0 +1,15 @@ +export * from "./build-query" +export * from "./db-aware-column" +export * from "./errors" +export * from "./generate-entity-id" +export * from "./get-config-file" +export * from "./is-date" +export * from "./is-defined" +export * from "./is-email" +export * from "./is-object" +export * from "./is-string" +export * from "./medusa-container" +export * from "./models" +export * from "./set-metadata" +export * from "./transaction-base-service" +export * from "./wrap-handler" diff --git a/packages/utils/src/common/is-date.ts b/packages/utils/src/common/is-date.ts new file mode 100644 index 0000000000..97e98072d3 --- /dev/null +++ b/packages/utils/src/common/is-date.ts @@ -0,0 +1,4 @@ +export function isDate(value: any): value is Date { + const date = new Date(value) + return !isNaN(date.valueOf()) +} diff --git a/packages/utils/src/common/is-defined.ts b/packages/utils/src/common/is-defined.ts new file mode 100644 index 0000000000..0fdeaa72f8 --- /dev/null +++ b/packages/utils/src/common/is-defined.ts @@ -0,0 +1,5 @@ +export function isDefined( + val: T +): val is T extends undefined ? never : T { + return typeof val !== "undefined" +} diff --git a/packages/utils/src/common/is-email.ts b/packages/utils/src/common/is-email.ts new file mode 100644 index 0000000000..3d1126792b --- /dev/null +++ b/packages/utils/src/common/is-email.ts @@ -0,0 +1,20 @@ +import { isEmail } from "class-validator" +import { MedusaError } from "./errors" + +/** + * Used to validate user email. + * @param {string} email - email to validate + * @return {string} the validated email + */ +export function validateEmail(email: string): string { + const validatedEmail = isEmail(email) + + if (!validatedEmail) { + throw new MedusaError( + MedusaError.Types.INVALID_DATA, + "The email is not valid" + ) + } + + return email.toLowerCase() +} diff --git a/packages/utils/src/common/is-object.ts b/packages/utils/src/common/is-object.ts new file mode 100644 index 0000000000..778a601412 --- /dev/null +++ b/packages/utils/src/common/is-object.ts @@ -0,0 +1,3 @@ +export function isObject(obj: unknown): obj is object { + return typeof obj === "object" && !!obj +} diff --git a/packages/utils/src/common/is-string.ts b/packages/utils/src/common/is-string.ts new file mode 100644 index 0000000000..7529d697ad --- /dev/null +++ b/packages/utils/src/common/is-string.ts @@ -0,0 +1,3 @@ +export function isString(val: any): val is string { + return val != null && typeof val === "string" +} diff --git a/packages/utils/src/common/medusa-container.ts b/packages/utils/src/common/medusa-container.ts new file mode 100644 index 0000000000..c98607e12c --- /dev/null +++ b/packages/utils/src/common/medusa-container.ts @@ -0,0 +1,57 @@ +import { MedusaContainer } from "@medusajs/types" +import { + asFunction, + asValue, + AwilixContainer, + ClassOrFunctionReturning, + createContainer, + Resolver, +} from "awilix" + +function asArray( + resolvers: (ClassOrFunctionReturning | Resolver)[] +): { resolve: (container: AwilixContainer) => unknown[] } { + return { + resolve: (container: AwilixContainer) => + resolvers.map((resolver) => container.build(resolver)), + } +} + +function registerAdd( + this: MedusaContainer, + name: string, + registration: typeof asFunction | typeof asValue +) { + const storeKey = name + "_STORE" + + if (this.registrations[storeKey] === undefined) { + this.register(storeKey, asValue([] as Resolver[])) + } + const store = this.resolve(storeKey) as ( + | ClassOrFunctionReturning + | Resolver + )[] + + if (this.registrations[name] === undefined) { + this.register(name, asArray(store)) + } + store.unshift(registration) + + return this +} + +export function createMedusaContainer(...args): MedusaContainer { + const container = createContainer.apply(null, args) as MedusaContainer + + container.registerAdd = registerAdd.bind(container) + + const originalScope = container.createScope + container.createScope = () => { + const scoped = originalScope() as MedusaContainer + scoped.registerAdd = registerAdd.bind(scoped) + + return scoped + } + + return container +} diff --git a/packages/utils/src/common/models/base-entity.ts b/packages/utils/src/common/models/base-entity.ts new file mode 100644 index 0000000000..db3b5079c9 --- /dev/null +++ b/packages/utils/src/common/models/base-entity.ts @@ -0,0 +1,16 @@ +import { CreateDateColumn, PrimaryColumn, UpdateDateColumn } from "typeorm" +import { resolveDbType } from "../db-aware-column" + +/** + * Base abstract entity for all entities + */ +export abstract class BaseEntity { + @PrimaryColumn() + id: string + + @CreateDateColumn({ type: resolveDbType("timestamptz") }) + created_at: Date + + @UpdateDateColumn({ type: resolveDbType("timestamptz") }) + updated_at: Date +} diff --git a/packages/utils/src/common/models/index.ts b/packages/utils/src/common/models/index.ts new file mode 100644 index 0000000000..0ebedceeb2 --- /dev/null +++ b/packages/utils/src/common/models/index.ts @@ -0,0 +1,2 @@ +export * from "./base-entity" +export * from "./soft-deletable-entity" diff --git a/packages/utils/src/common/models/soft-deletable-entity.ts b/packages/utils/src/common/models/soft-deletable-entity.ts new file mode 100644 index 0000000000..833f6aa989 --- /dev/null +++ b/packages/utils/src/common/models/soft-deletable-entity.ts @@ -0,0 +1,8 @@ +import { DeleteDateColumn } from "typeorm" +import { resolveDbType } from "../db-aware-column" +import { BaseEntity } from "./base-entity" + +export abstract class SoftDeletableEntity extends BaseEntity { + @DeleteDateColumn({ type: resolveDbType("timestamptz") }) + deleted_at: Date | null +} diff --git a/packages/utils/src/common/set-metadata.ts b/packages/utils/src/common/set-metadata.ts new file mode 100644 index 0000000000..4dc5f6d42a --- /dev/null +++ b/packages/utils/src/common/set-metadata.ts @@ -0,0 +1,45 @@ +import { MedusaError } from "./errors" + +/** + * Dedicated method to set metadata. + * @param obj - the entity to apply metadata to. + * @param metadata - the metadata to set + * @return resolves to the updated result. + */ +export function setMetadata( + obj: { metadata: Record | null }, + metadata: Record +): Record { + const existing = obj.metadata || {} + const newData = {} + + for (const [key, value] of Object.entries(metadata)) { + if (typeof key !== "string") { + throw new MedusaError( + MedusaError.Types.INVALID_ARGUMENT, + "Key type is invalid. Metadata keys must be strings" + ) + } + + /** + * We reserve the empty string as a way to delete a key. + * If the value is an empty string, we don't + * set it, and if it exists in the existing metadata, we + * unset the field. + */ + if (value === "") { + if (key in existing) { + delete existing[key] + } + + continue + } + + newData[key] = value + } + + return { + ...existing, + ...newData, + } +} diff --git a/packages/utils/src/common/transaction-base-service.ts b/packages/utils/src/common/transaction-base-service.ts new file mode 100644 index 0000000000..87158f0dc0 --- /dev/null +++ b/packages/utils/src/common/transaction-base-service.ts @@ -0,0 +1,152 @@ +import { EntityManager } from "typeorm" +import { IsolationLevel } from "typeorm/driver/types/IsolationLevel" + +export abstract class TransactionBaseService { + protected manager_: EntityManager + protected transactionManager_: EntityManager | undefined + + protected get activeManager_(): EntityManager { + return this.transactionManager_ ?? this.manager_ + } + + protected constructor( + protected readonly __container__: any, + protected readonly __configModule__?: Record, + protected readonly __moduleDeclaration__?: Record + ) { + this.manager_ = __container__.manager + } + + withTransaction(transactionManager?: EntityManager): this { + if (!transactionManager) { + return this + } + + const cloned = new (this.constructor as any)( + this.__container__, + this.__configModule__, + this.__moduleDeclaration__ + ) + + cloned.manager_ = transactionManager + cloned.transactionManager_ = transactionManager + + return cloned + } + + protected shouldRetryTransaction_( + err: { code: string } | Record + ): boolean { + if (!(err as { code: string })?.code) { + return false + } + const code = (err as { code: string })?.code + return code === "40001" || code === "40P01" + } + + /** + * Wraps some work within a transactional block. If the service already has + * a transaction manager attached this will be reused, otherwise a new + * transaction manager is created. + * @param work - the transactional work to be done + * @param isolationOrErrorHandler - the isolation level to be used for the work. + * @param maybeErrorHandlerOrDontFail Potential error handler + * @return the result of the transactional work + */ + protected async atomicPhase_( + work: (transactionManager: EntityManager) => Promise, + isolationOrErrorHandler?: + | IsolationLevel + | ((error: TError) => Promise), + maybeErrorHandlerOrDontFail?: ( + error: TError + ) => Promise + ): Promise { + let errorHandler = maybeErrorHandlerOrDontFail + let isolation: + | IsolationLevel + | ((error: TError) => Promise) + | undefined + | null = isolationOrErrorHandler + let dontFail = false + if (typeof isolationOrErrorHandler === "function") { + isolation = null + errorHandler = isolationOrErrorHandler + dontFail = !!maybeErrorHandlerOrDontFail + } + + if (this.transactionManager_) { + const doWork = async (m: EntityManager): Promise => { + this.manager_ = m + this.transactionManager_ = m + try { + return await work(m) + } catch (error) { + if (errorHandler) { + const queryRunner = this.transactionManager_.queryRunner + if (queryRunner && queryRunner.isTransactionActive) { + await queryRunner.rollbackTransaction() + } + + await errorHandler(error) + } + throw error + } + } + + return await doWork(this.transactionManager_) + } else { + const temp = this.manager_ + const doWork = async (m: EntityManager): Promise => { + this.manager_ = m + this.transactionManager_ = m + try { + const result = await work(m) + this.manager_ = temp + this.transactionManager_ = undefined + return result + } catch (error) { + this.manager_ = temp + this.transactionManager_ = undefined + throw error + } + } + + if (isolation && this.manager_) { + let result + try { + result = await this.manager_.transaction( + isolation as IsolationLevel, + async (m) => doWork(m) + ) + return result + } catch (error) { + if (this.shouldRetryTransaction_(error)) { + return this.manager_.transaction( + isolation as IsolationLevel, + async (m): Promise => doWork(m) + ) + } else { + if (errorHandler) { + await errorHandler(error) + } + throw error + } + } + } + + try { + return await this.manager_.transaction(async (m) => doWork(m)) + } catch (error) { + if (errorHandler) { + const result = await errorHandler(error) + if (dontFail) { + return result as TResult + } + } + + throw error + } + } + } +} diff --git a/packages/utils/src/common/wrap-handler.ts b/packages/utils/src/common/wrap-handler.ts new file mode 100644 index 0000000000..797509c096 --- /dev/null +++ b/packages/utils/src/common/wrap-handler.ts @@ -0,0 +1,36 @@ +import { NextFunction, Request, RequestHandler, Response } from "express" + +type handler = (req: Request, res: Response) => Promise + +export const wrapHandler = (fn: handler): RequestHandler => { + return ( + req: Request & { errors?: Error[] }, + res: Response, + next: NextFunction + ) => { + if (req?.errors?.length) { + return res.status(400).json({ + errors: req.errors, + message: + "Provided request body contains errors. Please check the data and retry the request", + }) + } + + return fn(req, res).catch(next) + } +} + +/** + * @schema MultipleErrors + * title: "Multiple Errors" + * type: object + * properties: + * errors: + * type: array + * description: Array of errors + * items: + * $ref: "#/components/schemas/Error" + * message: + * type: string + * default: "Provided request body contains errors. Please check the data and retry the request" + */ diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index 9ed118df6e..5d89805f6f 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -1,5 +1,5 @@ export * from "./bundles" +export * from "./common" export * from "./decorators" export * from "./event-bus" export * from "./search" - diff --git a/yarn.lock b/yarn.lock index 7854aa59ac..808ed4d41b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2348,16 +2348,6 @@ __metadata: languageName: node linkType: hard -"@babel/polyfill@npm:^7.8.7": - version: 7.12.1 - resolution: "@babel/polyfill@npm:7.12.1" - dependencies: - core-js: ^2.6.5 - regenerator-runtime: ^0.13.4 - checksum: f5d233d2958582e8678838c32c42ba780965119ebb3771d9b9735f85efabc7b8b49161e7d908477486e0aaf8508410e957be764c27a6a828714fb9d1b7f80bc3 - languageName: node - linkType: hard - "@babel/preset-env@npm:7.11.5": version: 7.11.5 resolution: "@babel/preset-env@npm:7.11.5" @@ -5555,8 +5545,8 @@ __metadata: linkType: hard "@mapbox/node-pre-gyp@npm:^1.0.0": - version: 1.0.9 - resolution: "@mapbox/node-pre-gyp@npm:1.0.9" + version: 1.0.10 + resolution: "@mapbox/node-pre-gyp@npm:1.0.10" dependencies: detect-libc: ^2.0.0 https-proxy-agent: ^5.0.0 @@ -5569,7 +5559,7 @@ __metadata: tar: ^6.1.11 bin: node-pre-gyp: bin/node-pre-gyp - checksum: 5b32a2c3bf44e0340a29cc82cbb726bc8f49aa721388fa741afb790035975299a114b907018fc35832896cde7fa11ba2c703e2ccfd1f5a99ffe1c57814f58571 + checksum: 469f3bc00778c76e0a7ffaf40742482462e05fec31b53c55ad6d6a892894046c0db7bb8543ed49b2cf1926dfcd9af1289985c367c5d20076939f8a889f686e45 languageName: node linkType: hard @@ -5622,6 +5612,7 @@ __metadata: dependencies: "@hookform/error-message": ^2.0.1 "@medusajs/medusa": "*" + "@medusajs/types": ^0.0.1 "@radix-ui/react-accordion": ^1.0.1 "@radix-ui/react-avatar": ^1.0.1 "@radix-ui/react-collapsible": ^1.0.1 @@ -5708,13 +5699,12 @@ __metadata: version: 0.0.0-use.local resolution: "@medusajs/cache-inmemory@workspace:packages/cache-inmemory" dependencies: - "@medusajs/medusa": "*" + "@medusajs/modules-sdk": ^0.0.1 + "@medusajs/types": ^0.0.1 cross-env: ^5.2.1 jest: ^25.5.4 ts-jest: ^25.5.1 typescript: ^4.4.4 - peerDependencies: - "@medusajs/medusa": ^1.7.11 languageName: unknown linkType: soft @@ -5722,13 +5712,14 @@ __metadata: version: 0.0.0-use.local resolution: "@medusajs/cache-redis@workspace:packages/cache-redis" dependencies: - "@medusajs/medusa": "*" + "@medusajs/modules-sdk": ^0.0.1 + "@medusajs/types": ^0.0.1 + awilix: ^8.0.0 cross-env: ^5.2.1 + ioredis: ^5.3.1 jest: ^25.5.4 ts-jest: ^25.5.1 typescript: ^4.4.4 - peerDependencies: - "@medusajs/medusa": ^1.7.11 languageName: unknown linkType: soft @@ -5767,6 +5758,7 @@ __metadata: "@medusajs/modules-sdk": "*" "@medusajs/types": ^0.0.1 "@medusajs/utils": ^0.0.1 + awilix: ^8.0.0 bullmq: ^3.5.6 cross-env: ^5.2.1 ioredis: ^5.2.5 @@ -5781,9 +5773,8 @@ __metadata: version: 0.0.0-use.local resolution: "@medusajs/inventory@workspace:packages/inventory" dependencies: - "@medusajs/medusa": ^1.7.7 "@medusajs/modules-sdk": "*" - "@medusajs/types": "*" + "@medusajs/types": ^0.0.1 "@medusajs/utils": ^0.0.1 awilix: ^8.0.0 cross-env: ^5.2.1 @@ -5791,8 +5782,6 @@ __metadata: ts-jest: ^25.5.1 typeorm: ^0.3.11 typescript: ^4.4.4 - peerDependencies: - "@medusajs/types": ^0.0.1 languageName: unknown linkType: soft @@ -5803,11 +5792,8 @@ __metadata: "@babel/cli": ^7.7.5 "@babel/core": ^7.7.5 "@babel/plugin-proposal-class-properties": ^7.7.4 - "@babel/plugin-transform-classes": ^7.9.5 "@babel/plugin-transform-runtime": ^7.7.6 - "@babel/polyfill": ^7.8.7 "@babel/preset-env": ^7.7.5 - "@babel/runtime": ^7.9.6 axios: ^0.21.4 chalk: ^4.0.0 configstore: 5.0.1 @@ -5824,13 +5810,13 @@ __metadata: meant: ^1.0.3 medusa-core-utils: ^1.1.39 medusa-telemetry: 0.0.16 - netrc-parser: ^3.1.6 open: ^8.0.6 ora: ^5.4.1 pg-god: ^1.0.12 prompts: ^2.4.2 regenerator-runtime: ^0.13.11 resolve-cwd: ^3.0.0 + sqlite3: ^5.0.2 stack-trace: ^0.0.10 ulid: ^2.3.0 url: ^0.11.0 @@ -5884,26 +5870,22 @@ __metadata: languageName: unknown linkType: soft -"@medusajs/medusa@*, @medusajs/medusa@^1.7.6, @medusajs/medusa@^1.7.7, @medusajs/medusa@^1.7.8, @medusajs/medusa@workspace:packages/medusa": +"@medusajs/medusa@*, @medusajs/medusa@^1.7.12, @medusajs/medusa@^1.7.6, @medusajs/medusa@^1.7.7, @medusajs/medusa@^1.7.8, @medusajs/medusa@workspace:packages/medusa": version: 0.0.0-use.local resolution: "@medusajs/medusa@workspace:packages/medusa" dependencies: - "@babel/cli": ^7.14.3 - "@babel/core": ^7.14.3 - "@babel/preset-typescript": ^7.13.0 "@medusajs/medusa-cli": ^1.3.8 - "@medusajs/modules-sdk": "*" - "@medusajs/types": "*" - "@medusajs/utils": "*" + "@medusajs/modules-sdk": ^0.0.1 + "@medusajs/types": ^0.0.1 + "@medusajs/utils": ^0.0.1 "@types/express": ^4.17.17 "@types/ioredis": ^4.28.10 - "@types/jest": ^27.5.2 "@types/jsonwebtoken": ^8.5.9 "@types/lodash": ^4.14.191 "@types/multer": ^1.4.7 awilix: ^8.0.0 - babel-preset-medusa-package: ^1.1.19 body-parser: ^1.19.0 + boxen: ^5.0.1 bullmq: ^3.5.6 chokidar: ^3.4.2 class-transformer: ^0.5.1 @@ -5914,6 +5896,7 @@ __metadata: cors: ^2.8.5 cross-env: ^5.2.1 cross-spawn: ^7.0.3 + dotenv: ^16.0.3 express: ^4.17.1 express-session: ^1.17.3 fs-exists-cached: ^1.0.0 @@ -5923,6 +5906,7 @@ __metadata: iso8601-duration: ^1.3.0 jest: ^25.5.4 jsonwebtoken: ^8.5.1 + lodash: ^4.17.21 medusa-core-utils: ^1.1.39 medusa-interfaces: ^1.3.6 medusa-telemetry: ^0.0.16 @@ -5930,20 +5914,17 @@ __metadata: morgan: ^1.9.1 multer: ^1.4.4 node-schedule: ^2.1.1 - nodemon: ^2.0.20 papaparse: ^5.3.2 passport: ^0.4.1 passport-http-bearer: ^1.0.1 passport-jwt: ^4.0.1 passport-local: ^1.0.0 - pg: ^8.5.1 randomatic: ^3.1.1 redis: ^3.0.2 reflect-metadata: ^0.1.13 + regenerator-runtime: ^0.13.11 request-ip: ^2.1.3 - resolve-cwd: ^3.0.0 scrypt-kdf: ^2.0.1 - sqlite3: ^5.0.2 supertest: ^4.0.2 ts-jest: ^25.5.1 typescript: ^4.4.4 @@ -5951,6 +5932,7 @@ __metadata: uuid: ^8.3.2 winston: ^3.8.2 peerDependencies: + "@medusajs/types": ^0.0.1 medusa-interfaces: 1.3.6 typeorm: ^0.3.11 bin: @@ -5962,11 +5944,12 @@ __metadata: version: 0.0.0-use.local resolution: "@medusajs/modules-sdk@workspace:packages/modules-sdk" dependencies: + "@medusajs/types": ^0.0.1 + "@medusajs/utils": ^0.0.1 awilix: ^8.0.0 cross-env: ^5.2.1 glob: 7.1.6 jest: ^25.5.4 - medusa-core-utils: ^1.1.39 medusa-telemetry: ^0.0.16 resolve-cwd: ^3.0.0 ts-jest: ^25.5.1 @@ -6027,9 +6010,8 @@ __metadata: version: 0.0.0-use.local resolution: "@medusajs/stock-location@workspace:packages/stock-location" dependencies: - "@medusajs/medusa": ^1.7.7 - "@medusajs/modules-sdk": "*" - "@medusajs/types": "*" + "@medusajs/modules-sdk": ^0.0.1 + "@medusajs/types": ^0.0.1 "@medusajs/utils": ^0.0.1 awilix: ^8.0.0 cross-env: ^5.2.1 @@ -6037,35 +6019,36 @@ __metadata: ts-jest: ^25.5.1 typeorm: ^0.3.11 typescript: ^4.4.4 - peerDependencies: - "@medusajs/medusa": ^1.7.7 - "@medusajs/types": ^0.0.1 languageName: unknown linkType: soft -"@medusajs/types@*, @medusajs/types@^0.0.1, @medusajs/types@workspace:packages/types": +"@medusajs/types@^0.0.1, @medusajs/types@workspace:packages/types": version: 0.0.0-use.local resolution: "@medusajs/types@workspace:packages/types" dependencies: - "@medusajs/modules-sdk": ^0.0.1 + awilix: ^8.0.0 cross-env: ^5.2.1 typeorm: ^0.3.11 typescript: ^4.4.4 + winston: ^3.8.2 languageName: unknown linkType: soft -"@medusajs/utils@*, @medusajs/utils@^0.0.1, @medusajs/utils@workspace:packages/utils": +"@medusajs/utils@^0.0.1, @medusajs/utils@workspace:packages/utils": version: 0.0.0-use.local resolution: "@medusajs/utils@workspace:packages/utils" dependencies: - "@medusajs/types": "*" + "@medusajs/types": ^0.0.1 + "@types/express": ^4.17.17 + awilix: ^8.0.0 + class-transformer: ^0.5.1 + class-validator: ^0.13.2 cross-env: ^5.2.1 jest: ^25.5.4 ts-jest: ^25.5.1 typeorm: ^0.3.11 typescript: ^4.4.4 - peerDependencies: - "@medusajs/types": ^0.0.1 + ulid: ^2.3.0 languageName: unknown linkType: soft @@ -11211,7 +11194,7 @@ __metadata: languageName: node linkType: hard -"@types/jest@npm:^27.0.1, @types/jest@npm:^27.0.3, @types/jest@npm:^27.5.2": +"@types/jest@npm:^27.0.1, @types/jest@npm:^27.0.3": version: 27.5.2 resolution: "@types/jest@npm:27.5.2" dependencies: @@ -12814,7 +12797,18 @@ __metadata: languageName: node linkType: hard -"agentkeepalive@npm:^4.1.3, agentkeepalive@npm:^4.2.1": +"agentkeepalive@npm:^4.1.3": + version: 4.3.0 + resolution: "agentkeepalive@npm:4.3.0" + dependencies: + debug: ^4.1.0 + depd: ^2.0.0 + humanize-ms: ^1.2.1 + checksum: 61cbdab12d45e82e9ae515b0aa8d09617b66f72409e541a646dd7be4b7260d335d7f56a38079ad305bf0ffb8405592a459faf1294111289107f48352a20c2799 + languageName: node + linkType: hard + +"agentkeepalive@npm:^4.2.1": version: 4.2.1 resolution: "agentkeepalive@npm:4.2.1" dependencies: @@ -16593,13 +16587,6 @@ __metadata: languageName: node linkType: hard -"core-js@npm:^2.6.5": - version: 2.6.12 - resolution: "core-js@npm:2.6.12" - checksum: 00128efe427789120a06b819adc94cc72b96955acb331cb71d09287baf9bd37bebd191d91f1ee4939c893a050307ead4faea08876f09115112612b6a05684b63 - languageName: node - linkType: hard - "core-js@npm:^3.0.4, core-js@npm:^3.22.1, core-js@npm:^3.22.3, core-js@npm:^3.6.5, core-js@npm:^3.7.0, core-js@npm:^3.8.2": version: 3.23.4 resolution: "core-js@npm:3.23.4" @@ -17633,14 +17620,14 @@ __metadata: languageName: node linkType: hard -"denque@npm:^2.0.1": +"denque@npm:^2.1.0": version: 2.1.0 resolution: "denque@npm:2.1.0" checksum: f9ef81aa0af9c6c614a727cb3bd13c5d7db2af1abf9e6352045b86e85873e629690f6222f4edd49d10e4ccf8f078bbeec0794fafaf61b659c0589d0c511ec363 languageName: node linkType: hard -"depd@npm:2.0.0, depd@npm:~2.0.0": +"depd@npm:2.0.0, depd@npm:^2.0.0, depd@npm:~2.0.0": version: 2.0.0 resolution: "depd@npm:2.0.0" checksum: 58bd06ec20e19529b06f7ad07ddab60e504d9e0faca4bd23079fac2d279c3594334d736508dc350e06e510aba5e22e4594483b3a6562ce7c17dd797f4cc4ad2c @@ -19779,21 +19766,6 @@ __metadata: languageName: node linkType: hard -"execa@npm:^0.10.0": - version: 0.10.0 - resolution: "execa@npm:0.10.0" - dependencies: - cross-spawn: ^6.0.0 - get-stream: ^3.0.0 - is-stream: ^1.1.0 - npm-run-path: ^2.0.0 - p-finally: ^1.0.0 - signal-exit: ^3.0.0 - strip-eof: ^1.0.0 - checksum: 3e8562b78f1552ff629770aa81cdb98dac927b6b7f7adc10815ecf13b6917bbabc0468d7d81494f0bb05c59b83a22639e879ef15a17c0dc3434cc32e90e85ab3 - languageName: node - linkType: hard - "execa@npm:^1.0.0": version: 1.0.0 resolution: "execa@npm:1.0.0" @@ -21808,13 +21780,6 @@ __metadata: languageName: node linkType: hard -"get-stream@npm:^3.0.0": - version: 3.0.0 - resolution: "get-stream@npm:3.0.0" - checksum: 003f5f3b8870da59c6aafdf6ed7e7b07b48c2f8629cd461bd3900726548b6b8cfa2e14d6b7814fbb08f07a42f4f738407fa70b989928b2783a76b278505bba22 - languageName: node - linkType: hard - "get-stream@npm:^4.0.0, get-stream@npm:^4.1.0": version: 4.1.0 resolution: "get-stream@npm:4.1.0" @@ -23469,20 +23434,20 @@ __metadata: languageName: node linkType: hard -"ioredis@npm:^5.2.2, ioredis@npm:^5.2.5": - version: 5.2.5 - resolution: "ioredis@npm:5.2.5" +"ioredis@npm:^5.2.2, ioredis@npm:^5.2.5, ioredis@npm:^5.3.1": + version: 5.3.1 + resolution: "ioredis@npm:5.3.1" dependencies: "@ioredis/commands": ^1.1.1 cluster-key-slot: ^1.1.0 debug: ^4.3.4 - denque: ^2.0.1 + denque: ^2.1.0 lodash.defaults: ^4.2.0 lodash.isarguments: ^3.1.0 redis-errors: ^1.2.0 redis-parser: ^3.0.0 standard-as-callback: ^2.1.0 - checksum: fe41af91cc5e3bf17d296ba32b521f6b1dae80854c3b70953ff2858751b106abebe8a8b6c1cb7a00d5534942a929ce835ef2ba78ac3db06ef5d6a336dd872268 + checksum: 52277fd278e1a29fed020c1fb6238dd82e1b0f7b2b9bd052787ba6d6785fb153d7ce8276b354ba542cdb6005b5d9a3b439f7c811ef5852223b8367332acebe12 languageName: node linkType: hard @@ -28609,8 +28574,9 @@ __metadata: version: 0.0.0-use.local resolution: "medusa-plugin-algolia@workspace:packages/medusa-plugin-algolia" dependencies: - "@medusajs/types": "*" - "@medusajs/utils": "*" + "@medusajs/modules-sdk": ^0.0.1 + "@medusajs/types": ^0.0.1 + "@medusajs/utils": ^0.0.1 algoliasearch: ^4.15.0 client-sessions: ^0.8.0 cross-env: ^5.2.1 @@ -28789,10 +28755,13 @@ __metadata: version: 0.0.0-use.local resolution: "medusa-plugin-meilisearch@workspace:packages/medusa-plugin-meilisearch" dependencies: - "@medusajs/types": "*" - "@medusajs/utils": "*" + "@medusajs/medusa": ^1.7.12 + "@medusajs/types": ^0.0.1 + "@medusajs/utils": ^0.0.1 + body-parser: ^1.19.0 cross-env: ^5.2.1 jest: ^25.5.4 + lodash: ^4.17.21 meilisearch: ^0.31.1 typescript: ^4.9.5 languageName: unknown @@ -29601,7 +29570,7 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^3.0.0, minipass@npm:^3.1.0, minipass@npm:^3.1.1, minipass@npm:^3.1.3, minipass@npm:^3.1.6": +"minipass@npm:^3.0.0, minipass@npm:^3.1.1, minipass@npm:^3.1.6": version: 3.3.4 resolution: "minipass@npm:3.3.4" dependencies: @@ -29610,6 +29579,15 @@ __metadata: languageName: node linkType: hard +"minipass@npm:^3.1.0, minipass@npm:^3.1.3": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: ^4.0.0 + checksum: a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c + languageName: node + linkType: hard + "minizlib@npm:^1.3.3": version: 1.3.3 resolution: "minizlib@npm:1.3.3" @@ -30123,16 +30101,6 @@ __metadata: languageName: node linkType: hard -"netrc-parser@npm:^3.1.6": - version: 3.1.6 - resolution: "netrc-parser@npm:3.1.6" - dependencies: - debug: ^3.1.0 - execa: ^0.10.0 - checksum: 53eae3d0ac5a2849189f284769263fe2c3a94252cf2a4749969e542a88a8e708f459fa5b8e4347149ef3db81b9ca7bb5ab1b44633ba001bf5126cffd6ea2737a - languageName: node - linkType: hard - "new-date@npm:^1.0.3": version: 1.0.3 resolution: "new-date@npm:1.0.3" @@ -36649,8 +36617,8 @@ __metadata: linkType: hard "sqlite3@npm:^5.0.2": - version: 5.0.8 - resolution: "sqlite3@npm:5.0.8" + version: 5.1.6 + resolution: "sqlite3@npm:5.1.6" dependencies: "@mapbox/node-pre-gyp": ^1.0.0 node-addon-api: ^4.2.0 @@ -36664,7 +36632,7 @@ __metadata: peerDependenciesMeta: node-gyp: optional: true - checksum: 7ca429313b4702976630d70b8761137f7900fe923343c22f0d185ab0b1013e08fac023c5828abf2b13a813c36c0923745b2a1733ef00ec6b8a0e415e67177a70 + checksum: 85f1dd1f4b9fa906578330e7badc1116c61ef4e7c64a09897268923f5c9ff4ae1e0a447dd4594c0f8c3b20a410fcc5d8d00d1056225a5186c57ea7f7c9b18974 languageName: node linkType: hard